optional-error

crates.io docs.rs

This crate provides a simpler way to create and manage an Option<syn::Error>.

```rust fn parse(input: DeriveInput) -> Result { // Create an optional error to contain zero or more errors let mut errors = OptionalError::default();

if !matches!(input.vis, Visibility::Public(_)) {
    // Combine with a new error (or initialize if empty)
    errors.combine(syn::Error::new(Span::call_site(), "input must be marked `pub`"));
}

match input.data {
    syn::Data::Struct(_) | syn::Data::Enum(_) => { /* ... */ }
    syn::Data::Union(_) => {
        // Combine some more!
        errors.combine(syn::Error::new(Span::call_site(), "unions not supported"));
    }
}

// Easy early return with all errors (if any)
errors.try_throw()?;

// ...

} ```