use std::collections::HashSet;
use std::path::{Path, PathBuf};
#[derive(Debug, Clone, Default)]
pub struct OpenTabs {
paths: HashSet<PathBuf>,
}
impl OpenTabs {
pub fn set(&mut self, path: PathBuf) {
self.paths.insert(path);
}
pub fn clear(&mut self, path: &Path) {
self.paths.remove(path);
}
pub fn contains(&self, path: &Path) -> bool {
self.paths.contains(path)
}
}
#[cfg(test)]
#[allow(clippy::unwrap_used, clippy::expect_used)]
mod tests {
use super::*;
#[test]
fn set_then_contains() {
let mut tabs = OpenTabs::default();
let path = PathBuf::from("/repo/wt");
assert!(!tabs.contains(&path));
tabs.set(path.clone());
assert!(tabs.contains(&path));
}
#[test]
fn clear_removes_only_that_path() {
let mut tabs = OpenTabs::default();
let a = PathBuf::from("/repo/a");
let b = PathBuf::from("/repo/b");
tabs.set(a.clone());
tabs.set(b.clone());
tabs.clear(&a);
assert!(!tabs.contains(&a));
assert!(tabs.contains(&b));
}
}