maple_runtime/runtime_core/
registry.rs1use dashmap::DashMap;
4use std::sync::Arc;
5use crate::types::*;
6use crate::runtime_core::{ContinuityProof, ContinuityRecord};
7use crate::config::RegistryConfig;
8
9pub struct ResonatorRegistry {
11 resonators: DashMap<ResonatorId, ResonatorMetadata>,
13
14 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!("Persisting {} Resonator continuity records", self.resonators.len());
63 Ok(())
64 }
65
66 pub fn get_metadata(&self, id: &ResonatorId) -> Option<ResonatorMetadata> {
68 self.resonators.get(id).map(|r| r.clone())
69 }
70
71 pub fn remove(&self, id: &ResonatorId) {
73 self.resonators.remove(id);
74 }
75
76 pub fn count(&self) -> usize {
78 self.resonators.len()
79 }
80}
81
82#[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}