mirror of
https://github.com/pezkuwichain/serde.git
synced 2026-06-09 20:11:01 +00:00
Remove need for allow(unreachable_code)
This commit is contained in:
+19
-7
@@ -929,7 +929,6 @@ fn deserialize_from_struct(
|
|||||||
#visit_seq
|
#visit_seq
|
||||||
|
|
||||||
#[inline]
|
#[inline]
|
||||||
#[allow(unreachable_code)]
|
|
||||||
fn visit_map<__A>(self, mut __map: __A) -> _serde::export::Result<Self::Value, __A::Error>
|
fn visit_map<__A>(self, mut __map: __A) -> _serde::export::Result<Self::Value, __A::Error>
|
||||||
where __A: _serde::de::MapAccess<#delife>
|
where __A: _serde::de::MapAccess<#delife>
|
||||||
{
|
{
|
||||||
@@ -2193,12 +2192,25 @@ fn deserialize_from_map(
|
|||||||
.filter(|&&(field, _)| !field.attrs.skip_deserializing())
|
.filter(|&&(field, _)| !field.attrs.skip_deserializing())
|
||||||
.map(
|
.map(
|
||||||
|&(field, ref name)| {
|
|&(field, ref name)| {
|
||||||
let missing_expr = Expr(expr_is_missing(&field, cattrs));
|
let missing_expr = expr_is_missing(&field, cattrs);
|
||||||
let field_name = &field.ident;
|
// If missing_expr unconditionally returns an error, don't try
|
||||||
quote! {
|
// to assign its value to self.dest. Maybe this could be handled
|
||||||
if !#name {
|
// more elegantly.
|
||||||
self.dest.#field_name = #missing_expr;
|
if missing_expr.as_ref().as_str().starts_with("return ") {
|
||||||
};
|
let missing_expr = Stmts(missing_expr);
|
||||||
|
quote! {
|
||||||
|
if !#name {
|
||||||
|
#missing_expr;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
let field_name = &field.ident;
|
||||||
|
let missing_expr = Expr(missing_expr);
|
||||||
|
quote! {
|
||||||
|
if !#name {
|
||||||
|
self.dest.#field_name = #missing_expr;
|
||||||
|
};
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -73,3 +73,12 @@ impl ToTokens for Match {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl AsRef<Tokens> for Fragment {
|
||||||
|
fn as_ref(&self) -> &Tokens {
|
||||||
|
match *self {
|
||||||
|
Fragment::Expr(ref expr) => expr,
|
||||||
|
Fragment::Block(ref block) => block,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user