use std::ops::Deref;
use serde::{Deserialize, Serialize};
use sticker_encoders::deprel::POSLayer;
use sticker_encoders::layer::Layer;
use sticker_encoders::lemma::BackoffStrategy;
#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
#[serde(deny_unknown_fields)]
pub struct EncodersConfig(pub Vec<NamedEncoderConfig>);
impl Deref for EncodersConfig {
type Target = [NamedEncoderConfig];
fn deref(&self) -> &Self::Target {
&self.0
}
}
#[serde(rename_all = "lowercase")]
#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
pub enum EncoderType {
Dependency {
encoder: DependencyEncoder,
root_relation: String,
},
Lemma(BackoffStrategy),
Sequence(Layer),
TdzLemma(BackoffStrategy),
}
#[serde(rename_all = "lowercase")]
#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
pub enum DependencyEncoder {
RelativePosition,
RelativePOS(POSLayer),
}
#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
#[serde(deny_unknown_fields)]
pub struct NamedEncoderConfig {
pub encoder: EncoderType,
pub name: String,
}