Mountain/ApplicationState/State/FeatureState/Documents/
DocumentState.rs1use std::{
34 collections::HashMap,
35 sync::{Arc, Mutex as StandardMutex},
36};
37
38use log::debug;
39
40use crate::ApplicationState::DTO::DocumentStateDTO::DocumentStateDTO;
41
42#[derive(Clone)]
44pub struct DocumentState {
45 pub OpenDocuments:Arc<StandardMutex<HashMap<String, DocumentStateDTO>>>,
47}
48
49impl Default for DocumentState {
50 fn default() -> Self {
51 debug!("[DocumentState] Initializing default document state...");
52
53 Self { OpenDocuments:Arc::new(StandardMutex::new(HashMap::new())) }
54 }
55}
56
57impl DocumentState {
58 pub fn GetAll(&self) -> HashMap<String, DocumentStateDTO> {
60 self.OpenDocuments.lock().ok().map(|guard| guard.clone()).unwrap_or_default()
61 }
62
63 pub fn Get(&self, uri:&str) -> Option<DocumentStateDTO> {
65 self.OpenDocuments.lock().ok().and_then(|guard| guard.get(uri).cloned())
66 }
67
68 pub fn AddOrUpdate(&self, uri:String, document:DocumentStateDTO) {
70 if let Ok(mut guard) = self.OpenDocuments.lock() {
71 guard.insert(uri, document);
72 debug!("[DocumentState] Document added/updated");
73 }
74 }
75
76 pub fn Remove(&self, uri:&str) {
78 if let Ok(mut guard) = self.OpenDocuments.lock() {
79 guard.remove(uri);
80 debug!("[DocumentState] Document removed: {}", uri);
81 }
82 }
83
84 pub fn Clear(&self) {
86 if let Ok(mut guard) = self.OpenDocuments.lock() {
87 guard.clear();
88 debug!("[DocumentState] All documents cleared");
89 }
90 }
91
92 pub fn Count(&self) -> usize { self.OpenDocuments.lock().ok().map(|guard| guard.len()).unwrap_or(0) }
94
95 pub fn Contains(&self, uri:&str) -> bool {
97 self.OpenDocuments
98 .lock()
99 .ok()
100 .map(|guard| guard.contains_key(uri))
101 .unwrap_or(false)
102 }
103
104 pub fn GetURIs(&self) -> Vec<String> {
106 self.OpenDocuments
107 .lock()
108 .ok()
109 .map(|guard| guard.keys().cloned().collect())
110 .unwrap_or_default()
111 }
112}