waddling-errors-macros 0.7.3

Procedural macros for structured error codes with compile-time validation and taxonomy enforcement
Documentation
//! Test: String value validation passes with valid string constants and enum variants
//!
//! This test verifies that diag! with strict(string_values) validation
//! accepts primaries that are &str constants and components that are enum variants.

use waddling_errors_macros::{component, diag, primary, sequence, setup};

setup! {
    components = crate::components,
    primaries = crate::primaries,
    sequences = crate::sequences,
}

// Define valid components
pub mod components {
    use waddling_errors_macros::component;

    component! {
        pub enum Component {
            Auth {
                docs: "Authentication component",
            },
            Database {
                docs: "Database component",
            },
        }
    }

    pub use Component::*;
}

// Define valid primaries
pub mod primaries {
    use waddling_errors_macros::primary;

    primary! {
        pub enum Primary {
            Token {
                docs: "Token errors",
            },
            Connection {
                docs: "Connection errors",
            },
        }
    }
}

// Define valid sequences
pub mod sequences {
    use waddling_errors_macros::sequence;

    sequence! {
        MISSING(1) {
            description: "Missing parameter",
            typical_severity: "Error",
        },
        INVALID(3) {
            description: "Invalid parameter",
            typical_severity: "Error",
        },
    }
}

// Test string value validation
mod test_string_value_1 {
    use super::*;

    diag! {
        strict(string_values),

        E.Auth.Token.MISSING: {
            message: "Validates that Token is a &str constant",
            hints: ["Type checking ensures primary is a valid string constant"],
        },
    }
}

mod test_string_value_2 {
    use super::*;

    diag! {
        strict(string_values),

        E.Database.Connection.INVALID: {
            message: "Validates that Database component exists as enum variant",
            hints: ["Type checking ensures component is a valid enum variant"],
        },
    }
}

// Test combined with other validations
mod test_combined_validation {
    use super::*;

    diag! {
        strict(primary, component, string_values),

        E.Auth.Token.INVALID: {
            message: "Validates both existence and types",
            hints: ["Ensures Token exists as &str AND Auth exists as enum variant"],
        },
    }
}

// Test all validations together
mod test_all_validations {
    use super::*;

    diag! {
        strict(sequence, primary, component, naming, duplicates, sequence_values, string_values),

        E.Database.Connection.MISSING: {
            message: "Maximum validation: everything checked",
            hints: [
                "Validates naming conventions",
                "Checks for duplicates",
                "Verifies existence of all components",
                "Type-checks sequence values (u16)",
                "Type-checks string values (&str and enum)",
            ],
        },
    }
}

fn main() {
    println!("✅ String value validation passed!");
    println!("All primaries are valid &str constants.");
    println!("All components are valid enum variants.");
}