#![cfg_attr(coverage_nightly, allow(unused_features))]
#![cfg_attr(coverage_nightly, feature(coverage_attribute))]
use std::sync::Arc;
use {
reovim_driver_codec::{ContentClassifierStore, ContentCodecFactoryStore},
reovim_kernel::api::v1::{Module, ModuleContext, ModuleError, ModuleId, ProbeResult, Version},
};
pub mod classifier;
pub mod codec;
pub mod factory;
pub use {classifier::CsvClassifier, codec::CsvCodec, factory::CsvCodecFactory};
pub struct CodecCsvModule;
impl CodecCsvModule {
#[must_use]
pub const fn new() -> Self {
Self
}
}
#[cfg_attr(coverage_nightly, coverage(off))]
impl Default for CodecCsvModule {
fn default() -> Self {
Self::new()
}
}
impl Module for CodecCsvModule {
fn id(&self) -> ModuleId {
ModuleId::new("codec-csv")
}
fn name(&self) -> &'static str {
"Codec CSV"
}
fn version(&self) -> Version {
Version::new(0, 1, 0)
}
#[cfg_attr(coverage_nightly, coverage(off))]
fn init(&mut self, ctx: &ModuleContext) -> ProbeResult {
let factory_store = ctx.services.get_or_create::<ContentCodecFactoryStore>();
factory_store.add_factory(Arc::new(CsvCodecFactory::new()));
let classifier_store = ctx.services.get_or_create::<ContentClassifierStore>();
classifier_store.add(Arc::new(CsvClassifier::new()));
tracing::info!("CodecCsvModule: registered CSV codec and classifier");
ProbeResult::Success
}
fn exit(&mut self) -> Result<(), ModuleError> {
tracing::info!("CodecCsvModule: exiting");
Ok(())
}
fn provides(&self) -> &[&'static str] {
&[reovim_capabilities::CODEC_PROVIDER]
}
}
#[cfg(feature = "dynamic")]
reovim_module_macros::declare_module!(CodecCsvModule);
#[cfg(test)]
#[path = "lib_tests.rs"]
mod tests;