Update strip_serde_attrs, uncomment code.
This commit is contained in:
		
							parent
							
								
									ab106f75ac
								
							
						
					
					
						commit
						4c46df9a59
					
				
							
								
								
									
										446
									
								
								src/api/mod.rs
									
									
									
									
									
								
							
							
						
						
									
										446
									
								
								src/api/mod.rs
									
									
									
									
									
								
							| @ -1,7 +1,7 @@ | |||||||
| use quote::{ToTokens, Tokens}; | use quote::{ToTokens, Tokens}; | ||||||
| use syn::punctuated::Pair; | use syn::punctuated::Pair; | ||||||
| use syn::synom::Synom; | use syn::synom::Synom; | ||||||
| use syn::{Expr, Field, Ident, Meta}; | use syn::{Expr, FieldValue, Ident, Meta}; | ||||||
| 
 | 
 | ||||||
| mod metadata; | mod metadata; | ||||||
| mod request; | mod request; | ||||||
| @ -12,26 +12,24 @@ use self::metadata::Metadata; | |||||||
| use self::request::Request; | use self::request::Request; | ||||||
| use self::response::Response; | use self::response::Response; | ||||||
| 
 | 
 | ||||||
| // pub fn strip_serde_attrs(field: &Field) -> Field {
 | pub fn strip_serde_attrs(field_value: &FieldValue) -> FieldValue { | ||||||
| //     let mut field = field.clone();
 |     let mut field_value = field_value.clone(); | ||||||
| 
 | 
 | ||||||
| //     field.attrs = field.attrs.into_iter().filter(|attr| {
 |     field_value.attrs = field_value.attrs.into_iter().filter(|attr| { | ||||||
| //         let (attr_ident, _) = match attr.value {
 |         let meta = attr.interpret_meta() | ||||||
| //             Meta::List(ref attr_ident, _) => {
 |             .expect("ruma_api! could not parse field attributes"); | ||||||
| //                 (attr_ident, ())
 |  | ||||||
| //             }
 |  | ||||||
| //             _ => return true,
 |  | ||||||
| //         };
 |  | ||||||
| 
 | 
 | ||||||
| //         if attr_ident != "serde" {
 |         let Meta::List(meta_list) = meta; | ||||||
| //             return true;
 |  | ||||||
| //         }
 |  | ||||||
| 
 | 
 | ||||||
| //         false
 |         if meta_list.ident.as_ref() != "serde" { | ||||||
| //     }).collect();
 |             return true; | ||||||
|  |         } | ||||||
| 
 | 
 | ||||||
| //     field
 |         false | ||||||
| // }
 |     }).collect(); | ||||||
|  | 
 | ||||||
|  |     field_value | ||||||
|  | } | ||||||
| 
 | 
 | ||||||
| pub struct Api { | pub struct Api { | ||||||
|     metadata: Metadata, |     metadata: Metadata, | ||||||
| @ -104,266 +102,266 @@ impl Synom for Exprs { | |||||||
|         }) |         }) | ||||||
|     )); |     )); | ||||||
| } | } | ||||||
| // impl ToTokens for Api {
 |  | ||||||
| //     fn to_tokens(&self, tokens: &mut Tokens) {
 |  | ||||||
| //         let description = &self.metadata.description;
 |  | ||||||
| //         let method = &self.metadata.method;
 |  | ||||||
| //         let name = &self.metadata.name;
 |  | ||||||
| //         let path = &self.metadata.path;
 |  | ||||||
| //         let rate_limited = &self.metadata.rate_limited;
 |  | ||||||
| //         let requires_authentication = &self.metadata.requires_authentication;
 |  | ||||||
| 
 | 
 | ||||||
