maple_runtime/runtime_core/
registry.rs1use crate::config::RegistryConfig;
4use crate::runtime_core::{ContinuityProof, ContinuityRecord};
5use crate::types::*;
6use dashmap::DashMap;
7
8pub struct ResonatorRegistry {
10 resonators: DashMap<ResonatorId, ResonatorMetadata>,
12
13 #[allow(dead_code)]
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 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 pub async fn verify_continuity(
47 &self,
48 _proof: &ContinuityProof,
49 ) -> Result<ContinuityRecord, ResumeError> {
50 Err(ResumeError::InvalidContinuityProof)
57 }
58
59 pub async fn persist_all_continuity(&self) -> Result<(), String> {
61 tracing::info!(
63 "Persisting {} Resonator continuity records",
64 self.resonators.len()
65 );
66 Ok(())
67 }
68
69 pub fn get_metadata(&self, id: &ResonatorId) -> Option<ResonatorMetadata> {
71 self.resonators.get(id).map(|r| r.clone())
72 }
73
74 pub fn remove(&self, id: &ResonatorId) {
76 self.resonators.remove(id);
77 }
78
79 pub fn count(&self) -> usize {
81 self.resonators.len()
82 }
83}
84
85#[derive(Debug, Clone)]
87pub struct ResonatorMetadata {
88 pub id: ResonatorId,
89 pub name: Option<String>,
90 pub metadata: std::collections::HashMap<String, String>,
91 pub created_at: chrono::DateTime<chrono::Utc>,
92}