use super::{DebugLogger, DefaultLogManager, ILogManager, ILogger};
use crate::builder::IModule;
use crate::service_location::{
IMutableDependencyResolver, IReadonlyDependencyResolver, MutableDependencyResolverExt,
};
use std::rc::Rc;
#[derive(Default)]
pub struct SplatLoggerModule;
impl SplatLoggerModule {
pub fn new() -> Self {
Self
}
}
impl IModule for SplatLoggerModule {
fn configure(&self, resolver: &dyn IMutableDependencyResolver) {
if resolver.has_registration::<dyn ILogger>() {
return;
}
let debug_logger: Rc<dyn ILogger> = Rc::new(DebugLogger::new());
resolver.register::<dyn ILogger>(move || Some(debug_logger.clone()));
}
}
pub struct SplatLogManagerModule {
current: Rc<dyn IReadonlyDependencyResolver>,
}
impl SplatLogManagerModule {
pub fn new(current: Rc<dyn IReadonlyDependencyResolver>) -> Self {
Self { current }
}
}
impl IModule for SplatLogManagerModule {
fn configure(&self, resolver: &dyn IMutableDependencyResolver) {
if resolver.has_registration::<dyn ILogManager>() {
return;
}
let current = self.current.clone();
resolver.register::<dyn ILogManager>(move || {
Some(Rc::new(DefaultLogManager::new(current.clone())) as Rc<dyn ILogManager>)
});
}
}