Skip to content

Commit 0c1b047

Browse files
committed
Support flattened enum with default attributes
1 parent 6ce6ad6 commit 0c1b047

File tree

1 file changed

+27
-2
lines changed

1 file changed

+27
-2
lines changed

serde_derive/src/de.rs

+27-2
Original file line numberDiff line numberDiff line change
@@ -2594,11 +2594,36 @@ fn deserialize_map(
25942594
}
25952595
Some(path) => quote!(#path),
25962596
};
2597+
2598+
let no_variant_expr = if field.attrs.default().is_none() && cattrs.default().is_none() {
2599+
let span = field.original.span();
2600+
quote_spanned!(span=>
2601+
return _serde::__private::Err(
2602+
_serde::de::Error::custom(_e)
2603+
);
2604+
)
2605+
} else {
2606+
let is_missing = Expr(expr_is_missing(field, cattrs));
2607+
quote!(#is_missing)
2608+
};
2609+
25972610
quote! {
2598-
let #name: #field_ty = #func(
2611+
let #name: #field_ty = match #func(
25992612
_serde::__private::de::FlatMapDeserializer(
26002613
&mut __collect,
2601-
_serde::__private::PhantomData))?;
2614+
_serde::__private::PhantomData)) {
2615+
_serde::__private::Ok(#name) => #name,
2616+
_serde::__private::Err(
2617+
_e @ _serde::__private::de::FlatMapDeserializerError::NoVariantFoundInFlattenedData(..)
2618+
) => {
2619+
#no_variant_expr
2620+
}
2621+
_serde::__private::Err(
2622+
_serde::__private::de::FlatMapDeserializerError::Inner(e)
2623+
) => {
2624+
return _serde::__private::Err(e);
2625+
}
2626+
};
26022627
}
26032628
});
26042629

0 commit comments

Comments
 (0)