use crate::strings::ToDebugString;
#[cfg(feature = "test_build")]
#[derive(Clone, Copy, Debug, Eq, Hash, PartialEq)]
pub enum CharType {
AsciiLower,
AsciiUpper,
AsciiNumeric,
AsciiNonAlphanumericGraphic,
NonAsciiGraphic,
NonGraphic,
}
#[cfg(not(feature = "test_build"))]
#[derive(Clone, Copy, Debug, Eq, Hash, PartialEq)]
enum CharType {
AsciiLower,
AsciiUpper,
AsciiNumeric,
AsciiNonAlphanumericGraphic,
NonAsciiGraphic,
NonGraphic,
}
fn debug_starts_with_slash(c: char) -> bool {
c.to_debug_string().chars().nth(1) == Some('\\')
}
pub fn char_is_graphic(c: char) -> bool {
if c.is_ascii() {
!c.is_ascii_control()
} else {
!debug_starts_with_slash(c)
}
}
impl CharType {
pub_crate_test! {contains(self, c: char) -> bool {
match self {
CharType::AsciiLower => c.is_ascii_lowercase(),
CharType::AsciiUpper => c.is_ascii_uppercase(),
CharType::AsciiNumeric => c.is_ascii_digit(),
CharType::AsciiNonAlphanumericGraphic => {
c.is_ascii() && !c.is_ascii_alphanumeric() && !c.is_ascii_control()
}
CharType::NonAsciiGraphic => !c.is_ascii() && !debug_starts_with_slash(c),
CharType::NonGraphic => {
c.is_ascii_control() || !c.is_ascii() && debug_starts_with_slash(c)
}
}
}}
}
pub mod constants;
pub mod crement;
pub mod exhaustive;
pub mod random;