Skip to content

Commit 2bad167

Browse files
committed
Support flattened enum with default field attributes
1 parent dce846a commit 2bad167

File tree

1 file changed

+29
-4
lines changed

1 file changed

+29
-4
lines changed

serde_derive/src/de.rs

+29-4
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() {
2599+
let span = field.original.span();
2600+
quote_spanned!(span=>
2601+
return _serde::__private::Err(
2602+
_serde::de::Error::custom(_e.to_string())
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(
2599-
_serde::__private::de::FlatMapDeserializer(
2600-
&mut __collect,
2601-
_serde::__private::PhantomData))?;
2611+
let #name: #field_ty = match #func(
2612+
_serde::__private::de::FlatMapDeserializer(&mut __collect)) {
2613+
_serde::__private::Ok(#name) => #name,
2614+
_serde::__private::Err(
2615+
_e @ _serde::__private::de::FlatMapDeserializerError::NoVariantFoundInFlattenedData(..)
2616+
) => {
2617+
#no_variant_expr
2618+
}
2619+
_serde::__private::Err(
2620+
_serde::__private::de::FlatMapDeserializerError::Message(s)
2621+
) => {
2622+
return _serde::__private::Err(
2623+
_serde::de::Error::custom(s)
2624+
);
2625+
}
2626+
};
26022627
}
26032628
});
26042629

0 commit comments

Comments
 (0)