use crate::config::RegistryConfig;
use crate::runtime_core::{ContinuityProof, ContinuityRecord};
use crate::types::*;
use dashmap::DashMap;
pub struct ResonatorRegistry {
resonators: DashMap<ResonatorId, ResonatorMetadata>,
#[allow(dead_code)]
config: RegistryConfig,
}
impl ResonatorRegistry {
pub fn new(config: &RegistryConfig) -> Self {
Self {
resonators: DashMap::new(),
config: config.clone(),
}
}
pub async fn create_identity(
&self,
spec: &super::ResonatorIdentitySpec,
) -> Result<ResonatorId, RegistrationError> {
let id = ResonatorId::new();
let metadata = ResonatorMetadata {
id,
name: spec.name.clone(),
metadata: spec.metadata.clone(),
created_at: chrono::Utc::now(),
};
self.resonators.insert(id, metadata);
Ok(id)
}
pub async fn verify_continuity(
&self,
_proof: &ContinuityProof,
) -> Result<ContinuityRecord, ResumeError> {
Err(ResumeError::InvalidContinuityProof)
}
pub async fn persist_all_continuity(&self) -> Result<(), String> {
tracing::info!(
"Persisting {} Resonator continuity records",
self.resonators.len()
);
Ok(())
}
pub fn get_metadata(&self, id: &ResonatorId) -> Option<ResonatorMetadata> {
self.resonators.get(id).map(|r| r.clone())
}
pub fn remove(&self, id: &ResonatorId) {
self.resonators.remove(id);
}
pub fn count(&self) -> usize {
self.resonators.len()
}
}
#[derive(Debug, Clone)]
pub struct ResonatorMetadata {
pub id: ResonatorId,
pub name: Option<String>,
pub metadata: std::collections::HashMap<String, String>,
pub created_at: chrono::DateTime<chrono::Utc>,
}