use darling::{
ast::{Data, Fields},
util::SpannedValue,
FromDeriveInput, FromField, FromVariant,
};
#[derive(FromDeriveInput)]
#[darling(supports(enum_named, enum_unit))]
pub(super) struct ErrorInfoOpts {
pub ident: syn::Ident,
pub generics: syn::Generics,
pub data: Data<VariantReceiver, FieldReceiver>,
}
#[derive(FromField, Clone)]
pub(super) struct FieldReceiver {
pub ident: Option<syn::Ident>,
pub vis: syn::Visibility,
pub ty: syn::Type,
}
macro_field_utils::field_info!(FieldReceiver);
#[derive(FromVariant, Clone)]
#[darling(attributes(error))]
pub(super) struct VariantReceiver {
pub ident: syn::Ident,
pub discriminant: Option<syn::Expr>,
pub fields: Fields<FieldReceiver>,
pub status: syn::Expr,
pub message: SpannedValue<String>,
}
macro_field_utils::variant_info!(VariantReceiver, FieldReceiver);