ib_unicode/case/
mod.rs

1#[cfg(feature = "perf-case-map")]
2mod map;
3
4pub trait CharToMonoLowercase {
5    /// The only multi-char lowercase mapping is 'İ' -> "i\u{307}", we just ignore the '\u{307}'.
6    fn to_mono_lowercase(self) -> char;
7}
8
9impl CharToMonoLowercase for char {
10    fn to_mono_lowercase(self) -> char {
11        #[cfg(not(feature = "perf-case-map"))]
12        return self.to_lowercase().next().unwrap();
13
14        // Optimize away the binary search
15        // Reduce total match time by ~37%
16        #[cfg(feature = "perf-case-map")]
17        map::to_mono_lowercase(self)
18    }
19}
20
21pub trait StrToMonoLowercase {
22    fn to_mono_lowercase(&self) -> String;
23}
24
25impl StrToMonoLowercase for str {
26    fn to_mono_lowercase(&self) -> String {
27        self.chars().map(|c| c.to_mono_lowercase()).collect()
28    }
29}