setup

Macro setup 

Source
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.