use std::collections::BTreeMap;
use serde::{Deserialize, Serialize};
use crate::{
id::{PaneId, SessionId, WindowId},
pane::TearPane,
window::TearWindow,
};
#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
pub struct TearSession {
pub id: SessionId,
pub name: String,
pub windows: BTreeMap<WindowId, TearWindow>,
pub panes: BTreeMap<PaneId, TearPane>,
pub active_window: WindowId,
pub state: SessionState,
pub created_at_unix: u64,
#[serde(default)]
pub description: String,
#[serde(default)]
pub source: SessionSource,
}
#[derive(Copy, Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)]
#[serde(rename_all = "lowercase")]
pub enum SessionState {
Active,
Detached,
}
#[derive(Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)]
#[serde(tag = "kind", content = "id", rename_all = "snake_case")]
pub enum SessionSource {
Human,
Agent,
Named(String),
}
impl Default for SessionSource {
fn default() -> Self {
SessionSource::Human
}
}
impl SessionSource {
#[must_use]
pub fn label(&self) -> &str {
match self {
SessionSource::Human => "human",
SessionSource::Agent => "agent",
SessionSource::Named(_) => "named",
}
}
}