use crate::metadata::registry::VariableRegistry;
use crate::metadata::scope::ScopeTracker;
use crate::metadata::thread::ThreadRegistry;
use std::sync::Arc;
pub struct MetadataEngine {
pub variable_registry: Arc<VariableRegistry>,
pub scope_tracker: Arc<ScopeTracker>,
pub thread_registry: Arc<ThreadRegistry>,
}
impl MetadataEngine {
pub fn new() -> Self {
Self {
variable_registry: Arc::new(VariableRegistry::new()),
scope_tracker: Arc::new(ScopeTracker::new()),
thread_registry: Arc::new(ThreadRegistry::new()),
}
}
pub fn variables(&self) -> &Arc<VariableRegistry> {
&self.variable_registry
}
pub fn scopes(&self) -> &Arc<ScopeTracker> {
&self.scope_tracker
}
pub fn threads(&self) -> &Arc<ThreadRegistry> {
&self.thread_registry
}
}
impl Default for MetadataEngine {
fn default() -> Self {
Self::new()
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_metadata_engine_creation() {
let engine = MetadataEngine::new();
assert!(Arc::strong_count(&engine.variable_registry) >= 1);
assert!(Arc::strong_count(&engine.scope_tracker) >= 1);
assert!(Arc::strong_count(&engine.thread_registry) >= 1);
}
#[test]
fn test_metadata_engine_default() {
let engine = MetadataEngine::default();
assert!(Arc::strong_count(&engine.variable_registry) >= 1);
}
}