Skip to main content

mnem_ner_providers/
config.rs

1//! NER provider configuration and `open()` factory.
2
3use serde::{Deserialize, Serialize};
4
5use crate::error::NerError;
6use crate::null::NullNer;
7use crate::provider::NerProvider;
8use crate::rule::RuleNer;
9
10/// NER provider selection.
11///
12/// Serialised under the `[ner]` section of `config.toml`:
13/// ```toml
14/// [ner]
15/// provider = "rule"   # default
16/// # or
17/// provider = "none"   # disables NER entirely
18/// ```
19#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
20#[serde(tag = "provider", rename_all = "lowercase")]
21pub enum NerConfig {
22    /// Capitalized-phrase heuristic. Zero dependencies. Default.
23    #[default]
24    Rule,
25    /// Suppress all entity extraction. No entity nodes are emitted.
26    None,
27}
28
29/// Open a boxed [`NerProvider`] from a [`NerConfig`].
30///
31/// # Errors
32///
33/// Returns [`NerError`] if the config requests an unavailable provider
34/// (e.g. a compiled-out ONNX feature). Neither `Rule` nor `None`
35/// can fail.
36pub fn open(cfg: &NerConfig) -> Result<Box<dyn NerProvider>, NerError> {
37    match cfg {
38        NerConfig::Rule => Ok(Box::new(RuleNer)),
39        NerConfig::None => Ok(Box::new(NullNer)),
40    }
41}