api: Slighty reduce the amount of macro-generated code

By moving format(_args)! usage into a regular fn and calling that from
the proc-macro-generated code.
This commit is contained in:
Jonas Platte 2022-09-29 11:59:56 +02:00 committed by Jonas Platte
parent a4a14aa9dc
commit a6e23d731e
2 changed files with 29 additions and 12 deletions

View File

@ -399,9 +399,23 @@ pub enum AuthScheme {
QueryOnlyAccessToken,
}
// This function needs to be public, yet hidden, as it is used the code generated by `ruma_api!`.
#[doc(hidden)]
pub fn make_endpoint_url(
base_url: &str,
path: fmt::Arguments<'_>,
query_string: Option<&str>,
) -> String {
let base = base_url.strip_suffix('/').unwrap_or(base_url);
match query_string {
Some(query) => format!("{base}{path}?{query}"),
None => format!("{base}{path}"),
}
}
// This function helps picks the right path (or an error) from a set of matrix versions.
//
// This function needs to be public, yet hidden, as all `try_into_http_request`s would be using it.
// This function needs to be public, yet hidden, as it is used the code generated by `ruma_api!`.
#[doc(hidden)]
pub fn select_path<'a>(
versions: &'_ [MatrixVersion],

View File

@ -60,9 +60,8 @@ impl Request {
let request_query = RequestQuery(self.#field_name);
assert_trait_impl(&request_query.0);
format_args!(
"?{}",
#ruma_common::serde::urlencoded::to_string(request_query)?
::std::option::Option::Some(
&#ruma_common::serde::urlencoded::to_string(request_query)?
)
}}
} else if self.has_query_fields() {
@ -76,13 +75,12 @@ impl Request {
#request_query_init_fields
};
format_args!(
"?{}",
#ruma_common::serde::urlencoded::to_string(request_query)?
::std::option::Option::Some(
&#ruma_common::serde::urlencoded::to_string(request_query)?
)
}}
} else {
quote! { "" }
quote! { ::std::option::Option::None }
};
// If there are no body fields, the request body will be empty (not `{}`), so the
@ -195,10 +193,15 @@ impl Request {
let mut req_builder = #http::Request::builder()
.method(#http::Method::#method)
.uri(::std::format!(
"{}{}{}",
base_url.strip_suffix('/').unwrap_or(base_url),
#ruma_common::api::select_path(considering_versions, &metadata, #unstable_path, #r0_path, #stable_path)?,
.uri(#ruma_common::api::make_endpoint_url(
base_url,
#ruma_common::api::select_path(
considering_versions,
&metadata,
#unstable_path,
#r0_path,
#stable_path,
)?,
#request_query_string,
));