Skip to content

Commit

Permalink
Meaningful spans when invoking deserializer trait methods
Browse files Browse the repository at this point in the history
  • Loading branch information
dtolnay committed Jan 11, 2018
1 parent 3d64df6 commit 6457331
Showing 1 changed file with 10 additions and 3 deletions.
13 changes: 10 additions & 3 deletions serde_derive/src/de.rs
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@

use syn::{self, Ident, Index, Member};
use syn::punctuated::Punctuated;
use syn::spanned::Spanned;
use quote::{ToTokens, Tokens};
use proc_macro2::{Literal, Span, Term};

Expand Down Expand Up @@ -538,7 +539,9 @@ fn deserialize_seq(
let visit = match field.attrs.deserialize_with() {
None => {
let field_ty = &field.ty;
quote!(try!(_serde::de::SeqAccess::next_element::<#field_ty>(&mut __seq)))
let span = Span::def_site().located_at(field.original.span());
let func = quote_spanned!(span=> _serde::de::SeqAccess::next_element::<#field_ty>);
quote!(try!(#func(&mut __seq)))
}
Some(path) => {
let (wrapper, wrapper_ty) = wrap_deserialize_field_with(params, field.ty, path);
Expand Down Expand Up @@ -1984,8 +1987,10 @@ fn deserialize_map(
let visit = match field.attrs.deserialize_with() {
None => {
let field_ty = &field.ty;
let span = Span::def_site().located_at(field.original.span());
let func = quote_spanned!(span=> _serde::de::MapAccess::next_value::<#field_ty>);
quote! {
try!(_serde::de::MapAccess::next_value::<#field_ty>(&mut __map))
try!(#func(&mut __map))
}
}
Some(path) => {
Expand Down Expand Up @@ -2382,8 +2387,10 @@ fn expr_is_missing(field: &Field, cattrs: &attr::Container) -> Fragment {
let name = field.attrs.name().deserialize_name();
match field.attrs.deserialize_with() {
None => {
let span = Span::def_site().located_at(field.original.span());
let func = quote_spanned!(span=> _serde::private::de::missing_field);
quote_expr! {
try!(_serde::private::de::missing_field(#name))
try!(#func(#name))
}
}
Some(_) => {
Expand Down

0 comments on commit 6457331

Please sign in to comment.