| //         let request_types = {
 | impl ToTokens for Api { | ||||||
| //             let mut tokens = Tokens::new();
 |     fn to_tokens(&self, tokens: &mut Tokens) { | ||||||
| //             self.request.to_tokens(&mut tokens);
 |         let description = &self.metadata.description; | ||||||
| //             tokens
 |         let method = &self.metadata.method; | ||||||
| //         };
 |         let name = &self.metadata.name; | ||||||
| //         let response_types = {
 |         let path = &self.metadata.path; | ||||||
| //             let mut tokens = Tokens::new();
 |         let rate_limited = &self.metadata.rate_limited; | ||||||
| //             self.response.to_tokens(&mut tokens);
 |         let requires_authentication = &self.metadata.requires_authentication; | ||||||
| //             tokens
 |  | ||||||
| //         };
 |  | ||||||
| 
 | 
 | ||||||
| //         let set_request_path = if self.request.has_path_fields() {
 |         let request_types = { | ||||||
| //             let path_str_quoted = path.as_str();
 |             let mut tokens = Tokens::new(); | ||||||
| //             assert!(
 |             self.request.to_tokens(&mut tokens); | ||||||
| //                 path_str_quoted.starts_with('"') && path_str_quoted.ends_with('"'),
 |             tokens | ||||||
| //                 "path needs to be a string literal"
 |         }; | ||||||
| //             );
 |         let response_types = { | ||||||
|  |             let mut tokens = Tokens::new(); | ||||||
|  |             self.response.to_tokens(&mut tokens); | ||||||
|  |             tokens | ||||||
|  |         }; | ||||||
| 
 | 
 | ||||||
| //             let path_str = &path_str_quoted[1 .. path_str_quoted.len() - 1];
 |         let set_request_path = if self.request.has_path_fields() { | ||||||
|  |             let path_str_quoted = path.as_str(); | ||||||
|  |             assert!( | ||||||
|  |                 path_str_quoted.starts_with('"') && path_str_quoted.ends_with('"'), | ||||||
|  |                 "path needs to be a string literal" | ||||||
|  |             ); | ||||||
| 
 | 
 | ||||||
| //             assert!(path_str.starts_with('/'), "path needs to start with '/'");
 |             let path_str = &path_str_quoted[1 .. path_str_quoted.len() - 1]; | ||||||
| //             assert!(
 |  | ||||||
| //                 path_str.chars().filter(|c| *c == ':').count() == self.request.path_field_count(),
 |  | ||||||
| //                 "number of declared path parameters needs to match amount of placeholders in path"
 |  | ||||||
| //             );
 |  | ||||||
| 
 | 
 | ||||||
| //             let request_path_init_fields = self.request.request_path_init_fields();
 |             assert!(path_str.starts_with('/'), "path needs to start with '/'"); | ||||||
|  |             assert!( | ||||||
|  |                 path_str.chars().filter(|c| *c == ':').count() == self.request.path_field_count(), | ||||||
|  |                 "number of declared path parameters needs to match amount of placeholders in path" | ||||||
|  |             ); | ||||||
| 
 | 
 | ||||||
| //             let mut tokens = quote! {
 |             let request_path_init_fields = self.request.request_path_init_fields(); | ||||||
| //                 let request_path = RequestPath {
 |  | ||||||
| //                     #request_path_init_fields
 |  | ||||||
| //                 };
 |  | ||||||
| 
 | 
 | ||||||
| //                 // This `unwrap()` can only fail when the url is a
 |             let mut tokens = quote! { | ||||||
| //                 // cannot-be-base url like `mailto:` or `data:`, which is not
 |                 let request_path = RequestPath { | ||||||
| //                 // the case for our placeholder url.
 |                     #request_path_init_fields | ||||||
| //                 let mut path_segments = url.path_segments_mut().unwrap();
 |                 }; | ||||||
| //             };
 |  | ||||||
| 
 | 
 | ||||||
| //             for segment in path_str[1..].split('/') {
 |                 // This `unwrap()` can only fail when the url is a
 | ||||||
| //                 tokens.append(quote! {
 |                 // cannot-be-base url like `mailto:` or `data:`, which is not
 | ||||||
| //                     path_segments.push
 |                 // the case for our placeholder url.
 | ||||||
| //                 });
 |                 let mut path_segments = url.path_segments_mut().unwrap(); | ||||||
|  |             }; | ||||||
| 
 | 
 | ||||||
| //                 tokens.append("(");
 |             for segment in path_str[1..].split('/') { | ||||||
|  |                 tokens.append(quote! { | ||||||
|  |                     path_segments.push | ||||||
|  |                 }); | ||||||
| 
 | 
 | ||||||
| //                 if segment.starts_with(':') {
 |                 tokens.append("("); | ||||||
| //                     tokens.append("&request_path.");
 |  | ||||||
| //                     tokens.append(&segment[1..]);
 |  | ||||||
| //                     tokens.append(".to_string()");
 |  | ||||||
| //                 } else {
 |  | ||||||
| //                     tokens.append("\"");
 |  | ||||||
| //                     tokens.append(segment);
 |  | ||||||
| //                     tokens.append("\"");
 |  | ||||||
| //                 }
 |  | ||||||
| 
 | 
 | ||||||
| //                 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("\""); | ||||||
|  |                 } | ||||||
| 
 | 
 | ||||||
| //             tokens
 |                 tokens.append(");"); | ||||||
| //         } else {
 |             } | ||||||
| //             quote! {
 |  | ||||||
| //                 url.set_path(metadata.path);
 |  | ||||||
| //             }
 |  | ||||||
| //         };
 |  | ||||||
| 
 | 
 | ||||||
| //         let set_request_query = if self.request.has_query_fields() {
 |             tokens | ||||||
| //             let request_query_init_fields = self.request.request_query_init_fields();
 |         } else { | ||||||
|  |             quote! { | ||||||
|  |                 url.set_path(metadata.path); | ||||||
|  |             } | ||||||
|  |         }; | ||||||
| 
 | 
 | ||||||
| //             quote! {
 |         let set_request_query = if self.request.has_query_fields() { | ||||||
| //                 let request_query = RequestQuery {
 |             let request_query_init_fields = self.request.request_query_init_fields(); | ||||||
| //                     #request_query_init_fields
 |  | ||||||
| //                 };
 |  | ||||||
| 
 | 
 | ||||||
| //                 url.set_query(Some(&::serde_urlencoded::to_string(request_query)?));
 |             quote! { | ||||||
| //             }
 |                 let request_query = RequestQuery { | ||||||
| //         } else {
 |                     #request_query_init_fields | ||||||
| //             Tokens::new()
 |                 }; | ||||||
| //         };
 |  | ||||||
| 
 | 
 | ||||||
| //         let add_body_to_request = if let Some(field) = self.request.newtype_body_field() {
 |                 url.set_query(Some(&::serde_urlencoded::to_string(request_query)?)); | ||||||
| //             let field_name = field.ident.as_ref().expect("expected body field to have a name");
 |             } | ||||||
|  |         } else { | ||||||
|  |             Tokens::new() | ||||||
|  |         }; | ||||||
| 
 | 
 | ||||||
| //             quote! {
 |         let add_body_to_request = if let Some(field) = self.request.newtype_body_field() { | ||||||
| //                 let request_body = RequestBody(request.#field_name);
 |             let field_name = field.ident.as_ref().expect("expected body field to have a name"); | ||||||
| 
 | 
 | ||||||
| //                 hyper_request.set_body(::serde_json::to_vec(&request_body)?);
 |             quote! { | ||||||
| //             }
 |                 let request_body = RequestBody(request.#field_name); | ||||||
| //         } else if self.request.has_body_fields() {
 |  | ||||||
| //             let request_body_init_fields = self.request.request_body_init_fields();
 |  | ||||||
| 
 | 
 | ||||||
| //             quote! {
 |                 hyper_request.set_body(::serde_json::to_vec(&request_body)?); | ||||||
| //                 let request_body = RequestBody {
 |             } | ||||||
| //                     #request_body_init_fields
 |         } else if self.request.has_body_fields() { | ||||||
| //                 };
 |             let request_body_init_fields = self.request.request_body_init_fields(); | ||||||
| 
 | 
 | ||||||
| //                 hyper_request.set_body(::serde_json::to_vec(&request_body)?);
 |             quote! { | ||||||
| //             }
 |                 let request_body = RequestBody { | ||||||
| //         } else {
 |                     #request_body_init_fields | ||||||
| //             Tokens::new()
 |                 }; | ||||||
| //         };
 |  | ||||||
| 
 | 
 | ||||||
| //         let deserialize_response_body = if let Some(field) = self.response.newtype_body_field() {
 |                 hyper_request.set_body(::serde_json::to_vec(&request_body)?); | ||||||
| //             let field_type = &field.ty;
 |             } | ||||||
| //             let mut tokens = Tokens::new();
 |         } else { | ||||||
|  |             Tokens::new() | ||||||
|  |         }; | ||||||
| 
 | 
 | ||||||
| //             tokens.append(quote! {
 |         let deserialize_response_body = if let Some(field) = self.response.newtype_body_field() { | ||||||
| //                 let future_response = hyper_response.body()
 |             let field_type = &field.ty; | ||||||
| //                     .fold::<_, _, Result<_, ::std::io::Error>>(Vec::new(), |mut bytes, chunk| {
 |             let mut tokens = Tokens::new(); | ||||||
| //                         bytes.write_all(&chunk)?;
 |  | ||||||
| 
 | 
 | ||||||
| //                         Ok(bytes)
 |             tokens.append(quote! { | ||||||
| //                     })
 |                 let future_response = hyper_response.body() | ||||||
| //                     .map_err(::ruma_api::Error::from)
 |                     .fold::<_, _, Result<_, ::std::io::Error>>(Vec::new(), |mut bytes, chunk| { | ||||||
| //                     .and_then(|bytes| {
 |                         bytes.write_all(&chunk)?; | ||||||
| //                         ::serde_json::from_slice::<#field_type>(bytes.as_slice())
 |  | ||||||
| //                             .map_err(::ruma_api::Error::from)
 |  | ||||||
| //                     })
 |  | ||||||
| //             });
 |  | ||||||
| 
 | 
 | ||||||
| //             tokens.append(".and_then(move |response_body| {");
 |                         Ok(bytes) | ||||||
|  |                     }) | ||||||
|  |                     .map_err(::ruma_api::Error::from) | ||||||
|  |                     .and_then(|bytes| { | ||||||
|  |                         ::serde_json::from_slice::<#field_type>(bytes.as_slice()) | ||||||
|  |                             .map_err(::ruma_api::Error::from) | ||||||
|  |                     }) | ||||||
|  |             }); | ||||||
| 
 | 
 | ||||||
| //             tokens
 |             tokens.append(".and_then(move |response_body| {"); | ||||||
| //         } else if self.response.has_body_fields() {
 |  | ||||||
| //             let mut tokens = Tokens::new();
 |  | ||||||
| 
 | 
 | ||||||
| //             tokens.append(quote! {
 |             tokens | ||||||
| //                 let future_response = hyper_response.body()
 |         } else if self.response.has_body_fields() { | ||||||
| //                     .fold::<_, _, Result<_, ::std::io::Error>>(Vec::new(), |mut bytes, chunk| {
 |             let mut tokens = Tokens::new(); | ||||||
| //                         bytes.write_all(&chunk)?;
 |  | ||||||
| 
 | 
 | ||||||
| //                         Ok(bytes)
 |             tokens.append(quote! { | ||||||
| //                     })
 |                 let future_response = hyper_response.body() | ||||||
| //                     .map_err(::ruma_api::Error::from)
 |                     .fold::<_, _, Result<_, ::std::io::Error>>(Vec::new(), |mut bytes, chunk| { | ||||||
| //                     .and_then(|bytes| {
 |                         bytes.write_all(&chunk)?; | ||||||
| //                         ::serde_json::from_slice::<ResponseBody>(bytes.as_slice())
 |  | ||||||
| //                             .map_err(::ruma_api::Error::from)
 |  | ||||||
| //                     })
 |  | ||||||
| //             });
 |  | ||||||
| 
 | 
 | ||||||
| //             tokens.append(".and_then(move |response_body| {");
 |                         Ok(bytes) | ||||||
|  |                     }) | ||||||
|  |                     .map_err(::ruma_api::Error::from) | ||||||
|  |                     .and_then(|bytes| { | ||||||
|  |                         ::serde_json::from_slice::<ResponseBody>(bytes.as_slice()) | ||||||
|  |                             .map_err(::ruma_api::Error::from) | ||||||
|  |                     }) | ||||||
|  |             }); | ||||||
| 
 | 
 | ||||||
| //             tokens
 |             tokens.append(".and_then(move |response_body| {"); | ||||||
| //         } else {
 |  | ||||||
| //             let mut tokens = Tokens::new();
 |  | ||||||
| 
 | 
 | ||||||
| //             tokens.append(quote! {
 |             tokens | ||||||
| //                 let future_response = ::futures::future::ok(())
 |         } else { | ||||||
| //             });
 |             let mut tokens = Tokens::new(); | ||||||
| 
 | 
 | ||||||
| //             tokens.append(".and_then(move |_| {");
 |             tokens.append(quote! { | ||||||
|  |                 let future_response = ::futures::future::ok(()) | ||||||
|  |             }); | ||||||
| 
 | 
 | ||||||
| //             tokens
 |             tokens.append(".and_then(move |_| {"); | ||||||
| //         };
 |  | ||||||
| 
 | 
 | ||||||
| //         let mut closure_end = Tokens::new();
 |             tokens | ||||||
| //         closure_end.append("});");
 |         }; | ||||||
| 
 | 
 | ||||||
| //         let extract_headers = if self.response.has_header_fields() {
 |         let mut closure_end = Tokens::new(); | ||||||
| //             quote! {
 |         closure_end.append("});"); | ||||||
| //                 let mut headers = hyper_response.headers().clone();
 |  | ||||||
| //             }
 |  | ||||||
| //         } else {
 |  | ||||||
| //             Tokens::new()
 |  | ||||||
| //         };
 |  | ||||||
| 
 | 
 | ||||||
| //         let response_init_fields = if self.response.has_fields() {
 |         let extract_headers = if self.response.has_header_fields() { | ||||||
| //             self.response.init_fields()
 |             quote! { | ||||||
| //         } else {
 |                 let mut headers = hyper_response.headers().clone(); | ||||||
| //             Tokens::new()
 |             } | ||||||
| //         };
 |         } else { | ||||||
|  |             Tokens::new() | ||||||
|  |         }; | ||||||
| 
 | 
 | ||||||
| //         tokens.append(quote! {
 |         let response_init_fields = if self.response.has_fields() { | ||||||
| //             #[allow(unused_imports)]
 |             self.response.init_fields() | ||||||
| //             use std::io::Write as _Write;
 |         } else { | ||||||
|  |             Tokens::new() | ||||||
|  |         }; | ||||||
| 
 | 
 | ||||||
| //             #[allow(unused_imports)]
 |         tokens.append(quote! { | ||||||
| //             use ::futures::{Future as _Future, Stream as _Stream};
 |             #[allow(unused_imports)] | ||||||
| //             use ::ruma_api::Endpoint as _RumaApiEndpoint;
 |             use std::io::Write as _Write; | ||||||
| 
 | 
 | ||||||
| //             /// The API endpoint.
 |             #[allow(unused_imports)] | ||||||
| //             #[derive(Debug)]
 |             use ::futures::{Future as _Future, Stream as _Stream}; | ||||||
| //             pub struct Endpoint;
 |             use ::ruma_api::Endpoint as _RumaApiEndpoint; | ||||||
| 
 | 
 | ||||||
| //             #request_types
 |             /// The API endpoint.
 | ||||||
|  |             #[derive(Debug)] | ||||||
|  |             pub struct Endpoint; | ||||||
| 
 | 
 | ||||||
| //             impl ::std::convert::TryFrom<Request> for ::hyper::Request {
 |             #request_types | ||||||
| //                 type Error = ::ruma_api::Error;
 |  | ||||||
| 
 | 
 | ||||||
| //                 #[allow(unused_mut, unused_variables)]
 |             impl ::std::convert::TryFrom<Request> for ::hyper::Request { | ||||||
| //                 fn try_from(request: Request) -> Result<Self, Self::Error> {
 |                 type Error = ::ruma_api::Error; | ||||||
| //                     let metadata = Endpoint::METADATA;
 |  | ||||||
| 
 | 
 | ||||||
| //                     // Use dummy homeserver url which has to be overwritten in
 |                 #[allow(unused_mut, unused_variables)] | ||||||
| //                     // the calling code. Previously (with hyper::Uri) this was
 |                 fn try_from(request: Request) -> Result<Self, Self::Error> { | ||||||
| //                     // not required, but Url::parse only accepts absolute urls.
 |                     let metadata = Endpoint::METADATA; | ||||||
| //                     let mut url = ::url::Url::parse("http://invalid-host-please-change/").unwrap();
 |  | ||||||
| 
 | 
 | ||||||
| //                     { #set_request_path }
 |                     // Use dummy homeserver url which has to be overwritten in
 | ||||||
| //                     { #set_request_query }
 |                     // the calling code. Previously (with hyper::Uri) this was
 | ||||||
|  |                     // not required, but Url::parse only accepts absolute urls.
 | ||||||
|  |                     let mut url = ::url::Url::parse("http://invalid-host-please-change/").unwrap(); | ||||||
| 
 | 
 | ||||||
| //                     let mut hyper_request = ::hyper::Request::new(
 |                     { #set_request_path } | ||||||
| //                         metadata.method,
 |                     { #set_request_query } | ||||||
| //                         // Every valid URL is a valid URI
 |  | ||||||
| //                         url.into_string().parse().unwrap(),
 |  | ||||||
| //                     );
 |  | ||||||
| 
 | 
 | ||||||
| //                     { #add_body_to_request }
 |                     let mut hyper_request = ::hyper::Request::new( | ||||||
|  |                         metadata.method, | ||||||
|  |                         // Every valid URL is a valid URI
 | ||||||
|  |                         url.into_string().parse().unwrap(), | ||||||
|  |                     ); | ||||||
| 
 | 
 | ||||||
| //                     Ok(hyper_request)
 |                     { #add_body_to_request } | ||||||
| //                 }
 |  | ||||||
| //             }
 |  | ||||||
| 
 | 
 | ||||||
| //             #response_types
 |                     Ok(hyper_request) | ||||||
|  |                 } | ||||||
|  |             } | ||||||
| 
 | 
 | ||||||
| //             impl ::futures::future::FutureFrom<::hyper::Response> for Response {
 |             #response_types | ||||||
| //                 type Future = Box<_Future<Item = Self, Error = Self::Error>>;
 |  | ||||||
| //                 type Error = ::ruma_api::Error;
 |  | ||||||
| 
 | 
 | ||||||
| //                 #[allow(unused_variables)]
 |             impl ::futures::future::FutureFrom<::hyper::Response> for Response { | ||||||
| //                 fn future_from(hyper_response: ::hyper::Response)
 |                 type Future = Box<_Future<Item = Self, Error = Self::Error>>; | ||||||
| //                 -> Box<_Future<Item = Self, Error = Self::Error>> {
 |                 type Error = ::ruma_api::Error; | ||||||
| //                     #extract_headers
 |  | ||||||
| 
 | 
 | ||||||
| //                     #deserialize_response_body
 |                 #[allow(unused_variables)] | ||||||
|  |                 fn future_from(hyper_response: ::hyper::Response) | ||||||
|  |                 -> Box<_Future<Item = Self, Error = Self::Error>> { | ||||||
|  |                     #extract_headers | ||||||
| 
 | 
 | ||||||
| //                     let response = Response {
 |                     #deserialize_response_body | ||||||
| //                         #response_init_fields
 |  | ||||||
| //                     };
 |  | ||||||
| 
 | 
 | ||||||
| //                     Ok(response)
 |                     let response = Response { | ||||||
| //                     #closure_end
 |                         #response_init_fields | ||||||
|  |                     }; | ||||||
| 
 | 
 | ||||||
| //                     Box::new(future_response)
 |                     Ok(response) | ||||||
| //                 }
 |                     #closure_end | ||||||
| //             }
 |  | ||||||
| 
 | 
 | ||||||
| //             impl ::ruma_api::Endpoint for Endpoint {
 |                     Box::new(future_response) | ||||||
| //                 type Request = Request;
 |                 } | ||||||
| //                 type Response = Response;
 |             } | ||||||
| 
 | 
 | ||||||
| //                 const METADATA: ::ruma_api::Metadata = ::ruma_api::Metadata {
 |             impl ::ruma_api::Endpoint for Endpoint { | ||||||
| //                     description: #description,
 |                 type Request = Request; | ||||||
| //                     method: ::hyper::#method,
 |                 type Response = Response; | ||||||
| //                     name: #name,
 |  | ||||||
| //                     path: #path,
 |  | ||||||
| //                     rate_limited: #rate_limited,
 |  | ||||||
| //                     requires_authentication: #requires_authentication,
 |  | ||||||
| //                 };
 |  | ||||||
| //             }
 |  | ||||||
| //         });
 |  | ||||||
| //     }
 |  | ||||||
| // }
 |  | ||||||
| 
 | 
 | ||||||
|  |                 const METADATA: ::ruma_api::Metadata = ::ruma_api::Metadata { | ||||||
|  |                     description: #description, | ||||||
|  |                     method: ::hyper::#method, | ||||||
|  |                     name: #name, | ||||||
|  |                     path: #path, | ||||||
|  |                     rate_limited: #rate_limited, | ||||||
|  |                     requires_authentication: #requires_authentication, | ||||||
|  |                 }; | ||||||
|  |             } | ||||||
|  |         }); | ||||||
|  |     } | ||||||
|  | } | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user