pub struct DataImporter {
logger: Box<dyn Logging>,
}
impl DataImporter {
fn import(&self, origin_type: OriginType, data: String) -> Vec<ResultRow> {
match origin_type {
OriginType::SomeCase => {
let importer = ChildImporter::new(self.logger.into()); // not working
importer.import(origin_type, data)
}
OriginType::OtherCase => {
let importer = AnotherChildImporter::new(self.logger); // not working either
importer.import(origin_type, data)
}
}
}
}
pub struct ChildDataImporter {
logger: Box<dyn Logging>,
}
pub trait Logging: Send + Sync + std::fmt::Debug {
fn log(&self, level: LogLevel, message: String);
}
We may need to share the Box<dyn Logging>
reference. But I'm not sure how to do that.