Eliminate need for unwrap in deserialize_from_seq
This commit is contained in:
parent
65104aca9c
commit
13e7bee0e6
@ -616,17 +616,17 @@ fn deserialize_from_seq(
|
|||||||
self.dest.#field_name = #default;
|
self.dest.#field_name = #default;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
let handle_none = quote! {
|
let return_invalid_length = quote! {
|
||||||
if visit.is_none() {
|
return _serde::export::Err(_serde::de::Error::invalid_length(#index_in_seq, &#expecting));
|
||||||
return _serde::export::Err(_serde::de::Error::invalid_length(#index_in_seq, &#expecting));
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
let write = match field.attrs.deserialize_with() {
|
let write = match field.attrs.deserialize_with() {
|
||||||
None => {
|
None => {
|
||||||
quote! {
|
quote! {
|
||||||
let visit = try!(_serde::de::SeqAccess::next_element_seed(&mut __seq,
|
if let _serde::export::None = try!(_serde::de::SeqAccess::next_element_seed(&mut __seq,
|
||||||
_serde::private::de::DeserializeFromSeed(&mut self.dest.#field_name)));
|
_serde::private::de::DeserializeFromSeed(&mut self.dest.#field_name)))
|
||||||
#handle_none
|
{
|
||||||
|
#return_invalid_length
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Some(path) => {
|
Some(path) => {
|
||||||
@ -634,11 +634,14 @@ fn deserialize_from_seq(
|
|||||||
params, field.ty, path);
|
params, field.ty, path);
|
||||||
quote!({
|
quote!({
|
||||||
#wrapper
|
#wrapper
|
||||||
let visit = _serde::export::Option::map(
|
match try!(_serde::de::SeqAccess::next_element::<#wrapper_ty>(&mut __seq)) {
|
||||||
try!(_serde::de::SeqAccess::next_element::<#wrapper_ty>(&mut __seq)),
|
_serde::export::Some(__wrap) => {
|
||||||
|__wrap| __wrap.value);
|
self.dest.#field_name = __wrap.value;
|
||||||
#handle_none
|
}
|
||||||
self.dest.#field_name = visit.unwrap();
|
_serde::export::None => {
|
||||||
|
#return_invalid_length
|
||||||
|
}
|
||||||
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
Loading…
x
Reference in New Issue
Block a user