define_errors

Macro define_errors 

Source
macro_rules! define_errors {
    (
        $(#[$enum_meta:meta])*
        $vis:vis enum $name:ident {
            $(
                #[error($msg:literal $(, level = $level:ident)? $(, target = $target:literal)? $(, source)?)]
                $variant:ident $({
                    $(
                        $(#[$field_meta:meta])*
                        $field_name:ident: $field_type:ty
                    ),* $(,)?
                })?,
            )*
        }
    ) => { ... };
    (
        $first_name:ident {
            $($first_tokens:tt)*
        }
        $($rest_name:ident {
            $($rest_tokens:tt)*
        })+
    ) => { ... };
    (
        $name:ident {
            $($tokens:tt)*
        }
    ) => { ... };
    (@collect
        name: $name:ident,
        variants: [$($variants:tt)*],
        tokens: [
            $variant:ident { $($field_name:ident : $field_type:ty),* $(,)? } : $msg:literal $([$($attr:tt)*])? 
            $(, $($rest:tt)*)?
        ]
    ) => { ... };
    (@collect
        name: $name:ident,
        variants: [$($variants:tt)*],
        tokens: []
    ) => { ... };
    (@build $name:ident; $(($variant:ident, $msg:literal, (), $([$($attr:tt)*])?))*) => { ... };
    (@build $name:ident; $(($variant:ident, $msg:literal, ($($field_name:ident : $field_type:ty),+), $([$($attr:tt)*])?))*) => { ... };
    (@build $name:ident; $(($variant:ident, $msg:literal, ($($field_name:ident : $field_type:ty),*), $([$($attr:tt)*])?))*) => { ... };
    (@separate_mixed $name:ident;
        unit_variants: [$($unit_processed:tt)*];
        struct_variants: [$($struct_processed:tt)*];
        remaining: [($variant:ident, $msg:literal, (), $([$($attr:tt)*])?) $($rest:tt)*]
    ) => { ... };
    (@separate_mixed $name:ident;
        unit_variants: [$($unit_processed:tt)*];
        struct_variants: [$($struct_processed:tt)*];
        remaining: [($variant:ident, $msg:literal, ($($field_name:ident : $field_type:ty),+), $([$($attr:tt)*])?) $($rest:tt)*]
    ) => { ... };
    (@separate_mixed $name:ident;
        unit_variants: [$(($unit_variant:ident, $unit_msg:literal, $([$($unit_attr:tt)*])?))*];
        struct_variants: [$(($struct_variant:ident, $struct_msg:literal, ($($struct_field_name:ident : $struct_field_type:ty),+), $([$($struct_attr:tt)*])?))*];
        remaining: []
    ) => { ... };
    (@log_simple [$($attr:tt)*] ; $code:expr, $message:expr) => { ... };
    (@log_simple ; $code:expr, $message:expr) => { ... };
    (@log_with_attrs level = error, target = $target:literal ; $code:expr, $message:expr) => { ... };
    (@log_with_attrs level = warn, target = $target:literal ; $code:expr, $message:expr) => { ... };
    (@log_with_attrs level = info, target = $target:literal ; $code:expr, $message:expr) => { ... };
    (@log_with_attrs level = debug, target = $target:literal ; $code:expr, $message:expr) => { ... };
    (@log_with_attrs level = trace, target = $target:literal ; $code:expr, $message:expr) => { ... };
    (@log_with_attrs level = error ; $code:expr, $message:expr) => { ... };
    (@log_with_attrs level = warn ; $code:expr, $message:expr) => { ... };
    (@log_with_attrs level = info ; $code:expr, $message:expr) => { ... };
    (@log_with_attrs level = debug ; $code:expr, $message:expr) => { ... };
    (@log_with_attrs level = trace ; $code:expr, $message:expr) => { ... };
    (@log_with_attrs target = $target:literal ; $code:expr, $message:expr) => { ... };
    (@log_with_attrs ; $code:expr, $message:expr) => { ... };
    (@log_thiserror $level:ident $target:literal ; $code:expr, $message:expr) => { ... };
    (@log_thiserror $level:ident ; $code:expr, $message:expr) => { ... };
    (@log_thiserror $target:literal ; $code:expr, $message:expr) => { ... };
    (@log_thiserror ; $code:expr, $message:expr) => { ... };
    (@extract_thiserror_info $level:ident $target:literal ; $code:expr) => { ... };
    (@extract_thiserror_info $level:ident ; $code:expr) => { ... };
    (@extract_thiserror_info $target:literal ; $code:expr) => { ... };
    (@extract_thiserror_info ; $code:expr) => { ... };
    (@extract_info [level = $level:ident, target = $target:literal] ; $code:expr) => { ... };
    (@extract_info [target = $target:literal, level = $level:ident] ; $code:expr) => { ... };
    (@extract_info [level = $level:ident] ; $code:expr) => { ... };
    (@extract_info [target = $target:literal] ; $code:expr) => { ... };
    (@extract_info ; $code:expr) => { ... };
}
Expand description

Enhanced define_errors! macro with structured tracing integration.

Supports both thiserror-style and simplified LogFusion-style syntax. See examples in the cookbook folder and comprehensive tests for usage patterns.