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