memscope_rs/metadata/
engine.rs1use crate::metadata::registry::VariableRegistry;
8use crate::metadata::scope::ScopeTracker;
9use crate::metadata::thread::ThreadRegistry;
10use std::sync::Arc;
11
12pub struct MetadataEngine {
23 pub variable_registry: Arc<VariableRegistry>,
25 pub scope_tracker: Arc<ScopeTracker>,
27 pub thread_registry: Arc<ThreadRegistry>,
29}
30
31impl MetadataEngine {
32 pub fn new() -> Self {
34 Self {
35 variable_registry: Arc::new(VariableRegistry::new()),
36 scope_tracker: Arc::new(ScopeTracker::new()),
37 thread_registry: Arc::new(ThreadRegistry::new()),
38 }
39 }
40
41 pub fn variables(&self) -> &Arc<VariableRegistry> {
43 &self.variable_registry
44 }
45
46 pub fn scopes(&self) -> &Arc<ScopeTracker> {
48 &self.scope_tracker
49 }
50
51 pub fn threads(&self) -> &Arc<ThreadRegistry> {
53 &self.thread_registry
54 }
55}
56
57impl Default for MetadataEngine {
58 fn default() -> Self {
59 Self::new()
60 }
61}
62
63#[cfg(test)]
64mod tests {
65 use super::*;
66
67 #[test]
68 fn test_metadata_engine_creation() {
69 let engine = MetadataEngine::new();
70 assert!(Arc::strong_count(&engine.variable_registry) >= 1);
71 assert!(Arc::strong_count(&engine.scope_tracker) >= 1);
72 assert!(Arc::strong_count(&engine.thread_registry) >= 1);
73 }
74
75 #[test]
76 fn test_metadata_engine_default() {
77 let engine = MetadataEngine::default();
78 assert!(Arc::strong_count(&engine.variable_registry) >= 1);
79 }
80}