Skip to content

Commit 6457331

Browse files
committed
Meaningful spans when invoking deserializer trait methods
1 parent 3d64df6 commit 6457331

File tree

1 file changed

+10
-3
lines changed

1 file changed

+10
-3
lines changed

serde_derive/src/de.rs

+10-3
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88

99
use syn::{self, Ident, Index, Member};
1010
use syn::punctuated::Punctuated;
11+
use syn::spanned::Spanned;
1112
use quote::{ToTokens, Tokens};
1213
use proc_macro2::{Literal, Span, Term};
1314

@@ -538,7 +539,9 @@ fn deserialize_seq(
538539
let visit = match field.attrs.deserialize_with() {
539540
None => {
540541
let field_ty = &field.ty;
541-
quote!(try!(_serde::de::SeqAccess::next_element::<#field_ty>(&mut __seq)))
542+
let span = Span::def_site().located_at(field.original.span());
543+
let func = quote_spanned!(span=> _serde::de::SeqAccess::next_element::<#field_ty>);
544+
quote!(try!(#func(&mut __seq)))
542545
}
543546
Some(path) => {
544547
let (wrapper, wrapper_ty) = wrap_deserialize_field_with(params, field.ty, path);
@@ -1984,8 +1987,10 @@ fn deserialize_map(
19841987
let visit = match field.attrs.deserialize_with() {
19851988
None => {
19861989
let field_ty = &field.ty;
1990+
let span = Span::def_site().located_at(field.original.span());
1991+
let func = quote_spanned!(span=> _serde::de::MapAccess::next_value::<#field_ty>);
19871992
quote! {
1988-
try!(_serde::de::MapAccess::next_value::<#field_ty>(&mut __map))
1993+
try!(#func(&mut __map))
19891994
}
19901995
}
19911996
Some(path) => {
@@ -2382,8 +2387,10 @@ fn expr_is_missing(field: &Field, cattrs: &attr::Container) -> Fragment {
23822387
let name = field.attrs.name().deserialize_name();
23832388
match field.attrs.deserialize_with() {
23842389
None => {
2390+
let span = Span::def_site().located_at(field.original.span());
2391+
let func = quote_spanned!(span=> _serde::private::de::missing_field);
23852392
quote_expr! {
2386-
try!(_serde::private::de::missing_field(#name))
2393+
try!(#func(#name))
23872394
}
23882395
}
23892396
Some(_) => {

0 commit comments

Comments
 (0)