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}