ass_editor/sessions/
session.rs1use crate::core::EditorDocument;
8
9#[cfg(feature = "std")]
10use std::collections::HashMap;
11
12#[cfg(not(feature = "std"))]
13use alloc::collections::BTreeMap as HashMap;
14
15#[cfg(not(feature = "std"))]
16use alloc::string::String;
17
18#[derive(Debug)]
20pub struct EditorSession {
21 pub document: EditorDocument,
23
24 pub id: String,
26
27 #[cfg(feature = "std")]
29 pub last_accessed: std::time::Instant,
30
31 pub memory_usage: usize,
33
34 pub operation_count: usize,
36
37 pub metadata: HashMap<String, String>,
39}
40
41impl EditorSession {
42 pub fn new(id: String, document: EditorDocument) -> Self {
44 Self {
45 id,
46 document,
47 #[cfg(feature = "std")]
48 last_accessed: std::time::Instant::now(),
49 memory_usage: 0,
50 operation_count: 0,
51 metadata: HashMap::new(),
52 }
53 }
54
55 #[cfg(feature = "std")]
57 pub fn touch(&mut self) {
58 self.last_accessed = std::time::Instant::now();
59 }
60
61 #[cfg(feature = "std")]
63 pub fn is_stale(&self, max_age: std::time::Duration) -> bool {
64 self.last_accessed.elapsed() > max_age
65 }
66
67 #[must_use]
69 pub fn get_metadata(&self, key: &str) -> Option<&str> {
70 self.metadata.get(key).map(|s| s.as_str())
71 }
72
73 pub fn set_metadata(&mut self, key: String, value: String) {
75 self.metadata.insert(key, value);
76 }
77
78 pub fn increment_operations(&mut self) {
80 self.operation_count += 1;
81 }
82}