use crate::core::EditorDocument;
#[cfg(feature = "std")]
use std::collections::HashMap;
#[cfg(not(feature = "std"))]
use alloc::collections::BTreeMap as HashMap;
#[cfg(not(feature = "std"))]
use alloc::string::String;
#[derive(Debug)]
pub struct EditorSession {
pub document: EditorDocument,
pub id: String,
#[cfg(feature = "std")]
pub last_accessed: std::time::Instant,
pub memory_usage: usize,
pub operation_count: usize,
pub metadata: HashMap<String, String>,
}
impl EditorSession {
pub fn new(id: String, document: EditorDocument) -> Self {
Self {
id,
document,
#[cfg(feature = "std")]
last_accessed: std::time::Instant::now(),
memory_usage: 0,
operation_count: 0,
metadata: HashMap::new(),
}
}
#[cfg(feature = "std")]
pub fn touch(&mut self) {
self.last_accessed = std::time::Instant::now();
}
#[cfg(feature = "std")]
pub fn is_stale(&self, max_age: std::time::Duration) -> bool {
self.last_accessed.elapsed() > max_age
}
#[must_use]
pub fn get_metadata(&self, key: &str) -> Option<&str> {
self.metadata.get(key).map(|s| s.as_str())
}
pub fn set_metadata(&mut self, key: String, value: String) {
self.metadata.insert(key, value);
}
pub fn increment_operations(&mut self) {
self.operation_count += 1;
}
}