Fix remaining compiler errors.
This commit is contained in:
		
							parent
							
								
									09e377d68e
								
							
						
					
					
						commit
						8f6bc5af77
					
				| @ -22,43 +22,82 @@ impl From<ExprStruct> for Metadata { | ||||
|         let mut requires_authentication = None; | ||||
| 
 | ||||
|         for field in expr.fields { | ||||
|             let Member::Named(identifier) = field.member; | ||||
|             let identifier = match field.member { | ||||
|                 Member::Named(identifier) => identifier, | ||||
|                 _ => panic!("expected Member::Named"), | ||||
|             }; | ||||
| 
 | ||||
|             match identifier.as_ref() { | ||||
|                 "description" => { | ||||
|                     let Expr::Lit(expr_lit) = field.expr; | ||||
|                     let Lit::Str(lit_str) = expr_lit.lit; | ||||
|                     let expr_lit = match field.expr { | ||||
|                         Expr::Lit(expr_lit) => expr_lit, | ||||
|                         _ => panic!("expected Expr::Lit"), | ||||
|                     }; | ||||
|                     let lit_str = match expr_lit.lit { | ||||
|                         Lit::Str(lit_str) => lit_str, | ||||
|                         _ => panic!("expected Lit::Str"), | ||||
|                     }; | ||||
|                     description = Some(lit_str.value()); | ||||
|                 } | ||||
|                 "method" => { | ||||
|                     let Expr::Path(expr_path) = field.expr; | ||||
|                     let expr_path = match field.expr { | ||||
|                         Expr::Path(expr_path) => expr_path, | ||||
|                         _ => panic!("expected Expr::Path"), | ||||
|                     }; | ||||
|                     let path = expr_path.path; | ||||
|                     let segments = path.segments; | ||||
|                     if segments.len() != 1 { | ||||
|                         panic!("ruma_api! expects a one component path for `metadata` `method`"); | ||||
|                     } | ||||
|                     let pair = segments.first().unwrap(); // safe because we just checked
 | ||||
|                     let Pair::End(method_name) = pair; | ||||
|                     let method_name = match pair { | ||||
|                         Pair::End(method_name) => method_name, | ||||
|                         _ => panic!("expected Pair::End"), | ||||
|                     }; | ||||
|                     method = Some(method_name.ident.to_string()); | ||||
|                 } | ||||
|                 "name" => { | ||||
|                     let Expr::Lit(expr_lit) = field.expr; | ||||
|                     let Lit::Str(lit_str) = expr_lit.lit; | ||||
|                     let expr_lit = match field.expr { | ||||
|                         Expr::Lit(expr_lit) => expr_lit, | ||||
|                         _ => panic!("expected Expr::Lit"), | ||||
|                     }; | ||||
|                     let lit_str = match expr_lit.lit { | ||||
|                         Lit::Str(lit_str) => lit_str, | ||||
|                         _ => panic!("expected Lit::Str"), | ||||
|                     }; | ||||
|                     name = Some(lit_str.value()); | ||||
|                 } | ||||
|                 "path" => { | ||||
|                     let Expr::Lit(expr_lit) = field.expr; | ||||
|                     let Lit::Str(lit_str) = expr_lit.lit; | ||||
|                     let expr_lit = match field.expr { | ||||
|                         Expr::Lit(expr_lit) => expr_lit, | ||||
|                         _ => panic!("expected Expr::Lit"), | ||||
|                     }; | ||||
|                     let lit_str = match expr_lit.lit { | ||||
|                         Lit::Str(lit_str) => lit_str, | ||||
|                         _ => panic!("expected Lit::Str"), | ||||
|                     }; | ||||
|                     path = Some(lit_str.value()); | ||||
|                 } | ||||
|                 "rate_limited" => { | ||||
|                     let Expr::Lit(expr_lit) = field.expr; | ||||
|                     let Lit::Bool(lit_bool) = expr_lit.lit; | ||||
|                     let expr_lit = match field.expr { | ||||
|                         Expr::Lit(expr_lit) => expr_lit, | ||||
|                         _ => panic!("expected Expr::Lit"), | ||||
|                     }; | ||||
|                     let lit_bool = match expr_lit.lit { | ||||
|                         Lit::Bool(lit_bool) => lit_bool, | ||||
|                         _ => panic!("expected Lit::Bool"), | ||||
|                     }; | ||||
|                     rate_limited = Some(lit_bool.value) | ||||
|                 } | ||||
|                 "requires_authentication" => { | ||||
|                     let Expr::Lit(expr_lit) = field.expr; | ||||
|                     let Lit::Bool(lit_bool) = expr_lit.lit; | ||||
|                     let expr_lit = match field.expr { | ||||
|                         Expr::Lit(expr_lit) => expr_lit, | ||||
|                         _ => panic!("expected Expr::Lit"), | ||||
|                     }; | ||||
|                     let lit_bool = match expr_lit.lit { | ||||
|                         Lit::Bool(lit_bool) => lit_bool, | ||||
|                         _ => panic!("expected Lit::Bool"), | ||||
|                     }; | ||||
|                     requires_authentication = Some(lit_bool.value) | ||||
|                 } | ||||
|                 _ => panic!("ruma_api! metadata included unexpected field"), | ||||
|  | ||||
| @ -1,7 +1,7 @@ | ||||
| use quote::{ToTokens, Tokens}; | ||||
| use syn::punctuated::Pair; | ||||
| use syn::synom::Synom; | ||||
| use syn::{Expr, FieldValue, Ident, Meta}; | ||||
| use syn::{Expr, FieldValue, Ident, Member, Meta}; | ||||
| 
 | ||||
| mod metadata; | ||||
| mod request; | ||||
| @ -18,7 +18,10 @@ pub fn strip_serde_attrs(field_value: &FieldValue) -> FieldValue { | ||||
|         let meta = attr.interpret_meta() | ||||
|             .expect("ruma_api! could not parse field attributes"); | ||||
| 
 | ||||
|         let Meta::List(meta_list) = meta; | ||||
|         let meta_list = match meta { | ||||
|             Meta::List(meta_list) => meta_list, | ||||
|             _ => panic!("expected Meta::List"), | ||||
|         }; | ||||
| 
 | ||||
|         if meta_list.ident.as_ref() != "serde" { | ||||
|             return true; | ||||
| @ -52,13 +55,16 @@ impl From<Vec<Expr>> for Api { | ||||
|                 _ => panic!("ruma_api! blocks should use struct syntax"), | ||||
|             }; | ||||
| 
 | ||||
|             let segments = expr.path.segments; | ||||
|             let segments = expr.path.segments.clone(); | ||||
| 
 | ||||
|             if segments.len() != 1 { | ||||
|                 panic!("ruma_api! blocks must be one of: metadata, request, or response"); | ||||
|             } | ||||
| 
 | ||||
|             let Pair::End(last_segment) = segments.last().unwrap(); | ||||
|             let last_segment = match segments.last().unwrap() { | ||||
|                 Pair::End(last_segment) => last_segment, | ||||
|                 _ => panic!("expected Pair::End"), | ||||
|             }; | ||||
| 
 | ||||
|             match last_segment.ident.as_ref() { | ||||
|                 "metadata" => metadata = Some(expr.into()), | ||||
| @ -138,23 +144,21 @@ impl ToTokens for Api { | ||||
|             }; | ||||
| 
 | ||||
|             for segment in path_str[1..].split('/') { | ||||
|                 tokens.append(quote! { | ||||
|                 tokens.append_all(quote! { | ||||
|                     path_segments.push | ||||
|                 }); | ||||
| 
 | ||||
|                 tokens.append("("); | ||||
| 
 | ||||
|                 if segment.starts_with(':') { | ||||
|                     tokens.append("&request_path."); | ||||
|                     tokens.append(&segment[1..]); | ||||
|                     tokens.append(".to_string()"); | ||||
|                 } else { | ||||
|                     tokens.append("\""); | ||||
|                     tokens.append(segment); | ||||
|                     tokens.append("\""); | ||||
|                 } | ||||
|                     let what_is_this = &segment[1..]; | ||||
| 
 | ||||
|                 tokens.append(");"); | ||||
|                     tokens.append_all(quote! { | ||||
|                         (&request_path.#what_is_this.to_string()); | ||||
|                     }); | ||||
|                 } else { | ||||
|                     tokens.append_all(quote! { | ||||
|                         ("#segment"); | ||||
|                     }); | ||||
|                 } | ||||
|             } | ||||
| 
 | ||||
|             tokens | ||||
| @ -179,7 +183,10 @@ impl ToTokens for Api { | ||||
|         }; | ||||
| 
 | ||||
|         let add_body_to_request = if let Some(field) = self.request.newtype_body_field() { | ||||
|             let field_name = field.ident.as_ref().expect("expected body field to have a name"); | ||||
|             let field_name = match field.member { | ||||
|                 Member::Named(field_name) => field_name, | ||||
|                 _ => panic!("expected Member::Named"), | ||||
|             }; | ||||
| 
 | ||||
|             quote! { | ||||
|                 let request_body = RequestBody(request.#field_name); | ||||
| @ -201,10 +208,13 @@ impl ToTokens for Api { | ||||
|         }; | ||||
| 
 | ||||
|         let deserialize_response_body = if let Some(field) = self.response.newtype_body_field() { | ||||
|             let field_type = &field.ty; | ||||
|             let field_type = match field.expr { | ||||
|                 Expr::Path(ref field_type) => field_type, | ||||
|                 _ => panic!("expected Expr::Path"), | ||||
|             }; | ||||
|             let mut tokens = Tokens::new(); | ||||
| 
 | ||||
|             tokens.append(quote! { | ||||
|             tokens.append_all(quote! { | ||||
|                 let future_response = hyper_response.body() | ||||
|                     .fold::<_, _, Result<_, ::std::io::Error>>(Vec::new(), |mut bytes, chunk| { | ||||
|                         bytes.write_all(&chunk)?; | ||||
| @ -218,13 +228,13 @@ impl ToTokens for Api { | ||||
|                     }) | ||||
|             }); | ||||
| 
 | ||||
|             tokens.append(".and_then(move |response_body| {"); | ||||
|             tokens.append_all(".and_then(move |response_body| {".into_tokens()); | ||||
| 
 | ||||
|             tokens | ||||
|         } else if self.response.has_body_fields() { | ||||
|             let mut tokens = Tokens::new(); | ||||
| 
 | ||||
|             tokens.append(quote! { | ||||
|             tokens.append_all(quote! { | ||||
|                 let future_response = hyper_response.body() | ||||
|                     .fold::<_, _, Result<_, ::std::io::Error>>(Vec::new(), |mut bytes, chunk| { | ||||
|                         bytes.write_all(&chunk)?; | ||||
| @ -238,23 +248,23 @@ impl ToTokens for Api { | ||||
|                     }) | ||||
|             }); | ||||
| 
 | ||||
|             tokens.append(".and_then(move |response_body| {"); | ||||
|             tokens.append_all(".and_then(move |response_body| {".into_tokens()); | ||||
| 
 | ||||
|             tokens | ||||
|         } else { | ||||
|             let mut tokens = Tokens::new(); | ||||
| 
 | ||||
|             tokens.append(quote! { | ||||
|             tokens.append_all(quote! { | ||||
|                 let future_response = ::futures::future::ok(()) | ||||
|             }); | ||||
| 
 | ||||
|             tokens.append(".and_then(move |_| {"); | ||||
|             tokens.append_all(".and_then(move |_| {".into_tokens()); | ||||
| 
 | ||||
|             tokens | ||||
|         }; | ||||
| 
 | ||||
|         let mut closure_end = Tokens::new(); | ||||
|         closure_end.append("});"); | ||||
|         closure_end.append_all("});".into_tokens()); | ||||
| 
 | ||||
|         let extract_headers = if self.response.has_header_fields() { | ||||
|             quote! { | ||||
| @ -270,7 +280,7 @@ impl ToTokens for Api { | ||||
|             Tokens::new() | ||||
|         }; | ||||
| 
 | ||||
|         tokens.append(quote! { | ||||
|         tokens.append_all(quote! { | ||||
|             #[allow(unused_imports)] | ||||
|             use std::io::Write as _Write; | ||||
| 
 | ||||
|  | ||||
| @ -1,6 +1,6 @@ | ||||
| use quote::{ToTokens, Tokens}; | ||||
| use syn::synom::Synom; | ||||
| use syn::{ExprStruct, Field, FieldValue, FieldsNamed, Meta, NestedMeta}; | ||||
| use syn::{ExprStruct, Field, FieldValue, FieldsNamed, Member, Meta, NestedMeta}; | ||||
| 
 | ||||
| use api::strip_serde_attrs; | ||||
| 
 | ||||
| @ -54,9 +54,12 @@ impl Request { | ||||
|         let mut tokens = Tokens::new(); | ||||
| 
 | ||||
|         for field in self.fields.iter().flat_map(|f| f.field_(request_field_kind)) { | ||||
|             let field_name = field.ident.as_ref().expect("expected body field to have a name"); | ||||
|             let field_name = match field.member { | ||||
|                 Member::Named(field_name) => field_name, | ||||
|                 _ => panic!("expected Member::Named"), | ||||
|             }; | ||||
| 
 | ||||
|             tokens.append(quote! { | ||||
|             tokens.append_all(quote! { | ||||
|                 #field_name: request.#field_name, | ||||
|             }); | ||||
|         } | ||||
| @ -76,7 +79,10 @@ impl From<ExprStruct> for Request { | ||||
|                 let meta = attr.interpret_meta() | ||||
|                     .expect("ruma_api! could not parse request field attributes"); | ||||
| 
 | ||||
|                 let Meta::List(meta_list) = meta; | ||||
|                 let meta_list = match meta { | ||||
|                     Meta::List(meta_list) => meta_list, | ||||
|                     _ => panic!("expected Meta::List"), | ||||
|                 }; | ||||
| 
 | ||||
|                 if meta_list.ident.as_ref() != "ruma_api" { | ||||
|                     return true; | ||||
| @ -132,109 +138,102 @@ impl From<ExprStruct> for Request { | ||||
| 
 | ||||
| impl ToTokens for Request { | ||||
|     fn to_tokens(&self, mut tokens: &mut Tokens) { | ||||
|         tokens.append(quote! { | ||||
|         tokens.append_all(quote! { | ||||
|             /// Data for a request to this API endpoint.
 | ||||
|             #[derive(Debug)] | ||||
|             pub struct Request | ||||
|         }); | ||||
| 
 | ||||
|         if self.fields.len() == 0 { | ||||
|             tokens.append(";"); | ||||
|             tokens.append_all(";".into_tokens()); | ||||
|         } else { | ||||
|             tokens.append("{"); | ||||
|             tokens.append_all("{".into_tokens()); | ||||
| 
 | ||||
|             for request_field in self.fields.iter() { | ||||
|                 strip_serde_attrs(request_field.field()).to_tokens(&mut tokens); | ||||
| 
 | ||||
|                 tokens.append(","); | ||||
|                 tokens.append_all(",".into_tokens()); | ||||
|             } | ||||
| 
 | ||||
|             tokens.append("}"); | ||||
|             tokens.append_all("}".into_tokens()); | ||||
|         } | ||||
| 
 | ||||
|         if let Some(newtype_body_field) = self.newtype_body_field() { | ||||
|             let mut field = newtype_body_field.clone(); | ||||
|             let expr = field.expr; | ||||
| 
 | ||||
|             field.ident = None; | ||||
| 
 | ||||
|             tokens.append(quote! { | ||||
|             tokens.append_all(quote! { | ||||
|                 /// Data in the request body.
 | ||||
|                 #[derive(Debug, Serialize)] | ||||
|                 struct RequestBody | ||||
|                 struct RequestBody(#expr); | ||||
|             }); | ||||
| 
 | ||||
|             tokens.append("("); | ||||
| 
 | ||||
|             field.to_tokens(&mut tokens); | ||||
| 
 | ||||
|             tokens.append(");"); | ||||
|         } else if self.has_body_fields() { | ||||
|             tokens.append(quote! { | ||||
|             tokens.append_all(quote! { | ||||
|                 /// Data in the request body.
 | ||||
|                 #[derive(Debug, Serialize)] | ||||
|                 struct RequestBody | ||||
|             }); | ||||
| 
 | ||||
|             tokens.append("{"); | ||||
|             tokens.append_all("{".into_tokens()); | ||||
| 
 | ||||
|             for request_field in self.fields.iter() { | ||||
|                 match *request_field { | ||||
|                     RequestField::Body(ref field) => { | ||||
|                         field.to_tokens(&mut tokens); | ||||
| 
 | ||||
|                         tokens.append(","); | ||||
|                         tokens.append_all(",".into_tokens()); | ||||
|                     } | ||||
|                     _ => {} | ||||
|                 } | ||||
|             } | ||||
| 
 | ||||
|             tokens.append("}"); | ||||
|             tokens.append_all("}".into_tokens()); | ||||
|         } | ||||
| 
 | ||||
|         if self.has_path_fields() { | ||||
|             tokens.append(quote! { | ||||
|             tokens.append_all(quote! { | ||||
|                 /// Data in the request path.
 | ||||
|                 #[derive(Debug, Serialize)] | ||||
|                 struct RequestPath | ||||
|             }); | ||||
| 
 | ||||
|             tokens.append("{"); | ||||
|             tokens.append_all("{".into_tokens()); | ||||
| 
 | ||||
|             for request_field in self.fields.iter() { | ||||
|                 match *request_field { | ||||
|                     RequestField::Path(ref field) => { | ||||
|                         field.to_tokens(&mut tokens); | ||||
| 
 | ||||
|                         tokens.append(","); | ||||
|                         tokens.append_all(",".into_tokens()); | ||||
|                     } | ||||
|                     _ => {} | ||||
|                 } | ||||
|             } | ||||
| 
 | ||||
|             tokens.append("}"); | ||||
|             tokens.append_all("}".into_tokens()); | ||||
|         } | ||||
| 
 | ||||
|         if self.has_query_fields() { | ||||
|             tokens.append(quote! { | ||||
|             tokens.append_all(quote! { | ||||
|                 /// Data in the request's query string.
 | ||||
|                 #[derive(Debug, Serialize)] | ||||
|                 struct RequestQuery | ||||
|             }); | ||||
| 
 | ||||
|             tokens.append("{"); | ||||
|             tokens.append_all("{".into_tokens()); | ||||
| 
 | ||||
|             for request_field in self.fields.iter() { | ||||
|                 match *request_field { | ||||
|                     RequestField::Query(ref field) => { | ||||
|                         field.to_tokens(&mut tokens); | ||||
| 
 | ||||
|                         tokens.append(","); | ||||
|                         tokens.append_all(",".into_tokens()); | ||||
|                     } | ||||
|                     _ => {} | ||||
|                 } | ||||
|             } | ||||
| 
 | ||||
|             tokens.append("}"); | ||||
|             tokens.append_all("}".into_tokens()); | ||||
|         } | ||||
|     } | ||||
| } | ||||
|  | ||||
| @ -1,5 +1,5 @@ | ||||
| use quote::{ToTokens, Tokens}; | ||||
| use syn::{ExprStruct, Field, FieldValue, FieldsNamed, Meta, NestedMeta}; | ||||
| use syn::{Expr, ExprStruct, Field, FieldValue, FieldsNamed, Member, Meta, NestedMeta}; | ||||
| 
 | ||||
| use api::strip_serde_attrs; | ||||
| 
 | ||||
| @ -26,28 +26,38 @@ impl Response { | ||||
|         for response_field in self.fields.iter() { | ||||
|             match *response_field { | ||||
|                 ResponseField::Body(ref field) => { | ||||
|                     let field_name = field.ident.as_ref() | ||||
|                         .expect("expected body field to have a name"); | ||||
|                     let field_name = match field.member { | ||||
|                         Member::Named(field_name) => field_name, | ||||
|                         _ => panic!("expected Member::Named"), | ||||
|                     }; | ||||
| 
 | ||||
|                     tokens.append(quote! { | ||||
|                     tokens.append_all(quote! { | ||||
|                         #field_name: response_body.#field_name, | ||||
|                     }); | ||||
|                 } | ||||
|                 ResponseField::Header(ref field) => { | ||||
|                     let field_name = field.ident.as_ref() | ||||
|                         .expect("expected body field to have a name"); | ||||
|                     let field_type = &field.ty; | ||||
|                     let field_name = match field.member { | ||||
|                         Member::Named(field_name) => field_name, | ||||
|                         _ => panic!("expected Member::Named"), | ||||
|                     }; | ||||
| 
 | ||||
|                     tokens.append(quote! { | ||||
|                     let field_type = match field.expr { | ||||
|                         Expr::Path(ref field_type) => field_type, | ||||
|                         _ => panic!("expected Expr::Path"), | ||||
|                     }; | ||||
| 
 | ||||
|                     tokens.append_all(quote! { | ||||
|                         #field_name: headers.remove::<#field_type>() | ||||
|                             .expect("missing expected request header"), | ||||
|                     }); | ||||
|                 } | ||||
|                 ResponseField::NewtypeBody(ref field) => { | ||||
|                     let field_name = field.ident.as_ref() | ||||
|                         .expect("expected body field to have a name"); | ||||
|                     let field_name = match field.member { | ||||
|                         Member::Named(field_name) => field_name, | ||||
|                         _ => panic!("expected Member::Named"), | ||||
|                     }; | ||||
| 
 | ||||
|                     tokens.append(quote! { | ||||
|                     tokens.append_all(quote! { | ||||
|                         #field_name: response_body, | ||||
|                     }); | ||||
|                 } | ||||
| @ -57,7 +67,7 @@ impl Response { | ||||
|         tokens | ||||
|     } | ||||
| 
 | ||||
|     pub fn newtype_body_field(&self) -> Option<&Field> { | ||||
|     pub fn newtype_body_field(&self) -> Option<&FieldValue> { | ||||
|         for response_field in self.fields.iter() { | ||||
|             match *response_field { | ||||
|                 ResponseField::NewtypeBody(ref field) => { | ||||
| @ -84,7 +94,10 @@ impl From<ExprStruct> for Response { | ||||
|                 let meta = attr.interpret_meta() | ||||
|                     .expect("ruma_api! could not parse response field attributes"); | ||||
| 
 | ||||
|                 let Meta::List(meta_list) = meta; | ||||
|                 let meta_list = match meta { | ||||
|                     Meta::List(meta_list) => meta_list, | ||||
|                     _ => panic!("expected Meta::List"), | ||||
|                 }; | ||||
| 
 | ||||
|                 if meta_list.ident.as_ref() != "ruma_api" { | ||||
|                     return true; | ||||
| @ -141,63 +154,56 @@ impl From<ExprStruct> for Response { | ||||
| 
 | ||||
| impl ToTokens for Response { | ||||
|     fn to_tokens(&self, mut tokens: &mut Tokens) { | ||||
|         tokens.append(quote! { | ||||
|         tokens.append_all(quote! { | ||||
|             /// Data in the response from this API endpoint.
 | ||||
|             #[derive(Debug)] | ||||
|             pub struct Response | ||||
|         }); | ||||
| 
 | ||||
|         if self.fields.len() == 0 { | ||||
|             tokens.append(";"); | ||||
|             tokens.append_all(";".into_tokens()); | ||||
|         } else { | ||||
|             tokens.append("{"); | ||||
|             tokens.append_all("{".into_tokens()); | ||||
| 
 | ||||
|             for response_field in self.fields.iter() { | ||||
|                 strip_serde_attrs(response_field.field()).to_tokens(&mut tokens); | ||||
| 
 | ||||
|                 tokens.append(","); | ||||
|                 tokens.append_all(",".into_tokens()); | ||||
|             } | ||||
| 
 | ||||
|             tokens.append("}"); | ||||
|             tokens.append_all("}".into_tokens()); | ||||
|         } | ||||
| 
 | ||||
|         if let Some(newtype_body_field) = self.newtype_body_field() { | ||||
|             let mut field = newtype_body_field.clone(); | ||||
|             let expr = field.expr; | ||||
| 
 | ||||
|             field.ident = None; | ||||
| 
 | ||||
|             tokens.append(quote! { | ||||
|             tokens.append_all(quote! { | ||||
|                 /// Data in the response body.
 | ||||
|                 #[derive(Debug, Deserialize)] | ||||
|                 struct ResponseBody | ||||
|                 struct ResponseBody(#expr); | ||||
|             }); | ||||
| 
 | ||||
|             tokens.append("("); | ||||
| 
 | ||||
|             field.to_tokens(&mut tokens); | ||||
| 
 | ||||
|             tokens.append(");"); | ||||
|         } else if self.has_body_fields() { | ||||
|             tokens.append(quote! { | ||||
|             tokens.append_all(quote! { | ||||
|                 /// Data in the response body.
 | ||||
|                 #[derive(Debug, Deserialize)] | ||||
|                 struct ResponseBody | ||||
|             }); | ||||
| 
 | ||||
|             tokens.append("{"); | ||||
|             tokens.append_all("{".into_tokens()); | ||||
| 
 | ||||
|             for response_field in self.fields.iter() { | ||||
|                 match *response_field { | ||||
|                     ResponseField::Body(ref field) => { | ||||
|                         field.to_tokens(&mut tokens); | ||||
| 
 | ||||
|                         tokens.append(","); | ||||
|                         tokens.append_all(",".into_tokens()); | ||||
|                     } | ||||
|                     _ => {} | ||||
|                 } | ||||
|             } | ||||
| 
 | ||||
|             tokens.append("}"); | ||||
|             tokens.append_all("}".into_tokens()); | ||||
|         } | ||||
|     } | ||||
| } | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user