Preserve span information for fields.
This commit is contained in:
parent
c86cdb29b3
commit
f6b6c94675
@ -1,4 +1,5 @@
|
|||||||
use quote::{ToTokens, Tokens};
|
use quote::{ToTokens, Tokens};
|
||||||
|
use syn::spanned::Spanned;
|
||||||
use syn::{Field, Meta, NestedMeta};
|
use syn::{Field, Meta, NestedMeta};
|
||||||
|
|
||||||
use api::strip_serde_attrs;
|
use api::strip_serde_attrs;
|
||||||
@ -54,8 +55,9 @@ impl Request {
|
|||||||
|
|
||||||
for field in self.fields.iter().flat_map(|f| f.field_(request_field_kind)) {
|
for field in self.fields.iter().flat_map(|f| f.field_(request_field_kind)) {
|
||||||
let field_name = field.ident.expect("expected field to have an identifier");
|
let field_name = field.ident.expect("expected field to have an identifier");
|
||||||
|
let span = field.span();
|
||||||
|
|
||||||
tokens.append_all(quote! {
|
tokens.append_all(quote_spanned! {span=>
|
||||||
#field_name: request.#field_name,
|
#field_name: request.#field_name,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -146,7 +148,12 @@ impl ToTokens for Request {
|
|||||||
tokens.append_all("{".into_tokens());
|
tokens.append_all("{".into_tokens());
|
||||||
|
|
||||||
for request_field in self.fields.iter() {
|
for request_field in self.fields.iter() {
|
||||||
strip_serde_attrs(request_field.field()).to_tokens(&mut tokens);
|
let field = request_field.field();
|
||||||
|
let span = field.span();
|
||||||
|
|
||||||
|
strip_serde_attrs(field).to_tokens(&mut tokens);
|
||||||
|
|
||||||
|
tokens.append_all(quote_spanned!(span=> #field));
|
||||||
|
|
||||||
tokens.append_all(",".into_tokens());
|
tokens.append_all(",".into_tokens());
|
||||||
}
|
}
|
||||||
@ -156,9 +163,10 @@ impl ToTokens for Request {
|
|||||||
|
|
||||||
if let Some(newtype_body_field) = self.newtype_body_field() {
|
if let Some(newtype_body_field) = self.newtype_body_field() {
|
||||||
let mut field = newtype_body_field.clone();
|
let mut field = newtype_body_field.clone();
|
||||||
let ty = field.ty;
|
let ty = &field.ty;
|
||||||
|
let span = field.span();
|
||||||
|
|
||||||
tokens.append_all(quote! {
|
tokens.append_all(quote_spanned! {span=>
|
||||||
/// Data in the request body.
|
/// Data in the request body.
|
||||||
#[derive(Debug, Serialize)]
|
#[derive(Debug, Serialize)]
|
||||||
struct RequestBody(#ty);
|
struct RequestBody(#ty);
|
||||||
@ -175,7 +183,8 @@ impl ToTokens for Request {
|
|||||||
for request_field in self.fields.iter() {
|
for request_field in self.fields.iter() {
|
||||||
match *request_field {
|
match *request_field {
|
||||||
RequestField::Body(ref field) => {
|
RequestField::Body(ref field) => {
|
||||||
field.to_tokens(&mut tokens);
|
let span = field.span();
|
||||||
|
tokens.append_all(quote_spanned!(span=> #field));
|
||||||
|
|
||||||
tokens.append_all(",".into_tokens());
|
tokens.append_all(",".into_tokens());
|
||||||
}
|
}
|
||||||
@ -198,7 +207,9 @@ impl ToTokens for Request {
|
|||||||
for request_field in self.fields.iter() {
|
for request_field in self.fields.iter() {
|
||||||
match *request_field {
|
match *request_field {
|
||||||
RequestField::Path(ref field) => {
|
RequestField::Path(ref field) => {
|
||||||
field.to_tokens(&mut tokens);
|
let span = field.span();
|
||||||
|
|
||||||
|
tokens.append_all(quote_spanned!(span=> #field));
|
||||||
|
|
||||||
tokens.append_all(",".into_tokens());
|
tokens.append_all(",".into_tokens());
|
||||||
}
|
}
|
||||||
@ -221,7 +232,9 @@ impl ToTokens for Request {
|
|||||||
for request_field in self.fields.iter() {
|
for request_field in self.fields.iter() {
|
||||||
match *request_field {
|
match *request_field {
|
||||||
RequestField::Query(ref field) => {
|
RequestField::Query(ref field) => {
|
||||||
field.to_tokens(&mut tokens);
|
let span = field.span();
|
||||||
|
|
||||||
|
tokens.append_all(quote_spanned!(span=> #field));
|
||||||
|
|
||||||
tokens.append_all(",".into_tokens());
|
tokens.append_all(",".into_tokens());
|
||||||
}
|
}
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
use quote::{ToTokens, Tokens};
|
use quote::{ToTokens, Tokens};
|
||||||
|
use syn::spanned::Spanned;
|
||||||
use syn::{Field, Meta, NestedMeta};
|
use syn::{Field, Meta, NestedMeta};
|
||||||
|
|
||||||
use api::strip_serde_attrs;
|
use api::strip_serde_attrs;
|
||||||
@ -27,24 +28,27 @@ impl Response {
|
|||||||
match *response_field {
|
match *response_field {
|
||||||
ResponseField::Body(ref field) => {
|
ResponseField::Body(ref field) => {
|
||||||
let field_name = field.ident.expect("expected field to have an identifier");
|
let field_name = field.ident.expect("expected field to have an identifier");
|
||||||
|
let span = field.span();
|
||||||
|
|
||||||
tokens.append_all(quote! {
|
tokens.append_all(quote_spanned! {span=>
|
||||||
#field_name: response_body.#field_name,
|
#field_name: response_body.#field_name,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
ResponseField::Header(ref field) => {
|
ResponseField::Header(ref field) => {
|
||||||
let field_name = field.ident.expect("expected field to have an identifier");
|
let field_name = field.ident.expect("expected field to have an identifier");
|
||||||
let field_type = &field.ty;
|
let field_type = &field.ty;
|
||||||
|
let span = field.span();
|
||||||
|
|
||||||
tokens.append_all(quote! {
|
tokens.append_all(quote_spanned! {span=>
|
||||||
#field_name: headers.remove::<#field_type>()
|
#field_name: headers.remove::<#field_type>()
|
||||||
.expect("missing expected request header"),
|
.expect("missing expected request header"),
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
ResponseField::NewtypeBody(ref field) => {
|
ResponseField::NewtypeBody(ref field) => {
|
||||||
let field_name = field.ident.expect("expected field to have an identifier");
|
let field_name = field.ident.expect("expected field to have an identifier");
|
||||||
|
let span = field.span();
|
||||||
|
|
||||||
tokens.append_all(quote! {
|
tokens.append_all(quote_spanned! {span=>
|
||||||
#field_name: response_body,
|
#field_name: response_body,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -140,7 +144,7 @@ impl From<Vec<Field>> for Response {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl ToTokens for Response {
|
impl ToTokens for Response {
|
||||||
fn to_tokens(&self, mut tokens: &mut Tokens) {
|
fn to_tokens(&self, tokens: &mut Tokens) {
|
||||||
tokens.append_all(quote! {
|
tokens.append_all(quote! {
|
||||||
/// Data in the response from this API endpoint.
|
/// Data in the response from this API endpoint.
|
||||||
#[derive(Debug)]
|
#[derive(Debug)]
|
||||||
@ -153,7 +157,12 @@ impl ToTokens for Response {
|
|||||||
tokens.append_all("{".into_tokens());
|
tokens.append_all("{".into_tokens());
|
||||||
|
|
||||||
for response_field in self.fields.iter() {
|
for response_field in self.fields.iter() {
|
||||||
strip_serde_attrs(response_field.field()).to_tokens(&mut tokens);
|
let field = response_field.field();
|
||||||
|
let span = field.span();
|
||||||
|
|
||||||
|
strip_serde_attrs(field);
|
||||||
|
|
||||||
|
tokens.append_all(quote_spanned!(span=> #field));
|
||||||
|
|
||||||
tokens.append_all(",".into_tokens());
|
tokens.append_all(",".into_tokens());
|
||||||
}
|
}
|
||||||
@ -163,9 +172,10 @@ impl ToTokens for Response {
|
|||||||
|
|
||||||
if let Some(newtype_body_field) = self.newtype_body_field() {
|
if let Some(newtype_body_field) = self.newtype_body_field() {
|
||||||
let mut field = newtype_body_field.clone();
|
let mut field = newtype_body_field.clone();
|
||||||
let ty = field.ty;
|
let ty = &field.ty;
|
||||||
|
let span = field.span();
|
||||||
|
|
||||||
tokens.append_all(quote! {
|
tokens.append_all(quote_spanned! {span=>
|
||||||
/// Data in the response body.
|
/// Data in the response body.
|
||||||
#[derive(Debug, Deserialize)]
|
#[derive(Debug, Deserialize)]
|
||||||
struct ResponseBody(#ty);
|
struct ResponseBody(#ty);
|
||||||
@ -182,7 +192,9 @@ impl ToTokens for Response {
|
|||||||
for response_field in self.fields.iter() {
|
for response_field in self.fields.iter() {
|
||||||
match *response_field {
|
match *response_field {
|
||||||
ResponseField::Body(ref field) => {
|
ResponseField::Body(ref field) => {
|
||||||
field.to_tokens(&mut tokens);
|
let span = field.span();
|
||||||
|
|
||||||
|
tokens.append_all(quote_spanned!(span=> #field));
|
||||||
|
|
||||||
tokens.append_all(",".into_tokens());
|
tokens.append_all(",".into_tokens());
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user