From 07c2924e7abc9641df6f6bc6181c912b70904972 Mon Sep 17 00:00:00 2001 From: Benedikt Peetz Date: Thu, 13 Jun 2024 06:40:48 +0200 Subject: feat(new): Ensure that file names are ASCII only This allows us to just query the last chapter instead of storing it. --- src/new/mod.rs | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) (limited to 'src/new/mod.rs') 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) + } +} -- cgit 1.4.1