use waddling_errors_macros::{component, diag, primary, sequence, setup};
setup! {
components = crate::components,
primaries = crate::primaries,
sequences = crate::sequences,
}
pub mod components {
use waddling_errors_macros::component;
component! {
pub enum Component {
Auth {
docs: "Authentication component",
},
Database {
docs: "Database component",
},
}
}
pub use Component::*;
}
pub mod primaries {
use waddling_errors_macros::primary;
primary! {
pub enum Primary {
Token {
docs: "Token errors",
},
Connection {
docs: "Connection errors",
},
}
}
}
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",
},
}
}
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"],
},
}
}
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"],
},
}
}
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.");
}