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:
parent
a4a14aa9dc
commit
a6e23d731e
@ -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],
|
||||
|
@ -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,
|
||||
));
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user