use std::sync::Arc;
use serde::Serialize;
use crate::fragment_corpus::FragmentCorpus;
#[non_exhaustive]
#[derive(Debug, Clone, Copy, PartialEq, Eq, Default, Serialize)]
pub enum ScoringProfile {
#[default]
GeneralOrganic,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Default, Serialize)]
pub enum Strictness {
Lenient,
#[default]
Standard,
Strict,
}
#[non_exhaustive]
#[derive(Debug, Clone, Default, PartialEq)]
pub struct FragmentModelConfig {
pub corpus: Option<Arc<FragmentCorpus>>,
}
impl Serialize for FragmentModelConfig {
fn serialize<S: serde::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
use serde::ser::SerializeStruct;
let mut state = serializer.serialize_struct("FragmentModelConfig", 1)?;
state.serialize_field(
"corpus_version",
&self.corpus.as_deref().map(FragmentCorpus::version),
)?;
state.end()
}
}
#[non_exhaustive]
#[derive(Debug, Clone, PartialEq, Serialize)]
pub struct AnalysisConfig {
pub profile: ScoringProfile,
pub strictness: Strictness,
pub max_heavy_atoms: usize,
pub fragment_model: FragmentModelConfig,
}
impl Default for AnalysisConfig {
fn default() -> Self {
Self {
profile: ScoringProfile::default(),
strictness: Strictness::default(),
max_heavy_atoms: 150,
fragment_model: FragmentModelConfig::default(),
}
}
}