mirror of
https://github.com/serde-rs/serde.git
synced 2025-09-28 05:21:05 +00:00
Meaningful spans when invoking deserializer trait methods
This commit is contained in:
parent
3d64df6e87
commit
64573319f9
@ -8,6 +8,7 @@
|
|||||||
|
|
||||||
use syn::{self, Ident, Index, Member};
|
use syn::{self, Ident, Index, Member};
|
||||||
use syn::punctuated::Punctuated;
|
use syn::punctuated::Punctuated;
|
||||||
|
use syn::spanned::Spanned;
|
||||||
use quote::{ToTokens, Tokens};
|
use quote::{ToTokens, Tokens};
|
||||||
use proc_macro2::{Literal, Span, Term};
|
use proc_macro2::{Literal, Span, Term};
|
||||||
|
|
||||||
@ -538,7 +539,9 @@ fn deserialize_seq(
|
|||||||
let visit = match field.attrs.deserialize_with() {
|
let visit = match field.attrs.deserialize_with() {
|
||||||
None => {
|
None => {
|
||||||
let field_ty = &field.ty;
|
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) => {
|
Some(path) => {
|
||||||
let (wrapper, wrapper_ty) = wrap_deserialize_field_with(params, field.ty, path);
|
let (wrapper, wrapper_ty) = wrap_deserialize_field_with(params, field.ty, path);
|
||||||
@ -1984,8 +1987,10 @@ fn deserialize_map(
|
|||||||
let visit = match field.attrs.deserialize_with() {
|
let visit = match field.attrs.deserialize_with() {
|
||||||
None => {
|
None => {
|
||||||
let field_ty = &field.ty;
|
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! {
|
quote! {
|
||||||
try!(_serde::de::MapAccess::next_value::<#field_ty>(&mut __map))
|
try!(#func(&mut __map))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Some(path) => {
|
Some(path) => {
|
||||||
@ -2382,8 +2387,10 @@ fn expr_is_missing(field: &Field, cattrs: &attr::Container) -> Fragment {
|
|||||||
let name = field.attrs.name().deserialize_name();
|
let name = field.attrs.name().deserialize_name();
|
||||||
match field.attrs.deserialize_with() {
|
match field.attrs.deserialize_with() {
|
||||||
None => {
|
None => {
|
||||||
|
let span = Span::def_site().located_at(field.original.span());
|
||||||
|
let func = quote_spanned!(span=> _serde::private::de::missing_field);
|
||||||
quote_expr! {
|
quote_expr! {
|
||||||
try!(_serde::private::de::missing_field(#name))
|
try!(#func(#name))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Some(_) => {
|
Some(_) => {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user