use std::sync::Arc;
use crate::cog::Cog;
use crate::config::{CogConfig, Config, GearboxAppConfig};
use crate::error::Error;
use crate::registry::CogRegistry;
pub struct Hub {
pub(crate) registry: CogRegistry,
pub(crate) config: Config,
}
impl Hub {
pub fn new(config: Config) -> Self {
Self {
registry: CogRegistry::new(),
config,
}
}
pub fn get_config<C: CogConfig + Clone>(&self) -> Result<C, Error> {
self.config.get::<C>()
}
pub fn app_config(&self) -> &GearboxAppConfig {
self.config.app()
}
#[doc(hidden)]
pub fn registry_get<C: Cog + 'static>(&self) -> Result<Arc<C>, Error> {
self.registry.get::<C>()
}
#[doc(hidden)]
pub fn config_get<C: CogConfig + Clone>(&self) -> Result<C, Error> {
self.config.get::<C>()
}
pub fn registry_put<C: Cog + 'static>(&self, cog: C) -> Result<(), Error> {
self.registry.put(cog)
}
}