#[derive(Clone, Copy, Debug, PartialEq, Eq)]
pub enum TriviaAttachmentPolicy {
ContainmentLink,
TokenLink,
Both,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
pub enum RegionDetectionPolicy {
NameDriven,
ContentDriven,
Both,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
pub enum LanguageIdentificationDetector {
Lingua,
Whatlang,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
pub enum FormalizationLevel {
Natural,
Lexical,
Concept,
Logical,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
pub enum NaturalizationDirection {
Naturalize,
Formalize,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
pub struct ParseConfiguration {
trivia_attachment_policy: TriviaAttachmentPolicy,
region_detection_policy: RegionDetectionPolicy,
language_identification_detector: LanguageIdentificationDetector,
formalization_level: FormalizationLevel,
naturalization_direction: NaturalizationDirection,
}
impl ParseConfiguration {
#[must_use]
pub const fn new(trivia_attachment_policy: TriviaAttachmentPolicy) -> Self {
Self {
trivia_attachment_policy,
region_detection_policy: RegionDetectionPolicy::Both,
language_identification_detector: LanguageIdentificationDetector::Lingua,
formalization_level: FormalizationLevel::Natural,
naturalization_direction: NaturalizationDirection::Naturalize,
}
}
#[must_use]
pub const fn with_region_detection_policy(
mut self,
region_detection_policy: RegionDetectionPolicy,
) -> Self {
self.region_detection_policy = region_detection_policy;
self
}
#[must_use]
pub const fn with_language_identification_detector(
mut self,
detector: LanguageIdentificationDetector,
) -> Self {
self.language_identification_detector = detector;
self
}
#[must_use]
pub const fn with_formalization_level(
mut self,
formalization_level: FormalizationLevel,
) -> Self {
self.formalization_level = formalization_level;
self
}
#[must_use]
pub const fn with_naturalization_direction(
mut self,
naturalization_direction: NaturalizationDirection,
) -> Self {
self.naturalization_direction = naturalization_direction;
self
}
#[must_use]
pub const fn trivia_attachment_policy(self) -> TriviaAttachmentPolicy {
self.trivia_attachment_policy
}
#[must_use]
pub const fn region_detection_policy(self) -> RegionDetectionPolicy {
self.region_detection_policy
}
#[must_use]
pub const fn language_identification_detector(self) -> LanguageIdentificationDetector {
self.language_identification_detector
}
#[must_use]
pub const fn formalization_level(self) -> FormalizationLevel {
self.formalization_level
}
#[must_use]
pub const fn naturalization_direction(self) -> NaturalizationDirection {
self.naturalization_direction
}
}
impl Default for ParseConfiguration {
fn default() -> Self {
Self::new(TriviaAttachmentPolicy::Both)
}
}