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",
},
}
}
pub use Component::*;
}
pub mod primaries {
use waddling_errors_macros::primary;
primary! {
pub enum Primary {
Token {
docs: "Token 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",
},
EXPIRED(17) {
description: "Expired resource",
typical_severity: "Error",
},
}
}
mod test_sequence_value_1 {
use super::*;
diag! {
strict(sequence_values),
E.Auth.Token.MISSING: {
message: "Validates that MISSING is a u16",
hints: ["Type checking ensures it's a valid sequence constant"],
},
}
}
mod test_sequence_value_2 {
use super::*;
diag! {
strict(sequence_values),
E.Auth.Token.EXPIRED: {
message: "Validates that EXPIRED is a u16",
hints: ["The numeric value (17) is enforced by sequence! macro"],
},
}
}
mod test_combined_validation {
use super::*;
diag! {
strict(sequence, sequence_values),
E.Auth.Token.INVALID: {
message: "Validates both existence and type",
hints: ["Ensures INVALID exists AND is a u16"],
},
}
}
mod test_all_validations {
use super::*;
diag! {
strict(sequence, primary, component, naming, duplicates, sequence_values, string_values),
E.Auth.Token.MISSING: {
message: "Maximum validation: everything checked",
hints: ["All validation modes enabled"],
},
}
}
fn main() {
println!("✅ Sequence value validation passed!");
println!("All sequences are valid u16 constants.");
}