pub struct MultiServiceRegistry<K: ServiceKey, T: ?Sized> { /* private fields */ }Expand description
Registry for keyed services - multiple providers with typed key-based lookup.
Generic mechanism in kernel, typed keys defined in drivers.
§Type Safety
Uses K: ServiceKey bound to ensure only proper service keys can be used.
The ServiceKey trait provides:
- Compile-time enforcement (arbitrary types rejected)
- Built-in service name for error messages
- Self-documenting API
§Example
ⓘ
use reovim_kernel::api::v1::{MultiServiceRegistry, ServiceKey};
// In driver: define typed key implementing ServiceKey
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub enum VfsScheme { File, Memory, Ssh }
impl ServiceKey for VfsScheme {
fn service_name() -> &'static str { "VFS" }
}
// In driver: define type alias with typed key
pub type VfsProviderRegistry = MultiServiceRegistry<VfsScheme, dyn VfsDriver>;
// Usage
let registry = VfsProviderRegistry::new();
registry.register(VfsScheme::File, Arc::new(local_fs_provider));
let provider = registry.get(&VfsScheme::File);Implementations§
Source§impl<K: ServiceKey, T: ?Sized + Send + Sync + 'static> MultiServiceRegistry<K, T>
impl<K: ServiceKey, T: ?Sized + Send + Sync + 'static> MultiServiceRegistry<K, T>
Sourcepub fn register(&self, key: K, provider: Arc<T>)
pub fn register(&self, key: K, provider: Arc<T>)
Register a provider for a typed key.
Replaces any existing provider for the same key.
§Arguments
key- The typed service keyprovider- The provider instance wrapped inArc
Sourcepub fn get(&self, key: &K) -> Option<Arc<T>>
pub fn get(&self, key: &K) -> Option<Arc<T>>
Get provider by typed key.
Returns None if no provider is registered for the key.
Trait Implementations§
Source§impl<K: ServiceKey + Debug, T: ?Sized + Send + Sync + 'static> Debug for MultiServiceRegistry<K, T>
impl<K: ServiceKey + Debug, T: ?Sized + Send + Sync + 'static> Debug for MultiServiceRegistry<K, T>
Source§impl<K: ServiceKey, T: ?Sized + Send + Sync + 'static> Default for MultiServiceRegistry<K, T>
impl<K: ServiceKey, T: ?Sized + Send + Sync + 'static> Default for MultiServiceRegistry<K, T>
impl<K: ServiceKey, T: ?Sized + Send + Sync + 'static> Service for MultiServiceRegistry<K, T>
Auto Trait Implementations§
impl<K, T> !Freeze for MultiServiceRegistry<K, T>
impl<K, T> !RefUnwindSafe for MultiServiceRegistry<K, T>
impl<K, T> Send for MultiServiceRegistry<K, T>
impl<K, T> Sync for MultiServiceRegistry<K, T>
impl<K, T> Unpin for MultiServiceRegistry<K, T>
impl<K, T> UnsafeUnpin for MultiServiceRegistry<K, T>where
T: ?Sized,
impl<K, T> UnwindSafe for MultiServiceRegistry<K, T>
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more