use std::path::PathBuf;
use super::snapshot::ViewSnapshot;
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
pub struct InstanceId {
pub workspace: PathBuf,
pub pid: u32,
}
#[derive(Debug, Clone)]
pub struct Origin {
pub workspace: PathBuf,
pub cwd: PathBuf,
pub pid: u32,
pub herdr_pane: Option<String>,
}
impl Origin {
pub fn id(&self) -> InstanceId {
InstanceId {
workspace: self.workspace.clone(),
pid: self.pid,
}
}
}
#[derive(Debug, Clone, PartialEq)]
pub struct Instance {
pub id: InstanceId,
pub view: ViewSnapshot,
pub running: bool,
}
impl Instance {
pub fn closed(&self) -> bool {
self.view.closed_at.is_some()
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn an_instance_is_its_workspace_and_process() {
let origin = Origin {
workspace: PathBuf::from("/repo"),
cwd: PathBuf::from("/repo/sub"),
pid: 42,
herdr_pane: Some("p".into()),
};
assert_eq!(
origin.id(),
InstanceId {
workspace: PathBuf::from("/repo"),
pid: 42,
}
);
}
}