#error #syn #optional #proc #proc-macro #macro

optional-error

一个简单的crate,可以更轻松地与syn::Error的Option类型一起工作。

2个版本

0.1.1 2023年3月13日
0.1.0 2023年3月13日

#2197 in 过程宏

Download history 79/week @ 2024-04-01 14/week @ 2024-04-08 17/week @ 2024-04-15 19/week @ 2024-04-22 18/week @ 2024-04-29 19/week @ 2024-05-06 24/week @ 2024-05-13 33/week @ 2024-05-20 36/week @ 2024-05-27 37/week @ 2024-06-03 44/week @ 2024-06-10 37/week @ 2024-06-17 23/week @ 2024-06-24 5/week @ 2024-07-08 21/week @ 2024-07-15

每月下载量:53
3个crate中使用(通过bevy_proto_derive

MIT/Apache

9KB
65

optional-error

crates.io docs.rs

此crate提供了一种更简单的方式来创建和管理一个Option<syn::Error>

fn parse(input: DeriveInput) -> Result<TokenStream, syn::Error> {
    // 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()?;

    // ...
}

依赖项

~1.5MB
~35K SLoC