This commit is contained in:
Generated
+4
@@ -2300,6 +2300,10 @@ dependencies = [
|
||||
[[package]]
|
||||
name = "rabby-core"
|
||||
version = "0.1.0"
|
||||
dependencies = [
|
||||
"serde",
|
||||
"serde_json",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "raw-window-handle"
|
||||
|
||||
@@ -7,3 +7,9 @@ repository.workspace = true
|
||||
|
||||
[lib]
|
||||
path = "src/lib.rs"
|
||||
|
||||
[dependencies]
|
||||
serde = { version = "1", features = ["derive"] }
|
||||
|
||||
[dev-dependencies]
|
||||
serde_json = "1"
|
||||
|
||||
@@ -1,13 +1,14 @@
|
||||
use crate::{ConnectionKind, Profile};
|
||||
use serde::{Deserialize, Serialize};
|
||||
use std::collections::HashSet;
|
||||
|
||||
#[derive(Debug, Clone, PartialEq, Eq)]
|
||||
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
|
||||
pub struct ShortcutBinding {
|
||||
pub command: String,
|
||||
pub binding: String,
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone, PartialEq, Eq)]
|
||||
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
|
||||
pub struct AppConfig {
|
||||
pub profiles: Vec<Profile>,
|
||||
pub theme_id: String,
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
use crate::slug;
|
||||
use serde::{Deserialize, Serialize};
|
||||
|
||||
#[derive(Debug, Clone, PartialEq, Eq)]
|
||||
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
|
||||
pub enum ConnectionKind {
|
||||
LocalShell,
|
||||
Ssh,
|
||||
@@ -8,7 +9,7 @@ pub enum ConnectionKind {
|
||||
Serial,
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone, PartialEq, Eq)]
|
||||
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
|
||||
pub struct Profile {
|
||||
pub id: String,
|
||||
pub name: String,
|
||||
@@ -38,7 +39,7 @@ impl Profile {
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone, PartialEq, Eq)]
|
||||
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
|
||||
pub enum PaneNode {
|
||||
Leaf {
|
||||
profile_id: String,
|
||||
@@ -51,7 +52,7 @@ pub enum PaneNode {
|
||||
},
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
|
||||
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
|
||||
pub enum SplitAxis {
|
||||
Horizontal,
|
||||
Vertical,
|
||||
@@ -89,14 +90,14 @@ impl PaneNode {
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone, PartialEq, Eq)]
|
||||
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
|
||||
pub struct Tab {
|
||||
pub title: String,
|
||||
pub root: PaneNode,
|
||||
pub progress: Option<u8>,
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone, PartialEq, Eq)]
|
||||
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
|
||||
pub struct Workspace {
|
||||
pub profiles: Vec<Profile>,
|
||||
pub tabs: Vec<Tab>,
|
||||
@@ -239,4 +240,24 @@ mod tests {
|
||||
assert_eq!(ws.tabs[0].progress, Some(42));
|
||||
assert!(ws.set_tab_progress(0, Some(101)).is_err());
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn workspace_round_trips_nested_splits() {
|
||||
let mut ws = Workspace::default_linux();
|
||||
ws.add_profile(
|
||||
Profile::new("ssh-prod", "Prod SSH", ConnectionKind::Ssh, "ssh prod").unwrap(),
|
||||
)
|
||||
.unwrap();
|
||||
ws.tabs[0].root = PaneNode::leaf("local")
|
||||
.split(SplitAxis::Horizontal, PaneNode::leaf("ssh-prod"), 55)
|
||||
.unwrap();
|
||||
ws.set_quake_mode(true);
|
||||
|
||||
let encoded = serde_json::to_string(&ws).unwrap();
|
||||
let decoded: Workspace = serde_json::from_str(&encoded).unwrap();
|
||||
|
||||
assert_eq!(decoded, ws);
|
||||
assert_eq!(decoded.tabs[0].root.leaf_count(), 2);
|
||||
assert!(decoded.quake_mode);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user