use svc_registry::Registry;
use svc_registry_adapter::DefaultRegistry;
use wasm_capability_contract::{CapabilityDescriptor, CapabilityRegistry};
use super::in_memory_named_capability_descriptor::InMemoryNamedCapabilityDescriptor;
pub struct InMemoryCapabilityRegistry {
entries: DefaultRegistry<InMemoryNamedCapabilityDescriptor>,
}
impl InMemoryCapabilityRegistry {
#[must_use]
pub fn new() -> Self {
Self {
entries: DefaultRegistry::default(),
}
}
#[must_use]
pub fn register(mut self, name: impl Into<String>, descriptor: CapabilityDescriptor) -> Self {
self.entries.register(InMemoryNamedCapabilityDescriptor {
key: name.into(),
descriptor,
});
self
}
}
impl Default for InMemoryCapabilityRegistry {
fn default() -> Self {
Self::new()
}
}
impl CapabilityRegistry for InMemoryCapabilityRegistry {
fn descriptor(&self, capability: &str) -> Option<&CapabilityDescriptor> {
self.entries.get(capability).map(|entry| &entry.descriptor)
}
}