Slightly simplify ruma_api! expansion code
This commit is contained in:
parent
69ee18e0a9
commit
2b9742b99e
@ -194,14 +194,10 @@ impl ToTokens for Request {
|
|||||||
let request_struct_body = if self.fields.is_empty() {
|
let request_struct_body = if self.fields.is_empty() {
|
||||||
quote!(;)
|
quote!(;)
|
||||||
} else {
|
} else {
|
||||||
let fields = self.fields.iter().map(|request_field| {
|
let fields = self
|
||||||
let field = request_field.field();
|
.fields
|
||||||
let span = field.span();
|
.iter()
|
||||||
|
.map(|request_field| strip_serde_attrs(request_field.field()));
|
||||||
let stripped_field = strip_serde_attrs(field);
|
|
||||||
|
|
||||||
quote_spanned!(span=> #stripped_field)
|
|
||||||
});
|
|
||||||
|
|
||||||
quote! {
|
quote! {
|
||||||
{
|
{
|
||||||
@ -221,16 +217,7 @@ impl ToTokens for Request {
|
|||||||
struct RequestBody(#ty);
|
struct RequestBody(#ty);
|
||||||
}
|
}
|
||||||
} else if self.has_body_fields() {
|
} else if self.has_body_fields() {
|
||||||
let fields = self
|
let fields = self.fields.iter().filter_map(RequestField::as_body_field);
|
||||||
.fields
|
|
||||||
.iter()
|
|
||||||
.filter_map(|request_field| match *request_field {
|
|
||||||
RequestField::Body(ref field) => {
|
|
||||||
let span = field.span();
|
|
||||||
Some(quote_spanned!(span=> #field))
|
|
||||||
}
|
|
||||||
_ => None,
|
|
||||||
});
|
|
||||||
|
|
||||||
quote! {
|
quote! {
|
||||||
/// Data in the request body.
|
/// Data in the request body.
|
||||||
@ -244,17 +231,7 @@ impl ToTokens for Request {
|
|||||||
};
|
};
|
||||||
|
|
||||||
let request_path_struct = if self.has_path_fields() {
|
let request_path_struct = if self.has_path_fields() {
|
||||||
let fields = self
|
let fields = self.fields.iter().filter_map(RequestField::as_path_field);
|
||||||
.fields
|
|
||||||
.iter()
|
|
||||||
.filter_map(|request_field| match *request_field {
|
|
||||||
RequestField::Path(ref field) => {
|
|
||||||
let span = field.span();
|
|
||||||
|
|
||||||
Some(quote_spanned!(span=> #field))
|
|
||||||
}
|
|
||||||
_ => None,
|
|
||||||
});
|
|
||||||
|
|
||||||
quote! {
|
quote! {
|
||||||
/// Data in the request path.
|
/// Data in the request path.
|
||||||
@ -272,16 +249,7 @@ impl ToTokens for Request {
|
|||||||
};
|
};
|
||||||
|
|
||||||
let request_query_struct = if self.has_query_fields() {
|
let request_query_struct = if self.has_query_fields() {
|
||||||
let fields = self
|
let fields = self.fields.iter().filter_map(RequestField::as_query_field);
|
||||||
.fields
|
|
||||||
.iter()
|
|
||||||
.filter_map(|request_field| match *request_field {
|
|
||||||
RequestField::Query(ref field) => {
|
|
||||||
let span = field.span();
|
|
||||||
Some(quote_spanned!(span=> #field))
|
|
||||||
}
|
|
||||||
_ => None,
|
|
||||||
});
|
|
||||||
|
|
||||||
quote! {
|
quote! {
|
||||||
/// Data in the request's query string.
|
/// Data in the request's query string.
|
||||||
@ -374,6 +342,33 @@ impl RequestField {
|
|||||||
self.kind() == RequestFieldKind::Query
|
self.kind() == RequestFieldKind::Query
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Return the contained field if this response field is a body kind.
|
||||||
|
fn as_body_field(&self) -> Option<&Field> {
|
||||||
|
if let RequestField::Body(field) = self {
|
||||||
|
Some(field)
|
||||||
|
} else {
|
||||||
|
None
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Return the contained field if this response field is a path kind.
|
||||||
|
fn as_path_field(&self) -> Option<&Field> {
|
||||||
|
if let RequestField::Path(field) = self {
|
||||||
|
Some(field)
|
||||||
|
} else {
|
||||||
|
None
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Return the contained field if this response field is a query kind.
|
||||||
|
fn as_query_field(&self) -> Option<&Field> {
|
||||||
|
if let RequestField::Query(field) = self {
|
||||||
|
Some(field)
|
||||||
|
} else {
|
||||||
|
None
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// Gets the inner `Field` value.
|
/// Gets the inner `Field` value.
|
||||||
fn field(&self) -> &Field {
|
fn field(&self) -> &Field {
|
||||||
match *self {
|
match *self {
|
||||||
|
@ -172,14 +172,10 @@ impl ToTokens for Response {
|
|||||||
let response_struct_body = if self.fields.is_empty() {
|
let response_struct_body = if self.fields.is_empty() {
|
||||||
quote!(;)
|
quote!(;)
|
||||||
} else {
|
} else {
|
||||||
let fields = self.fields.iter().map(|response_field| {
|
let fields = self
|
||||||
let field = response_field.field();
|
.fields
|
||||||
let span = field.span();
|
.iter()
|
||||||
|
.map(|response_field| strip_serde_attrs(response_field.field()));
|
||||||
let stripped_field = strip_serde_attrs(field);
|
|
||||||
|
|
||||||
quote_spanned!(span=> #stripped_field)
|
|
||||||
});
|
|
||||||
|
|
||||||
quote! {
|
quote! {
|
||||||
{
|
{
|
||||||
@ -199,16 +195,7 @@ impl ToTokens for Response {
|
|||||||
struct ResponseBody(#ty);
|
struct ResponseBody(#ty);
|
||||||
}
|
}
|
||||||
} else if self.has_body_fields() {
|
} else if self.has_body_fields() {
|
||||||
let fields = self
|
let fields = self.fields.iter().filter_map(ResponseField::as_body_field);
|
||||||
.fields
|
|
||||||
.iter()
|
|
||||||
.filter_map(|response_field| match *response_field {
|
|
||||||
ResponseField::Body(ref field) => {
|
|
||||||
let span = field.span();
|
|
||||||
Some(quote_spanned!(span=> #field))
|
|
||||||
}
|
|
||||||
_ => None,
|
|
||||||
});
|
|
||||||
|
|
||||||
quote! {
|
quote! {
|
||||||
/// Data in the response body.
|
/// Data in the response body.
|
||||||
@ -253,10 +240,7 @@ impl ResponseField {
|
|||||||
|
|
||||||
/// Whether or not this response field is a body kind.
|
/// Whether or not this response field is a body kind.
|
||||||
fn is_body(&self) -> bool {
|
fn is_body(&self) -> bool {
|
||||||
match *self {
|
self.as_body_field().is_some()
|
||||||
ResponseField::Body(_) => true,
|
|
||||||
_ => false,
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Whether or not this response field is a header kind.
|
/// Whether or not this response field is a header kind.
|
||||||
@ -267,6 +251,14 @@ impl ResponseField {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Return the contained field if this response field is a body kind.
|
||||||
|
fn as_body_field(&self) -> Option<&Field> {
|
||||||
|
match self {
|
||||||
|
ResponseField::Body(field) => Some(field),
|
||||||
|
_ => None,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// Whether or not this response field is a newtype body kind.
|
/// Whether or not this response field is a newtype body kind.
|
||||||
fn is_newtype_body(&self) -> bool {
|
fn is_newtype_body(&self) -> bool {
|
||||||
match *self {
|
match *self {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user