#![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::Utf8Classifier, codec::Utf8Codec, factory::Utf8CodecFactory};
pub struct CodecUtf8Module;
impl CodecUtf8Module {
#[must_use]
pub const fn new() -> Self {
Self
}
}
#[cfg_attr(coverage_nightly, coverage(off))]
impl Default for CodecUtf8Module {
fn default() -> Self {
Self::new()
}
}
impl Module for CodecUtf8Module {
fn id(&self) -> ModuleId {
ModuleId::new("codec-utf8")
}
fn name(&self) -> &'static str {
"Codec UTF-8"
}
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(Utf8CodecFactory::new()));
let classifier_store = ctx.services.get_or_create::<ContentClassifierStore>();
classifier_store.add(Arc::new(Utf8Classifier::new()));
tracing::info!("CodecUtf8Module: registered UTF-8 codec and classifier");
ProbeResult::Success
}
fn exit(&mut self) -> Result<(), ModuleError> {
tracing::info!("CodecUtf8Module: exiting");
Ok(())
}
fn provides(&self) -> &[&'static str] {
&[reovim_capabilities::CODEC_PROVIDER]
}
}
#[cfg(feature = "dynamic")]
reovim_module_macros::declare_module!(CodecUtf8Module);
#[cfg(test)]
#[path = "lib_tests.rs"]
mod tests;