use crate::node::Node; use serde::{Deserialize, Serialize}; use time::OffsetDateTime; #[derive(Debug, Clone, Eq, PartialEq, Serialize, Deserialize)] pub struct DirectoryBuffer { pub parent: String, pub nodes: Vec, pub total: usize, pub focus: usize, #[serde(skip, default = "now")] pub explored_at: OffsetDateTime, } impl DirectoryBuffer { pub fn new(parent: String, nodes: Vec, focus: usize) -> Self { let total = nodes.len(); Self { parent, nodes, total, focus, explored_at: now(), } } pub fn focused_node(&self) -> Option<&Node> { self.nodes.get(self.focus) } } fn now() -> OffsetDateTime { OffsetDateTime::now_local() .ok() .unwrap_or_else(OffsetDateTime::now_utc) }