diff --git a/crates/ruma-client-api/src/media/create_content.rs b/crates/ruma-client-api/src/media/create_content.rs index 4f984d23..b8314d08 100644 --- a/crates/ruma-client-api/src/media/create_content.rs +++ b/crates/ruma-client-api/src/media/create_content.rs @@ -5,6 +5,7 @@ pub mod v3 { //! //! [spec]: https://spec.matrix.org/v1.2/client-server-api/#post_matrixmediav3upload + use http::header::CONTENT_TYPE; use ruma_common::{api::ruma_api, OwnedMxcUri}; ruma_api! { diff --git a/crates/ruma-client-api/src/media/get_content.rs b/crates/ruma-client-api/src/media/get_content.rs index d5c2f20b..f1dab5f5 100644 --- a/crates/ruma-client-api/src/media/get_content.rs +++ b/crates/ruma-client-api/src/media/get_content.rs @@ -5,6 +5,7 @@ pub mod v3 { //! //! [spec]: https://spec.matrix.org/v1.2/client-server-api/#get_matrixmediav3downloadservernamemediaid + use http::header::{CONTENT_DISPOSITION, CONTENT_TYPE}; #[cfg(feature = "unstable-msc2246")] use js_int::UInt; use ruma_common::{api::ruma_api, IdParseError, MxcUri, ServerName}; diff --git a/crates/ruma-client-api/src/media/get_content_as_filename.rs b/crates/ruma-client-api/src/media/get_content_as_filename.rs index 12c81782..93011caa 100644 --- a/crates/ruma-client-api/src/media/get_content_as_filename.rs +++ b/crates/ruma-client-api/src/media/get_content_as_filename.rs @@ -5,6 +5,7 @@ pub mod v3 { //! //! [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}; ruma_api! { diff --git a/crates/ruma-client-api/src/media/get_content_thumbnail.rs b/crates/ruma-client-api/src/media/get_content_thumbnail.rs index f1819b57..b39545ec 100644 --- a/crates/ruma-client-api/src/media/get_content_thumbnail.rs +++ b/crates/ruma-client-api/src/media/get_content_thumbnail.rs @@ -5,6 +5,7 @@ pub mod v3 { //! //! [spec]: https://spec.matrix.org/v1.2/client-server-api/#get_matrixmediav3thumbnailservernamemediaid + use http::header::CONTENT_TYPE; use js_int::UInt; use ruma_common::{api::ruma_api, serde::StringEnum, IdParseError, MxcUri, ServerName}; diff --git a/crates/ruma-client-api/src/session/sso_login.rs b/crates/ruma-client-api/src/session/sso_login.rs index dff3492e..968f18bd 100644 --- a/crates/ruma-client-api/src/session/sso_login.rs +++ b/crates/ruma-client-api/src/session/sso_login.rs @@ -5,6 +5,7 @@ pub mod v3 { //! //! [spec]: https://spec.matrix.org/v1.2/client-server-api/#get_matrixclientv3loginssoredirect + use http::header::LOCATION; use ruma_common::api::ruma_api; ruma_api! { diff --git a/crates/ruma-client-api/src/session/sso_login_with_provider.rs b/crates/ruma-client-api/src/session/sso_login_with_provider.rs index ce25c006..4fb1509f 100644 --- a/crates/ruma-client-api/src/session/sso_login_with_provider.rs +++ b/crates/ruma-client-api/src/session/sso_login_with_provider.rs @@ -7,6 +7,7 @@ pub mod v3 { //! //! [spec]: https://spec.matrix.org/v1.2/client-server-api/#get_matrixclientv3loginssoredirectidpid + use http::header::LOCATION; use ruma_common::api::ruma_api; ruma_api! { diff --git a/crates/ruma-client-api/src/uiaa/get_uiaa_fallback_page.rs b/crates/ruma-client-api/src/uiaa/get_uiaa_fallback_page.rs index d56343a2..95636d3a 100644 --- a/crates/ruma-client-api/src/uiaa/get_uiaa_fallback_page.rs +++ b/crates/ruma-client-api/src/uiaa/get_uiaa_fallback_page.rs @@ -5,6 +5,7 @@ pub mod v3 { //! //! [spec]: https://spec.matrix.org/v1.2/client-server-api/#fallback + use http::header::LOCATION; use ruma_common::api::ruma_api; ruma_api! { diff --git a/crates/ruma-client-api/src/user_directory/search_users.rs b/crates/ruma-client-api/src/user_directory/search_users.rs index afcaf61f..92f14579 100644 --- a/crates/ruma-client-api/src/user_directory/search_users.rs +++ b/crates/ruma-client-api/src/user_directory/search_users.rs @@ -5,6 +5,7 @@ pub mod v3 { //! //! [spec]: https://spec.matrix.org/v1.2/client-server-api/#post_matrixclientv3user_directorysearch + use http::header::ACCEPT_LANGUAGE; use js_int::{uint, UInt}; use ruma_common::{api::ruma_api, OwnedMxcUri, OwnedUserId}; use serde::{Deserialize, Serialize}; diff --git a/crates/ruma-common/CHANGELOG.md b/crates/ruma-common/CHANGELOG.md index 65f05b59..7d8c83f6 100644 --- a/crates/ruma-common/CHANGELOG.md +++ b/crates/ruma-common/CHANGELOG.md @@ -6,6 +6,10 @@ Breaking changes: * Remove deprecated constructors for `RoomMessageEventContent` * Remove `serde::vec_as_map_of_empty` from the public API * 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: diff --git a/crates/ruma-common/src/api.rs b/crates/ruma-common/src/api.rs index bc7f9084..c04e8fe7 100644 --- a/crates/ruma-common/src/api.rs +++ b/crates/ruma-common/src/api.rs @@ -78,8 +78,9 @@ use crate::UserId; /// /// * `#[ruma_api(header = HEADER_NAME)]`: Fields with this attribute will be treated as HTTP /// headers on the request. The value must implement `AsRef`. Generally this is a -/// `String`. The attribute value shown above as `HEADER_NAME` must be a header name constant -/// from `http::header`, e.g. `CONTENT_TYPE`. +/// `String`. The attribute value shown above as `HEADER_NAME` must be a `const` expression +/// 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 /// component of the request URL. /// * `#[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 { +/// use http::header::CONTENT_TYPE; /// use ruma_common::api::ruma_api; /// /// ruma_api! { diff --git a/crates/ruma-common/tests/api/conversions.rs b/crates/ruma-common/tests/api/conversions.rs index d86ec7bc..eba71b40 100644 --- a/crates/ruma-common/tests/api/conversions.rs +++ b/crates/ruma-common/tests/api/conversions.rs @@ -1,5 +1,6 @@ #![allow(clippy::exhaustive_structs)] +use http::header::CONTENT_TYPE; use ruma_common::{ api::{ ruma_api, IncomingRequest as _, MatrixVersion, OutgoingRequest as _, @@ -121,7 +122,7 @@ fn request_with_user_id_serde() { mod without_query { 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! { metadata: { diff --git a/crates/ruma-common/tests/api/header_override.rs b/crates/ruma-common/tests/api/header_override.rs index f3dc0d28..f80a6f33 100644 --- a/crates/ruma-common/tests/api/header_override.rs +++ b/crates/ruma-common/tests/api/header_override.rs @@ -1,6 +1,6 @@ #![allow(clippy::exhaustive_structs)] -use http::header::{Entry, CONTENT_TYPE}; +use http::header::{Entry, CONTENT_TYPE, LOCATION}; use ruma_common::api::{ ruma_api, MatrixVersion, OutgoingRequest as _, OutgoingResponse as _, SendAccessToken, }; diff --git a/crates/ruma-common/tests/api/optional_headers.rs b/crates/ruma-common/tests/api/optional_headers.rs index 28e1cea8..d94193b8 100644 --- a/crates/ruma-common/tests/api/optional_headers.rs +++ b/crates/ruma-common/tests/api/optional_headers.rs @@ -1,3 +1,4 @@ +use http::header::LOCATION; use ruma_common::api::ruma_api; ruma_api! { diff --git a/crates/ruma-common/tests/api/ruma_api_lifetime.rs b/crates/ruma-common/tests/api/ruma_api_lifetime.rs index ba570382..990d442b 100644 --- a/crates/ruma-common/tests/api/ruma_api_lifetime.rs +++ b/crates/ruma-common/tests/api/ruma_api_lifetime.rs @@ -58,6 +58,7 @@ mod nested_types { } mod full_request_response { + use http::header::CONTENT_TYPE; use ruma_common::api::ruma_api; use super::{IncomingOtherThing, OtherThing}; @@ -92,6 +93,7 @@ mod full_request_response { } mod full_request_response_with_query_map { + use http::header::CONTENT_TYPE; use ruma_common::api::ruma_api; ruma_api! { diff --git a/crates/ruma-common/tests/api/ruma_api_macros.rs b/crates/ruma-common/tests/api/ruma_api_macros.rs index 441017e8..ce577bf4 100644 --- a/crates/ruma-common/tests/api/ruma_api_macros.rs +++ b/crates/ruma-common/tests/api/ruma_api_macros.rs @@ -1,6 +1,7 @@ #![allow(clippy::exhaustive_structs)] pub mod some_endpoint { + use http::header::CONTENT_TYPE; use ruma_common::{ api::ruma_api, events::{tag::TagEvent, AnyTimelineEvent}, diff --git a/crates/ruma-macros/src/api/request/incoming.rs b/crates/ruma-macros/src/api/request/incoming.rs index 5c406bdf..71a56c8d 100644 --- a/crates/ruma-macros/src/api/request/incoming.rs +++ b/crates/ruma-macros/src/api/request/incoming.rs @@ -113,7 +113,7 @@ impl Request { let decl = quote! { #( #cfg_attrs )* - let #field_name = match headers.get(#http::header::#header_name) { + let #field_name = match headers.get(#header_name) { Some(header_value) => { let str_value = header_value.to_str()?; #some_case diff --git a/crates/ruma-macros/src/api/request/outgoing.rs b/crates/ruma-macros/src/api/request/outgoing.rs index 138017c2..6b89c2f2 100644 --- a/crates/ruma-macros/src/api/request/outgoing.rs +++ b/crates/ruma-macros/src/api/request/outgoing.rs @@ -88,7 +88,7 @@ impl Request { quote! { if let Some(header_val) = self.#field_name.as_ref() { req_headers.insert( - #http::header::#header_name, + #header_name, #http::header::HeaderValue::from_str(header_val)?, ); } @@ -96,7 +96,7 @@ impl Request { } _ => quote! { req_headers.insert( - #http::header::#header_name, + #header_name, #http::header::HeaderValue::from_str(self.#field_name.as_ref())?, ); }, diff --git a/crates/ruma-macros/src/api/response/incoming.rs b/crates/ruma-macros/src/api/response/incoming.rs index 4641ea6b..59260c53 100644 --- a/crates/ruma-macros/src/api/response/incoming.rs +++ b/crates/ruma-macros/src/api/response/incoming.rs @@ -60,7 +60,7 @@ impl Response { quote! { #( #cfg_attrs )* #field_name: { - headers.remove(#http::header::#header_name) + headers.remove(#header_name) .map(|h| h.to_str().map(|s| s.to_owned())) .transpose()? } @@ -69,7 +69,7 @@ impl Response { _ => quote! { #( #cfg_attrs )* #field_name: { - headers.remove(#http::header::#header_name) + headers.remove(#header_name) .expect("response missing expected header") .to_str()? .to_owned() diff --git a/crates/ruma-macros/src/api/response/outgoing.rs b/crates/ruma-macros/src/api/response/outgoing.rs index 5ddb3d26..4ce9bb62 100644 --- a/crates/ruma-macros/src/api/response/outgoing.rs +++ b/crates/ruma-macros/src/api/response/outgoing.rs @@ -20,7 +20,7 @@ impl Response { quote! { if let Some(header) = self.#field_name { headers.insert( - #http::header::#header_name, + #header_name, header.parse()?, ); } @@ -28,7 +28,7 @@ impl Response { } _ => quote! { headers.insert( - #http::header::#header_name, + #header_name, self.#field_name.parse()?, ); },