Skip to main content

normalized_path/
case_sensitivity.rs

1/// Controls whether path normalization is case-sensitive or case-insensitive.
2///
3/// This enum is the runtime-dynamic counterpart to the zero-sized marker types
4/// [`CaseSensitive`] and [`CaseInsensitive`]. It is used as the type parameter `S`
5/// in [`PathElement`](crate::PathElement) when the case sensitivity is not known
6/// at compile time.
7#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
8pub enum CaseSensitivity {
9    /// Names differing only in case are treated as distinct.
10    Sensitive,
11    /// Names differing only in case produce the same normalized name.
12    Insensitive,
13}
14
15/// Zero-sized type-level marker for case-sensitive normalization.
16///
17/// This is the type parameter `S` in [`PathElementCS`](crate::PathElementCS).
18/// Converts to [`CaseSensitivity::Sensitive`] via the [`From`] impl.
19#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
20pub struct CaseSensitive;
21
22/// Zero-sized type-level marker for case-insensitive normalization.
23///
24/// This is the type parameter `S` in [`PathElementCI`](crate::PathElementCI).
25/// Converts to [`CaseSensitivity::Insensitive`] via the [`From`] impl.
26#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
27pub struct CaseInsensitive;
28
29impl From<CaseSensitive> for CaseSensitivity {
30    fn from(_: CaseSensitive) -> Self {
31        CaseSensitivity::Sensitive
32    }
33}
34
35impl From<CaseInsensitive> for CaseSensitivity {
36    fn from(_: CaseInsensitive) -> Self {
37        CaseSensitivity::Insensitive
38    }
39}
40
41impl From<&CaseSensitive> for CaseSensitivity {
42    fn from(_: &CaseSensitive) -> Self {
43        CaseSensitivity::Sensitive
44    }
45}
46
47impl From<&CaseInsensitive> for CaseSensitivity {
48    fn from(_: &CaseInsensitive) -> Self {
49        CaseSensitivity::Insensitive
50    }
51}
52
53impl From<&CaseSensitivity> for CaseSensitivity {
54    fn from(s: &CaseSensitivity) -> Self {
55        *s
56    }
57}
58
59#[cfg(test)]
60mod tests {
61    #[cfg(all(target_arch = "wasm32", any(target_os = "unknown", target_os = "none")))]
62    use wasm_bindgen_test::wasm_bindgen_test as test;
63
64    use super::{CaseInsensitive, CaseSensitive, CaseSensitivity};
65
66    #[test]
67    fn from_case_sensitive() {
68        assert_eq!(
69            CaseSensitivity::from(CaseSensitive),
70            CaseSensitivity::Sensitive
71        );
72    }
73
74    #[test]
75    fn from_case_insensitive() {
76        assert_eq!(
77            CaseSensitivity::from(CaseInsensitive),
78            CaseSensitivity::Insensitive
79        );
80    }
81}