ruma_client_api: Simplify Response::init_fields

This commit is contained in:
Jonas Platte 2020-01-06 12:20:48 +01:00
parent af7333203a
commit b6394a32b7
No known key found for this signature in database
GPG Key ID: 7D261D771D915378

View File

@ -35,36 +35,30 @@ impl Response {
/// Produces code for a response struct initializer. /// Produces code for a response struct initializer.
pub fn init_fields(&self) -> TokenStream { pub fn init_fields(&self) -> TokenStream {
let fields = self.fields.iter().map(|response_field| match response_field { let fields = self.fields.iter().map(|response_field| {
ResponseField::Body(field) => { let field = response_field.field();
let field_name = let field_name = field.ident.as_ref().expect("expected field to have an identifier");
field.ident.as_ref().expect("expected field to have an identifier"); let span = field.span();
let span = field.span();
quote_spanned! {span=> match response_field {
#field_name: response_body.#field_name ResponseField::Body(_) => {
quote_spanned! {span=>
#field_name: response_body.#field_name
}
} }
} ResponseField::Header(_, header_name) => {
ResponseField::Header(field, header_name) => { quote_spanned! {span=>
let field_name = #field_name: headers.remove(ruma_api::exports::http::header::#header_name)
field.ident.as_ref().expect("expected field to have an identifier"); .expect("response missing expected header")
let span = field.span(); .to_str()
.expect("failed to convert HeaderValue to str")
quote_spanned! {span=> .to_owned()
#field_name: headers.remove(ruma_api::exports::http::header::#header_name) }
.expect("response missing expected header")
.to_str()
.expect("failed to convert HeaderValue to str")
.to_owned()
} }
} ResponseField::NewtypeBody(_) => {
ResponseField::NewtypeBody(field) => { quote_spanned! {span=>
let field_name = #field_name: response_body.0
field.ident.as_ref().expect("expected field to have an identifier"); }
let span = field.span();
quote_spanned! {span=>
#field_name: response_body.0
} }
} }
}); });