diff --git a/crates/stef-derive/src/cause.rs b/crates/stef-derive/src/cause.rs index 24a746a..c2bc4aa 100644 --- a/crates/stef-derive/src/cause.rs +++ b/crates/stef-derive/src/cause.rs @@ -166,8 +166,10 @@ fn expand_error(ident: &Ident, variants: &[VariantInfo<'_>]) -> syn::Result]) -> syn::Result>(); @@ -428,42 +428,42 @@ fn expand_miette( } fn expand_winnow(ident: &Ident, variants: &[VariantInfo<'_>]) -> syn::Result { - let externals = variants.iter().filter_map(|v| { - (matches!(v.attr, VariantAttributes::External)).then(|| { - let variant_ident = &v.variant.ident; - - match v.fields.len() { - 1 => { - let ty = &v.fields[0].0.ty; - - Ok(quote! { - impl winnow::error::FromExternalError for #ident { - fn from_external_error(_: &I, _: winnow::error::ErrorKind, e: #ty) -> Self { - Self::#variant_ident(e) - } + let externals = variants.iter() + .filter(|v| matches!(v.attr, VariantAttributes::External)) + .map(|v| { + let variant_ident = &v.variant.ident; + + match v.fields.len() { + 1 => { + let ty = &v.fields[0].0.ty; + + Ok(quote! { + impl winnow::error::FromExternalError for #ident { + fn from_external_error(_: &I, _: winnow::error::ErrorKind, e: #ty) -> Self { + Self::#variant_ident(e) } - }) - } - 2 => { - let ty = &v.fields[1].0.ty; - - Ok(quote! { - impl winnow::error::FromExternalError for #ident - where - I: winnow::stream::Location, - { - fn from_external_error(input: &I, _: winnow::error::ErrorKind, e: #ty) -> Self { - Self::#variant_ident { - at: input.location(), - cause: e, - } + } + }) + } + 2 => { + let ty = &v.fields[1].0.ty; + + Ok(quote! { + impl winnow::error::FromExternalError for #ident + where + I: winnow::stream::Location, + { + fn from_external_error(input: &I, _: winnow::error::ErrorKind, e: #ty) -> Self { + Self::#variant_ident { + at: input.location(), + cause: e, } } - }) - } - _ => bail!(v.variant, "external variants must have 1 or 2 fields only"), + } + }) } - }) + _ => bail!(v.variant, "external variants must have 1 or 2 fields only"), + } }).collect::>>()?; Ok(quote! {