diff options
Diffstat (limited to 'src/new/mod.rs')
-rw-r--r-- | src/new/mod.rs | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/src/new/mod.rs b/src/new/mod.rs index a85187c..8d8193c 100644 --- a/src/new/mod.rs +++ b/src/new/mod.rs @@ -1,2 +1,37 @@ +use std::fmt::Display; + +use convert_case::{Case, Casing}; +use deunicode::deunicode; + pub mod chapter; pub mod section; + +#[derive(PartialEq, Eq, PartialOrd, Ord)] +pub struct MangledName(String); + +impl MangledName { + pub fn new(name: &str) -> Self { + let ascii_name = deunicode(&name); + Self(ascii_name.to_case(Case::Snake)) + } + + pub fn from_str_unsafe(name: &str) -> Self { + Self(name.to_owned()) + } + + pub fn check_mangled(name: &str) -> bool { + let mangled = Self::new(name); + let normal = Self::from_str_unsafe(name); + + mangled == normal + } + + pub fn as_str(&self) -> &str { + &self.0 + } +} +impl Display for MangledName { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + f.write_str(&self.0) + } +} |