api: Allow to use any HeaderName with the header keyword of ruma_api
This commit is contained in:
		
							parent
							
								
									b57338c1cf
								
							
						
					
					
						commit
						739c35aaca
					
				| @ -5,6 +5,7 @@ pub mod v3 { | |||||||
|     //!
 |     //!
 | ||||||
|     //! [spec]: https://spec.matrix.org/v1.2/client-server-api/#post_matrixmediav3upload
 |     //! [spec]: https://spec.matrix.org/v1.2/client-server-api/#post_matrixmediav3upload
 | ||||||
| 
 | 
 | ||||||
|  |     use http::header::CONTENT_TYPE; | ||||||
|     use ruma_common::{api::ruma_api, OwnedMxcUri}; |     use ruma_common::{api::ruma_api, OwnedMxcUri}; | ||||||
| 
 | 
 | ||||||
|     ruma_api! { |     ruma_api! { | ||||||
|  | |||||||
| @ -5,6 +5,7 @@ pub mod v3 { | |||||||
|     //!
 |     //!
 | ||||||
|     //! [spec]: https://spec.matrix.org/v1.2/client-server-api/#get_matrixmediav3downloadservernamemediaid
 |     //! [spec]: https://spec.matrix.org/v1.2/client-server-api/#get_matrixmediav3downloadservernamemediaid
 | ||||||
| 
 | 
 | ||||||
|  |     use http::header::{CONTENT_DISPOSITION, CONTENT_TYPE}; | ||||||
|     #[cfg(feature = "unstable-msc2246")] |     #[cfg(feature = "unstable-msc2246")] | ||||||
|     use js_int::UInt; |     use js_int::UInt; | ||||||
|     use ruma_common::{api::ruma_api, IdParseError, MxcUri, ServerName}; |     use ruma_common::{api::ruma_api, IdParseError, MxcUri, ServerName}; | ||||||
|  | |||||||
| @ -5,6 +5,7 @@ pub mod v3 { | |||||||
|     //!
 |     //!
 | ||||||
|     //! [spec]: https://spec.matrix.org/v1.2/client-server-api/#get_matrixmediav3downloadservernamemediaidfilename
 |     //! [spec]: https://spec.matrix.org/v1.2/client-server-api/#get_matrixmediav3downloadservernamemediaidfilename
 | ||||||
| 
 | 
 | ||||||
|  |     use http::header::{CONTENT_DISPOSITION, CONTENT_TYPE}; | ||||||
|     use ruma_common::{api::ruma_api, IdParseError, MxcUri, ServerName}; |     use ruma_common::{api::ruma_api, IdParseError, MxcUri, ServerName}; | ||||||
| 
 | 
 | ||||||
|     ruma_api! { |     ruma_api! { | ||||||
|  | |||||||
| @ -5,6 +5,7 @@ pub mod v3 { | |||||||
|     //!
 |     //!
 | ||||||
|     //! [spec]: https://spec.matrix.org/v1.2/client-server-api/#get_matrixmediav3thumbnailservernamemediaid
 |     //! [spec]: https://spec.matrix.org/v1.2/client-server-api/#get_matrixmediav3thumbnailservernamemediaid
 | ||||||
| 
 | 
 | ||||||
|  |     use http::header::CONTENT_TYPE; | ||||||
|     use js_int::UInt; |     use js_int::UInt; | ||||||
|     use ruma_common::{api::ruma_api, serde::StringEnum, IdParseError, MxcUri, ServerName}; |     use ruma_common::{api::ruma_api, serde::StringEnum, IdParseError, MxcUri, ServerName}; | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -5,6 +5,7 @@ pub mod v3 { | |||||||
|     //!
 |     //!
 | ||||||
|     //! [spec]: https://spec.matrix.org/v1.2/client-server-api/#get_matrixclientv3loginssoredirect
 |     //! [spec]: https://spec.matrix.org/v1.2/client-server-api/#get_matrixclientv3loginssoredirect
 | ||||||
| 
 | 
 | ||||||
|  |     use http::header::LOCATION; | ||||||
|     use ruma_common::api::ruma_api; |     use ruma_common::api::ruma_api; | ||||||
| 
 | 
 | ||||||
|     ruma_api! { |     ruma_api! { | ||||||
|  | |||||||
| @ -7,6 +7,7 @@ pub mod v3 { | |||||||
|     //!
 |     //!
 | ||||||
|     //! [spec]: https://spec.matrix.org/v1.2/client-server-api/#get_matrixclientv3loginssoredirectidpid
 |     //! [spec]: https://spec.matrix.org/v1.2/client-server-api/#get_matrixclientv3loginssoredirectidpid
 | ||||||
| 
 | 
 | ||||||
|  |     use http::header::LOCATION; | ||||||
|     use ruma_common::api::ruma_api; |     use ruma_common::api::ruma_api; | ||||||
| 
 | 
 | ||||||
|     ruma_api! { |     ruma_api! { | ||||||
|  | |||||||
| @ -5,6 +5,7 @@ pub mod v3 { | |||||||
|     //!
 |     //!
 | ||||||
|     //! [spec]: https://spec.matrix.org/v1.2/client-server-api/#fallback
 |     //! [spec]: https://spec.matrix.org/v1.2/client-server-api/#fallback
 | ||||||
| 
 | 
 | ||||||
|  |     use http::header::LOCATION; | ||||||
|     use ruma_common::api::ruma_api; |     use ruma_common::api::ruma_api; | ||||||
| 
 | 
 | ||||||
|     ruma_api! { |     ruma_api! { | ||||||
|  | |||||||
| @ -5,6 +5,7 @@ pub mod v3 { | |||||||
|     //!
 |     //!
 | ||||||
|     //! [spec]: https://spec.matrix.org/v1.2/client-server-api/#post_matrixclientv3user_directorysearch
 |     //! [spec]: https://spec.matrix.org/v1.2/client-server-api/#post_matrixclientv3user_directorysearch
 | ||||||
| 
 | 
 | ||||||
|  |     use http::header::ACCEPT_LANGUAGE; | ||||||
|     use js_int::{uint, UInt}; |     use js_int::{uint, UInt}; | ||||||
|     use ruma_common::{api::ruma_api, OwnedMxcUri, OwnedUserId}; |     use ruma_common::{api::ruma_api, OwnedMxcUri, OwnedUserId}; | ||||||
|     use serde::{Deserialize, Serialize}; |     use serde::{Deserialize, Serialize}; | ||||||
|  | |||||||
| @ -6,6 +6,10 @@ Breaking changes: | |||||||
| * Remove deprecated constructors for `RoomMessageEventContent` | * Remove deprecated constructors for `RoomMessageEventContent` | ||||||
| * Remove `serde::vec_as_map_of_empty` from the public API | * Remove `serde::vec_as_map_of_empty` from the public API | ||||||
| * Remove the `api::AuthScheme::QueryOnlyAccessToken` variant, which is no longer used | * Remove the `api::AuthScheme::QueryOnlyAccessToken` variant, which is no longer used | ||||||
|  | * The `#[ruma_api(header)]` attribute of the `ruma_api` macro now accepts an arbitrary | ||||||
|  |   `http::header::HeaderName` | ||||||
|  |   * To continue using constants from `http::header`, they must be imported in | ||||||
|  |     the module calling the macro. | ||||||
| 
 | 
 | ||||||
| Improvements: | Improvements: | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -78,8 +78,9 @@ use crate::UserId; | |||||||
| ///
 | ///
 | ||||||
| /// * `#[ruma_api(header = HEADER_NAME)]`: Fields with this attribute will be treated as HTTP
 | /// * `#[ruma_api(header = HEADER_NAME)]`: Fields with this attribute will be treated as HTTP
 | ||||||
| ///   headers on the request. The value must implement `AsRef<str>`. Generally this is a
 | ///   headers on the request. The value must implement `AsRef<str>`. Generally this is a
 | ||||||
| ///   `String`. The attribute value shown above as `HEADER_NAME` must be a header name constant
 | ///   `String`. The attribute value shown above as `HEADER_NAME` must be a `const` expression
 | ||||||
| ///   from `http::header`, e.g. `CONTENT_TYPE`.
 | ///   of the type `http::header::HeaderName`, like one of the constants from `http::header`,
 | ||||||
|  | ///   e.g. `CONTENT_TYPE`.
 | ||||||
| /// * `#[ruma_api(path)]`: Fields with this attribute will be inserted into the matching path
 | /// * `#[ruma_api(path)]`: Fields with this attribute will be inserted into the matching path
 | ||||||
| ///   component of the request URL.
 | ///   component of the request URL.
 | ||||||
| /// * `#[ruma_api(query)]`: Fields with this attribute will be inserting into the URL's query
 | /// * `#[ruma_api(query)]`: Fields with this attribute will be inserting into the URL's query
 | ||||||
| @ -123,6 +124,7 @@ use crate::UserId; | |||||||
| ///
 | ///
 | ||||||
| /// ```
 | /// ```
 | ||||||
| /// pub mod some_endpoint {
 | /// pub mod some_endpoint {
 | ||||||
|  | ///     use http::header::CONTENT_TYPE;
 | ||||||
| ///     use ruma_common::api::ruma_api;
 | ///     use ruma_common::api::ruma_api;
 | ||||||
| ///
 | ///
 | ||||||
| ///     ruma_api! {
 | ///     ruma_api! {
 | ||||||
|  | |||||||
| @ -1,5 +1,6 @@ | |||||||
| #![allow(clippy::exhaustive_structs)] | #![allow(clippy::exhaustive_structs)] | ||||||
| 
 | 
 | ||||||
|  | use http::header::CONTENT_TYPE; | ||||||
| use ruma_common::{ | use ruma_common::{ | ||||||
|     api::{ |     api::{ | ||||||
|         ruma_api, IncomingRequest as _, MatrixVersion, OutgoingRequest as _, |         ruma_api, IncomingRequest as _, MatrixVersion, OutgoingRequest as _, | ||||||
| @ -121,7 +122,7 @@ fn request_with_user_id_serde() { | |||||||
| mod without_query { | mod without_query { | ||||||
|     use ruma_common::{api::MatrixVersion, OwnedUserId}; |     use ruma_common::{api::MatrixVersion, OwnedUserId}; | ||||||
| 
 | 
 | ||||||
|     use super::{ruma_api, user_id, OutgoingRequestAppserviceExt, SendAccessToken}; |     use super::{ruma_api, user_id, OutgoingRequestAppserviceExt, SendAccessToken, CONTENT_TYPE}; | ||||||
| 
 | 
 | ||||||
|     ruma_api! { |     ruma_api! { | ||||||
|         metadata: { |         metadata: { | ||||||
|  | |||||||
| @ -1,6 +1,6 @@ | |||||||
| #![allow(clippy::exhaustive_structs)] | #![allow(clippy::exhaustive_structs)] | ||||||
| 
 | 
 | ||||||
| use http::header::{Entry, CONTENT_TYPE}; | use http::header::{Entry, CONTENT_TYPE, LOCATION}; | ||||||
| use ruma_common::api::{ | use ruma_common::api::{ | ||||||
|     ruma_api, MatrixVersion, OutgoingRequest as _, OutgoingResponse as _, SendAccessToken, |     ruma_api, MatrixVersion, OutgoingRequest as _, OutgoingResponse as _, SendAccessToken, | ||||||
| }; | }; | ||||||
|  | |||||||
| @ -1,3 +1,4 @@ | |||||||
|  | use http::header::LOCATION; | ||||||
| use ruma_common::api::ruma_api; | use ruma_common::api::ruma_api; | ||||||
| 
 | 
 | ||||||
| ruma_api! { | ruma_api! { | ||||||
|  | |||||||
| @ -58,6 +58,7 @@ mod nested_types { | |||||||
| } | } | ||||||
| 
 | 
 | ||||||
| mod full_request_response { | mod full_request_response { | ||||||
|  |     use http::header::CONTENT_TYPE; | ||||||
|     use ruma_common::api::ruma_api; |     use ruma_common::api::ruma_api; | ||||||
| 
 | 
 | ||||||
|     use super::{IncomingOtherThing, OtherThing}; |     use super::{IncomingOtherThing, OtherThing}; | ||||||
| @ -92,6 +93,7 @@ mod full_request_response { | |||||||
| } | } | ||||||
| 
 | 
 | ||||||
| mod full_request_response_with_query_map { | mod full_request_response_with_query_map { | ||||||
|  |     use http::header::CONTENT_TYPE; | ||||||
|     use ruma_common::api::ruma_api; |     use ruma_common::api::ruma_api; | ||||||
| 
 | 
 | ||||||
|     ruma_api! { |     ruma_api! { | ||||||
|  | |||||||
| @ -1,6 +1,7 @@ | |||||||
| #![allow(clippy::exhaustive_structs)] | #![allow(clippy::exhaustive_structs)] | ||||||
| 
 | 
 | ||||||
| pub mod some_endpoint { | pub mod some_endpoint { | ||||||
|  |     use http::header::CONTENT_TYPE; | ||||||
|     use ruma_common::{ |     use ruma_common::{ | ||||||
|         api::ruma_api, |         api::ruma_api, | ||||||
|         events::{tag::TagEvent, AnyTimelineEvent}, |         events::{tag::TagEvent, AnyTimelineEvent}, | ||||||
|  | |||||||
| @ -113,7 +113,7 @@ impl Request { | |||||||
| 
 | 
 | ||||||
|                     let decl = quote! { |                     let decl = quote! { | ||||||
|                         #( #cfg_attrs )* |                         #( #cfg_attrs )* | ||||||
|                         let #field_name = match headers.get(#http::header::#header_name) { |                         let #field_name = match headers.get(#header_name) { | ||||||
|                             Some(header_value) => { |                             Some(header_value) => { | ||||||
|                                 let str_value = header_value.to_str()?; |                                 let str_value = header_value.to_str()?; | ||||||
|                                 #some_case |                                 #some_case | ||||||
|  | |||||||
| @ -88,7 +88,7 @@ impl Request { | |||||||
|                     quote! { |                     quote! { | ||||||
|                         if let Some(header_val) = self.#field_name.as_ref() { |                         if let Some(header_val) = self.#field_name.as_ref() { | ||||||
|                             req_headers.insert( |                             req_headers.insert( | ||||||
|                                 #http::header::#header_name, |                                 #header_name, | ||||||
|                                 #http::header::HeaderValue::from_str(header_val)?, |                                 #http::header::HeaderValue::from_str(header_val)?, | ||||||
|                             ); |                             ); | ||||||
|                         } |                         } | ||||||
| @ -96,7 +96,7 @@ impl Request { | |||||||
|                 } |                 } | ||||||
|                 _ => quote! { |                 _ => quote! { | ||||||
|                     req_headers.insert( |                     req_headers.insert( | ||||||
|                         #http::header::#header_name, |                         #header_name, | ||||||
|                         #http::header::HeaderValue::from_str(self.#field_name.as_ref())?, |                         #http::header::HeaderValue::from_str(self.#field_name.as_ref())?, | ||||||
|                     ); |                     ); | ||||||
|                 }, |                 }, | ||||||
|  | |||||||
| @ -60,7 +60,7 @@ impl Response { | |||||||
|                                 quote! { |                                 quote! { | ||||||
|                                     #( #cfg_attrs )* |                                     #( #cfg_attrs )* | ||||||
|                                     #field_name: { |                                     #field_name: { | ||||||
|                                         headers.remove(#http::header::#header_name) |                                         headers.remove(#header_name) | ||||||
|                                             .map(|h| h.to_str().map(|s| s.to_owned())) |                                             .map(|h| h.to_str().map(|s| s.to_owned())) | ||||||
|                                             .transpose()? |                                             .transpose()? | ||||||
|                                     } |                                     } | ||||||
| @ -69,7 +69,7 @@ impl Response { | |||||||
|                             _ => quote! { |                             _ => quote! { | ||||||
|                                 #( #cfg_attrs )* |                                 #( #cfg_attrs )* | ||||||
|                                 #field_name: { |                                 #field_name: { | ||||||
|                                     headers.remove(#http::header::#header_name) |                                     headers.remove(#header_name) | ||||||
|                                         .expect("response missing expected header") |                                         .expect("response missing expected header") | ||||||
|                                         .to_str()? |                                         .to_str()? | ||||||
|                                         .to_owned() |                                         .to_owned() | ||||||
|  | |||||||
| @ -20,7 +20,7 @@ impl Response { | |||||||
|                         quote! { |                         quote! { | ||||||
|                             if let Some(header) = self.#field_name { |                             if let Some(header) = self.#field_name { | ||||||
|                                 headers.insert( |                                 headers.insert( | ||||||
|                                     #http::header::#header_name, |                                     #header_name, | ||||||
|                                     header.parse()?, |                                     header.parse()?, | ||||||
|                                 ); |                                 ); | ||||||
|                             } |                             } | ||||||
| @ -28,7 +28,7 @@ impl Response { | |||||||
|                     } |                     } | ||||||
|                     _ => quote! { |                     _ => quote! { | ||||||
|                         headers.insert( |                         headers.insert( | ||||||
|                             #http::header::#header_name, |                             #header_name, | ||||||
|                             self.#field_name.parse()?, |                             self.#field_name.parse()?, | ||||||
|                         ); |                         ); | ||||||
|                     }, |                     }, | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user