pub mod options {
#[derive(Eq, PartialEq, Debug, Clone)]
pub enum Usage {
Sort,
Search,
}
#[derive(Eq, PartialEq, Debug, Clone)]
pub enum Sensitivity {
Base,
Accent,
Case,
Variant,
}
#[derive(Eq, PartialEq, Debug, Clone)]
pub enum Punctuation {
Ignore,
Honor,
}
#[derive(Eq, PartialEq, Debug, Clone)]
pub enum Numeric {
Use,
Ignore,
}
#[derive(Eq, PartialEq, Debug, Clone)]
pub enum CaseFirst {
Upper,
Lower,
False,
}
}
#[derive(Eq, PartialEq, Debug, Clone)]
pub struct Options {
pub usage: options::Usage,
pub sensitivity: options::Sensitivity,
pub punctuation: options::Punctuation,
pub numeric: options::Numeric,
pub case_first: options::CaseFirst,
}
impl Default for Options {
fn default() -> Self {
Options {
usage: options::Usage::Sort,
sensitivity: options::Sensitivity::Variant,
punctuation: options::Punctuation::Honor,
numeric: options::Numeric::Ignore,
case_first: options::CaseFirst::False,
}
}
}
pub trait Collator {
type Error: std::error::Error;
fn try_new<L>(l: L, opts: Options) -> Result<Self, Self::Error>
where
L: crate::Locale,
Self: Sized;
fn compare<P, Q>(first: P, second: Q) -> i8
where
P: AsRef<str>,
Q: AsRef<str>;
}