typed-ident 0.0.1

Type-safe identifier validation, inspection, and mutation.
Documentation
// =============================================================================
// USES
// =============================================================================

// -----------------------------------------------------------------------------
use crate::helpers::{Boundary, Format, SegmentRule, TestIdent};

// =============================================================================
// DATA
// =============================================================================

// -----------------------------------------------------------------------------
pub static VALID: &[TestIdent] = &[
    TestIdent {
        name: "lower",
        format: Format::Lower,
        segments: &[SegmentRule::Chunk("lower")],
    },
    TestIdent {
        name: "UPPER",
        format: Format::Upper,
        segments: &[SegmentRule::Chunk("UPPER")],
    },
    TestIdent {
        name: "lowerCamel",
        format: Format::LowerCamel,
        segments: &[
            SegmentRule::Chunk("lower"),
            SegmentRule::Bound(Boundary::Camel),
            SegmentRule::Bound(Boundary::Hat),
            SegmentRule::Chunk("Camel"),
        ],
    },
    TestIdent {
        name: "UpperCamel",
        format: Format::UpperCamel,
        segments: &[
            SegmentRule::Chunk("Upper"),
            SegmentRule::Bound(Boundary::Camel),
            SegmentRule::Bound(Boundary::Hat),
            SegmentRule::Chunk("Camel"),
        ],
    },
    TestIdent {
        name: "lower_snake",
        format: Format::Lower,
        segments: &[
            SegmentRule::Chunk("lower"),
            SegmentRule::Delim('_'),
            SegmentRule::Chunk("snake"),
        ],
    },
    TestIdent {
        name: "lower-kebab",
        format: Format::Lower,
        segments: &[
            SegmentRule::Chunk("lower"),
            SegmentRule::Delim('-'),
            SegmentRule::Chunk("kebab"),
        ],
    },
    TestIdent {
        name: "--lower_hybrid",
        format: Format::Lower,
        segments: &[
            SegmentRule::Delim('-'),
            SegmentRule::Delim('-'),
            SegmentRule::Chunk("lower"),
            SegmentRule::Delim('_'),
            SegmentRule::Chunk("hybrid"),
        ],
    },
    TestIdent {
        name: "CaféPatron",
        format: Format::UpperCamel,
        segments: &[
            SegmentRule::Chunk("Café"),
            SegmentRule::Bound(Boundary::Camel),
            SegmentRule::Bound(Boundary::Hat),
            SegmentRule::Chunk("Patron"),
        ],
    },
    TestIdent {
        name: "StraßeValue",
        format: Format::UpperCamel,
        segments: &[
            SegmentRule::Chunk("Straße"),
            SegmentRule::Bound(Boundary::Camel),
            SegmentRule::Bound(Boundary::Hat),
            SegmentRule::Chunk("Value"),
        ],
    },
    TestIdent {
        name: "σValue",
        format: Format::LowerCamel,
        segments: &[
            SegmentRule::Chunk("σ"),
            SegmentRule::Bound(Boundary::Camel),
            SegmentRule::Bound(Boundary::Hat),
            SegmentRule::Chunk("Value"),
        ],
    },
    TestIdent {
        name: "BTreeSet",
        format: Format::UpperCamel,
        segments: &[
            SegmentRule::Chunk("B"),
            SegmentRule::Bound(Boundary::Hat),
            SegmentRule::Chunk("Tree"),
            SegmentRule::Bound(Boundary::Camel),
            SegmentRule::Bound(Boundary::Hat),
            SegmentRule::Chunk("Set"),
        ],
    },
    TestIdent {
        name: "I18nSupport",
        format: Format::UpperCamel,
        segments: &[
            SegmentRule::Chunk("I"),
            SegmentRule::Bound(Boundary::UpperToDigit),
            SegmentRule::Chunk("18"),
            SegmentRule::Bound(Boundary::DigitToLower),
            SegmentRule::Chunk("n"),
            SegmentRule::Bound(Boundary::Camel),
            SegmentRule::Bound(Boundary::Hat),
            SegmentRule::Chunk("Support"),
        ],
    },
    TestIdent {
        name: "IPv6Address",
        format: Format::UpperCamel,
        segments: &[
            SegmentRule::Chunk("I"),
            SegmentRule::Bound(Boundary::Hat),
            SegmentRule::Chunk("Pv"),
            SegmentRule::Bound(Boundary::LowerToDigit),
            SegmentRule::Chunk("6"),
            SegmentRule::Bound(Boundary::DigitToUpper),
            SegmentRule::Bound(Boundary::Hat),
            SegmentRule::Chunk("Address"),
        ],
    },
    TestIdent {
        name: "Ipv6Address",
        format: Format::UpperCamel,
        segments: &[
            SegmentRule::Chunk("Ipv"),
            SegmentRule::Bound(Boundary::LowerToDigit),
            SegmentRule::Chunk("6"),
            SegmentRule::Bound(Boundary::DigitToUpper),
            SegmentRule::Bound(Boundary::Hat),
            SegmentRule::Chunk("Address"),
        ],
    },
    TestIdent {
        name: "HTTP2Server",
        format: Format::UpperCamel,
        segments: &[
            SegmentRule::Chunk("HTTP"),
            SegmentRule::Bound(Boundary::UpperToDigit),
            SegmentRule::Chunk("2"),
            SegmentRule::Bound(Boundary::DigitToUpper),
            SegmentRule::Bound(Boundary::Hat),
            SegmentRule::Chunk("Server"),
        ],
    },
    TestIdent {
        name: "TLS1_3Config",
        format: Format::UpperCamel,
        segments: &[
            SegmentRule::Chunk("TLS"),
            SegmentRule::Bound(Boundary::UpperToDigit),
            SegmentRule::Chunk("1"),
            SegmentRule::Delim('_'),
            SegmentRule::Chunk("3"),
            SegmentRule::Bound(Boundary::DigitToUpper),
            SegmentRule::Bound(Boundary::Hat),
            SegmentRule::Chunk("Config"),
        ],
    },
    TestIdent {
        name: "a1B2C3D4E5F6G7H8",
        format: Format::LowerCamel,
        segments: &[
            SegmentRule::Chunk("a"),
            SegmentRule::Bound(Boundary::LowerToDigit),
            SegmentRule::Chunk("1"),
            SegmentRule::Bound(Boundary::DigitToUpper),
            SegmentRule::Chunk("B"),
            SegmentRule::Bound(Boundary::UpperToDigit),
            SegmentRule::Chunk("2"),
            SegmentRule::Bound(Boundary::DigitToUpper),
            SegmentRule::Chunk("C"),
            SegmentRule::Bound(Boundary::UpperToDigit),
            SegmentRule::Chunk("3"),
            SegmentRule::Bound(Boundary::DigitToUpper),
            SegmentRule::Chunk("D"),
            SegmentRule::Bound(Boundary::UpperToDigit),
            SegmentRule::Chunk("4"),
            SegmentRule::Bound(Boundary::DigitToUpper),
            SegmentRule::Chunk("E"),
            SegmentRule::Bound(Boundary::UpperToDigit),
            SegmentRule::Chunk("5"),
            SegmentRule::Bound(Boundary::DigitToUpper),
            SegmentRule::Chunk("F"),
            SegmentRule::Bound(Boundary::UpperToDigit),
            SegmentRule::Chunk("6"),
            SegmentRule::Bound(Boundary::DigitToUpper),
            SegmentRule::Chunk("G"),
            SegmentRule::Bound(Boundary::UpperToDigit),
            SegmentRule::Chunk("7"),
            SegmentRule::Bound(Boundary::DigitToUpper),
            SegmentRule::Chunk("H"),
            SegmentRule::Bound(Boundary::UpperToDigit),
            SegmentRule::Chunk("8"),
        ],
    },
    TestIdent {
        name: "_2x_maxWidth",
        format: Format::LowerCamel,
        segments: &[
            SegmentRule::Delim('_'),
            SegmentRule::Chunk("2"),
            SegmentRule::Bound(Boundary::DigitToLower),
            SegmentRule::Chunk("x"),
            SegmentRule::Delim('_'),
            SegmentRule::Chunk("max"),
            SegmentRule::Bound(Boundary::Camel),
            SegmentRule::Bound(Boundary::Hat),
            SegmentRule::Chunk("Width"),
        ],
    },
    TestIdent {
        name: "Transform3DModel",
        format: Format::UpperCamel,
        segments: &[
            SegmentRule::Chunk("Transform"),
            SegmentRule::Bound(Boundary::LowerToDigit),
            SegmentRule::Chunk("3"),
            SegmentRule::Bound(Boundary::DigitToUpper),
            SegmentRule::Chunk("D"),
            SegmentRule::Bound(Boundary::Hat),
            SegmentRule::Chunk("Model"),
        ],
    },
    TestIdent {
        name: "XML2v3_API_v2Handler",
        format: Format::Mixed,
        segments: &[
            SegmentRule::Chunk("XML"),
            SegmentRule::Bound(Boundary::UpperToDigit),
            SegmentRule::Chunk("2"),
            SegmentRule::Bound(Boundary::DigitToLower),
            SegmentRule::Chunk("v"),
            SegmentRule::Bound(Boundary::LowerToDigit),
            SegmentRule::Chunk("3"),
            SegmentRule::Delim('_'),
            SegmentRule::Chunk("API"),
            SegmentRule::Delim('_'),
            SegmentRule::Chunk("v"),
            SegmentRule::Bound(Boundary::LowerToDigit),
            SegmentRule::Chunk("2"),
            SegmentRule::Bound(Boundary::DigitToUpper),
            SegmentRule::Bound(Boundary::Hat),
            SegmentRule::Chunk("Handler"),
        ],
    },
    TestIdent {
        name: "WebGl2dContext",
        format: Format::UpperCamel,
        segments: &[
            SegmentRule::Chunk("Web"),
            SegmentRule::Bound(Boundary::Camel),
            SegmentRule::Bound(Boundary::Hat),
            SegmentRule::Chunk("Gl"),
            SegmentRule::Bound(Boundary::LowerToDigit),
            SegmentRule::Chunk("2"),
            SegmentRule::Bound(Boundary::DigitToLower),
            SegmentRule::Chunk("d"),
            SegmentRule::Bound(Boundary::Camel),
            SegmentRule::Bound(Boundary::Hat),
            SegmentRule::Chunk("Context"),
        ],
    },
    TestIdent {
        name: "iOS15SwiftUI2xCode13",
        format: Format::LowerCamel,
        segments: &[
            SegmentRule::Chunk("i"),
            SegmentRule::Bound(Boundary::Camel),
            SegmentRule::Chunk("OS"),
            SegmentRule::Bound(Boundary::UpperToDigit),
            SegmentRule::Chunk("15"),
            SegmentRule::Bound(Boundary::DigitToUpper),
            SegmentRule::Bound(Boundary::Hat),
            SegmentRule::Chunk("Swift"),
            SegmentRule::Bound(Boundary::Camel),
            SegmentRule::Chunk("UI"),
            SegmentRule::Bound(Boundary::UpperToDigit),
            SegmentRule::Chunk("2"),
            SegmentRule::Bound(Boundary::DigitToLower),
            SegmentRule::Chunk("x"),
            SegmentRule::Bound(Boundary::Camel),
            SegmentRule::Bound(Boundary::Hat),
            SegmentRule::Chunk("Code"),
            SegmentRule::Bound(Boundary::LowerToDigit),
            SegmentRule::Chunk("13"),
        ],
    },
    TestIdent {
        name: "α\u{0345}β",
        format: Format::Lower,
        segments: &[SegmentRule::Chunk("α\u{0345}β")],
    },
];

// -----------------------------------------------------------------------------
pub static INVALID: &[&str] = &[
    "", " ", "123", "&", "|", "(", ")", "<", ">", "!", "{", "}", "%", ".", "*", "+", "=", "[", "]",
    "^", "$", "#", "@", "`", "",
];