setup!() { /* proc-macro */ }Expand description
Configure module paths for waddling-errors definitions.
This macro sets up path aliases that diag! uses to resolve component,
primary, and sequence definitions. This enables flexible project structure
where definitions can be placed in any module.
Must be called once at the crate root (lib.rs or main.rs).
§Syntax
ⓘ
waddling_errors::setup! {
components = crate::my_components,
primaries = crate::error_primaries,
sequences = crate::my_sequences,
}§What it Generates
ⓘ
pub(crate) mod __wd_paths {
pub use crate::my_components as components;
pub use crate::error_primaries as primaries;
pub use crate::my_sequences as sequences;
}§Why Use This
Without setup!, diag! expects definitions at fixed paths:
crate::components::*crate::primaries::*crate::sequences::*
With setup!, you can place definitions anywhere and diag! will find them.
§Example Project Structure
ⓘ
// src/lib.rs
waddling_errors::setup! {
components = crate::errors::components,
primaries = crate::errors::primaries,
sequences = crate::errors::sequences,
}
mod errors {
pub mod components { /* component! definitions */ }
pub mod primaries { /* primary! definitions */ }
pub mod sequences { /* sequence! definitions */ }
}
mod api {
// diag! here works - finds definitions via __wd_paths
diag! { E.Api.Auth.001: { ... } }
}§Partial Configuration
You can specify only some paths - others will use defaults:
ⓘ
waddling_errors::setup! {
sequences = crate::my_sequences,
// components defaults to crate::components
// primaries defaults to crate::primaries
}§No Collision Between Crates
Each crate has its own __wd_paths module (via crate::), so a library
using waddling-errors won’t collide with an application using it too.