Sidney-sunny/moonspoof/src/security does not have a README file

    CharDiagnostic

    pub(all) struct CharDiagnostic {
    char : Char
    codepoint : Int
    codepoint_hex : String
    script :
    Script

    is_invisible : Bool
    is_bidi : Bool
    is_confusable : Bool
    confusable_target : String
    } derive(
    Debug
    )

    DiagnosticReport

    pub(all) struct DiagnosticReport {
    original : String
    skeleton : String
    script_analysis :
    ScriptAnalysis

    risk_level : SecurityRiskLevel
    char_diagnostics : Array[CharDiagnostic]
    rules_triggered : Array[String]
    } derive(
    Debug
    )

    IdentifierProfile

    pub(all) struct IdentifierProfile {
    allow_mixed_script : Bool
    allow_invisible : Bool
    max_length : Int
    } derive(Eq,
    Debug
    )

    IdentifierProfile::default

    IdentifierProfile::permissive

    IdentifierStatus

    pub(all) enum IdentifierStatus {
    Allowed
    Restricted
    } derive(Eq,
    Debug
    )

    IdentifierStatusError

    pub(all) enum IdentifierStatusError {
    Empty
    RestrictedCharacter(IdentifierStatusIssue)
    } derive(Eq,
    Debug
    )

    IdentifierStatusIssue

    pub(all) struct IdentifierStatusIssue {
    codepoint_index : Int
    codepoint : Int
    codepoint_hex : String
    } derive(Eq,
    Debug
    )

    MixedNumberIssue

    pub(all) struct MixedNumberIssue {
    codepoint_index : Int
    codepoint : Int
    codepoint_hex : String
    first_decimal_zero : Int
    decimal_zero : Int
    } derive(Eq,
    Debug
    )

    SecurityRiskLevel

    pub(all) enum SecurityRiskLevel {
    Safe
    Low
    Medium
    High
    Critical
    } derive(Eq,
    Debug
    )

    analyze_identifier

    fn analyze_identifier(input : String) -> DiagnosticReport

    get_decimal_systems

    fn get_decimal_systems(input : String) -> Array[Int]

    Sorted unique zero representatives of decimal systems in the raw input.

    get_decimal_zero

    fn get_decimal_zero(cp : Int) -> Int?

    get_identifier_status

    fn get_identifier_status(cp : Int) -> IdentifierStatus

    Exact Unicode property; this does not validate identifier grammar.

    has_bidi_controls

    fn has_bidi_controls(input : String) -> Bool

    has_bidi_override

    fn has_bidi_override(input : String) -> Bool

    has_invisible_characters

    fn has_invisible_characters(input : String) -> Bool

    has_mixed_numbers

    fn has_mixed_numbers(input : String) -> Bool

    is_allowed_identifier

    fn is_allowed_identifier(input : String, profile? : IdentifierProfile) -> Bool

    validate_identifier

    fn validate_identifier(input : String, profile? : IdentifierProfile) -> Result[Unit, String]

    validate_identifier_status

    fn validate_identifier_status(input : String) -> Result[Unit, IdentifierStatusError]

    Opt-in literal-codepoint filter; no normalization or canonical closure. Existing profile defaults are unaffected. Index counts Unicode scalars.

    validate_number_systems

    fn validate_number_systems(input : String) -> Result[Unit, MixedNumberIssue]

    Checks decimal mixing only; empty and non-decimal input do not fail.