use std::any::{Any, TypeId};
use std::collections::HashMap;
pub(crate) struct ContextMap {
values: HashMap<TypeId, Box<dyn Any + Send + Sync>>,
}
impl ContextMap {
pub fn new() -> Self {
Self {
values: HashMap::new(),
}
}
pub fn get_by_type_id(&self, type_id: TypeId) -> Option<&(dyn Any + Send + Sync)> {
self.values.get(&type_id).map(|v| &**v)
}
pub fn insert(
&mut self,
type_id: TypeId,
value: Box<dyn Any + Send + Sync>,
) -> Option<Box<dyn Any + Send + Sync>> {
self.values.insert(type_id, value)
}
pub fn remove(&mut self, type_id: &TypeId) -> Option<Box<dyn Any + Send + Sync>> {
self.values.remove(type_id)
}
}
pub(crate) type SavedContext = Vec<(TypeId, Option<Box<dyn Any + Send + Sync>>)>;
pub(crate) type ProvidedContexts = Vec<(TypeId, Box<dyn Any + Send + Sync>)>;