Skip to main content

maple_runtime/runtime_core/
registry.rs

1//! Resonator Registry - manages persistent Resonator identities
2
3use dashmap::DashMap;
4use std::sync::Arc;
5use crate::types::*;
6use crate::runtime_core::{ContinuityProof, ContinuityRecord};
7use crate::config::RegistryConfig;
8
9/// Registry of all Resonators with persistent identity
10pub struct ResonatorRegistry {
11    /// Active Resonators
12    resonators: DashMap<ResonatorId, ResonatorMetadata>,
13
14    /// Configuration
15    config: RegistryConfig,
16}
17
18impl ResonatorRegistry {
19    pub fn new(config: &RegistryConfig) -> Self {
20        Self {
21            resonators: DashMap::new(),
22            config: config.clone(),
23        }
24    }
25
26    /// Create a persistent identity for a new Resonator
27    pub async fn create_identity(
28        &self,
29        spec: &super::ResonatorIdentitySpec,
30    ) -> Result<ResonatorId, RegistrationError> {
31        let id = ResonatorId::new();
32
33        let metadata = ResonatorMetadata {
34            id,
35            name: spec.name.clone(),
36            metadata: spec.metadata.clone(),
37            created_at: chrono::Utc::now(),
38        };
39
40        self.resonators.insert(id, metadata);
41
42        Ok(id)
43    }
44
45    /// Verify continuity proof and retrieve record
46    pub async fn verify_continuity(
47        &self,
48        proof: &ContinuityProof,
49    ) -> Result<ContinuityRecord, ResumeError> {
50        // In a real implementation, this would:
51        // 1. Verify cryptographic signature
52        // 2. Check proof validity
53        // 3. Load continuity record from storage
54
55        // For now, placeholder
56        Err(ResumeError::InvalidContinuityProof)
57    }
58
59    /// Persist all continuity records
60    pub async fn persist_all_continuity(&self) -> Result<(), String> {
61        // Placeholder: In real implementation, would persist to durable storage
62        tracing::info!("Persisting {} Resonator continuity records", self.resonators.len());
63        Ok(())
64    }
65
66    /// Get Resonator metadata
67    pub fn get_metadata(&self, id: &ResonatorId) -> Option<ResonatorMetadata> {
68        self.resonators.get(id).map(|r| r.clone())
69    }
70
71    /// Remove Resonator (for cleanup)
72    pub fn remove(&self, id: &ResonatorId) {
73        self.resonators.remove(id);
74    }
75
76    /// Count of active Resonators
77    pub fn count(&self) -> usize {
78        self.resonators.len()
79    }
80}
81
82/// Metadata about a Resonator
83#[derive(Debug, Clone)]
84pub struct ResonatorMetadata {
85    pub id: ResonatorId,
86    pub name: Option<String>,
87    pub metadata: std::collections::HashMap<String, String>,
88    pub created_at: chrono::DateTime<chrono::Utc>,
89}