Eliminate need for unwrap in deserialize_from_seq

This commit is contained in:
David Tolnay 2017-12-11 18:13:13 -08:00
parent 65104aca9c
commit 13e7bee0e6
No known key found for this signature in database
GPG Key ID: F9BA143B95FF6D82

View File

@ -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
}
}
}) })
} }
}; };