macros: Use import_ruma_common instead of import_ruma_api

This commit is contained in:
Kévin Commaille 2022-03-10 11:00:27 +01:00 committed by GitHub
parent 1bce0f0c96
commit bdd54d1dd3
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
11 changed files with 76 additions and 101 deletions

View File

@ -193,19 +193,6 @@ use crate::UserId;
pub use ruma_macros::ruma_api;
pub mod error;
/// This module is used to support the generated code from ruma-macros.
/// It is not considered part of ruma-common's public API.
#[doc(hidden)]
pub mod exports {
pub use bytes;
pub use http;
pub use percent_encoding;
pub use ruma_macros;
pub use ruma_serde;
pub use serde;
pub use serde_json;
}
mod metadata;
pub use metadata::{MatrixVersion, Metadata};

View File

@ -60,6 +60,12 @@ impl fmt::Debug for PrivOwnedStr {
/// It is not considered part of this module's public API.
#[doc(hidden)]
pub mod exports {
#[cfg(feature = "api")]
pub use bytes;
#[cfg(feature = "api")]
pub use http;
pub use percent_encoding;
pub use ruma_macros;
pub use ruma_serde;
pub use serde;
pub use serde_json;

View File

@ -9,6 +9,7 @@ use syn::{
};
use self::{api_metadata::Metadata, api_request::Request, api_response::Response};
use crate::util::import_ruma_common;
mod api_metadata;
mod api_request;
@ -45,8 +46,8 @@ pub struct Api {
impl Api {
pub fn expand_all(self) -> TokenStream {
let ruma_api = util::import_ruma_api();
let http = quote! { #ruma_api::exports::http };
let ruma_common = import_ruma_common();
let http = quote! { #ruma_common::exports::http };
let metadata = &self.metadata;
let description = &metadata.description;
@ -61,18 +62,19 @@ impl Api {
let deprecated = util::map_option_literal(&metadata.deprecated);
let removed = util::map_option_literal(&metadata.removed);
let error_ty = self
.error_ty
.map_or_else(|| quote! { #ruma_api::error::MatrixError }, |err_ty| quote! { #err_ty });
let error_ty = self.error_ty.map_or_else(
|| quote! { #ruma_common::api::error::MatrixError },
|err_ty| quote! { #err_ty },
);
let request = self.request.map(|req| req.expand(metadata, &error_ty, &ruma_api));
let response = self.response.map(|res| res.expand(metadata, &error_ty, &ruma_api));
let request = self.request.map(|req| req.expand(metadata, &error_ty, &ruma_common));
let response = self.response.map(|res| res.expand(metadata, &error_ty, &ruma_common));
let metadata_doc = format!("Metadata for the `{}` API endpoint.", name.value());
quote! {
#[doc = #metadata_doc]
pub const METADATA: #ruma_api::Metadata = #ruma_api::Metadata {
pub const METADATA: #ruma_common::api::Metadata = #ruma_common::api::Metadata {
description: #description,
method: #http::Method::#method,
name: #name,
@ -83,7 +85,7 @@ impl Api {
deprecated: #deprecated,
removed: #removed,
rate_limited: #rate_limited,
authentication: #ruma_api::AuthScheme::#authentication,
authentication: #ruma_common::api::AuthScheme::#authentication,
};
#request

View File

@ -71,10 +71,10 @@ impl Request {
&self,
metadata: &Metadata,
error_ty: &TokenStream,
ruma_api: &TokenStream,
ruma_common: &TokenStream,
) -> TokenStream {
let ruma_macros = quote! { #ruma_api::exports::ruma_macros };
let ruma_serde = quote! { #ruma_api::exports::ruma_serde };
let ruma_macros = quote! { #ruma_common::exports::ruma_macros };
let ruma_serde = quote! { #ruma_common::exports::ruma_serde };
let docs = format!(
"Data for a request to the `{}` API endpoint.\n\n{}",

View File

@ -16,8 +16,9 @@ use syn::{
use super::{
attribute::{Meta, MetaNameValue, MetaValue},
auth_scheme::AuthScheme,
util::{collect_lifetime_idents, import_ruma_api},
util::collect_lifetime_idents,
};
use crate::util::import_ruma_common;
mod incoming;
mod outgoing;
@ -196,10 +197,10 @@ impl Request {
}
fn expand_all(&self) -> TokenStream {
let ruma_api = import_ruma_api();
let ruma_macros = quote! { #ruma_api::exports::ruma_macros };
let ruma_serde = quote! { #ruma_api::exports::ruma_serde };
let serde = quote! { #ruma_api::exports::serde };
let ruma_common = import_ruma_common();
let ruma_macros = quote! { #ruma_common::exports::ruma_macros };
let ruma_serde = quote! { #ruma_common::exports::ruma_serde };
let serde = quote! { #ruma_common::exports::serde };
let request_body_struct = self.has_body_fields().then(|| {
let serde_attr = self.has_newtype_body().then(|| quote! { #[serde(transparent)] });
@ -253,8 +254,8 @@ impl Request {
}
});
let outgoing_request_impl = self.expand_outgoing(&ruma_api);
let incoming_request_impl = self.expand_incoming(&ruma_api);
let outgoing_request_impl = self.expand_outgoing(&ruma_common);
let incoming_request_impl = self.expand_incoming(&ruma_common);
quote! {
#request_body_struct

View File

@ -6,11 +6,11 @@ use super::{Request, RequestField};
use crate::api::auth_scheme::AuthScheme;
impl Request {
pub fn expand_incoming(&self, ruma_api: &TokenStream) -> TokenStream {
let http = quote! { #ruma_api::exports::http };
let ruma_serde = quote! { #ruma_api::exports::ruma_serde };
let serde = quote! { #ruma_api::exports::serde };
let serde_json = quote! { #ruma_api::exports::serde_json };
pub fn expand_incoming(&self, ruma_common: &TokenStream) -> TokenStream {
let http = quote! { #ruma_common::exports::http };
let ruma_serde = quote! { #ruma_common::exports::ruma_serde };
let serde = quote! { #ruma_common::exports::serde };
let serde_json = quote! { #ruma_common::exports::serde_json };
let method = &self.method;
let error_ty = &self.error_ty;
@ -104,7 +104,7 @@ impl Request {
quote! { str_value.to_owned() },
quote! {
return Err(
#ruma_api::error::HeaderDeserializationError::MissingHeader(
#ruma_common::api::error::HeaderDeserializationError::MissingHeader(
#header_name_string.into()
).into(),
)
@ -187,29 +187,29 @@ impl Request {
quote! {
#[automatically_derived]
#[cfg(feature = "server")]
impl #ruma_api::IncomingNonAuthRequest for #incoming_request_type {}
impl #ruma_common::api::IncomingNonAuthRequest for #incoming_request_type {}
}
});
quote! {
#[automatically_derived]
#[cfg(feature = "server")]
impl #ruma_api::IncomingRequest for #incoming_request_type {
impl #ruma_common::api::IncomingRequest for #incoming_request_type {
type EndpointError = #error_ty;
type OutgoingResponse = Response;
const METADATA: #ruma_api::Metadata = self::METADATA;
const METADATA: #ruma_common::api::Metadata = self::METADATA;
fn try_from_http_request<B, S>(
request: #http::Request<B>,
path_args: &[S],
) -> ::std::result::Result<Self, #ruma_api::error::FromHttpRequestError>
) -> ::std::result::Result<Self, #ruma_common::api::error::FromHttpRequestError>
where
B: ::std::convert::AsRef<[::std::primitive::u8]>,
S: ::std::convert::AsRef<::std::primitive::str>,
{
if request.method() != #http::Method::#method {
return Err(#ruma_api::error::FromHttpRequestError::MethodMismatch {
return Err(#ruma_common::api::error::FromHttpRequestError::MethodMismatch {
expected: #http::Method::#method,
received: request.method().clone(),
});

View File

@ -6,11 +6,11 @@ use super::{Request, RequestField};
use crate::api::{auth_scheme::AuthScheme, util};
impl Request {
pub fn expand_outgoing(&self, ruma_api: &TokenStream) -> TokenStream {
let bytes = quote! { #ruma_api::exports::bytes };
let http = quote! { #ruma_api::exports::http };
let percent_encoding = quote! { #ruma_api::exports::percent_encoding };
let ruma_serde = quote! { #ruma_api::exports::ruma_serde };
pub fn expand_outgoing(&self, ruma_common: &TokenStream) -> TokenStream {
let bytes = quote! { #ruma_common::exports::bytes };
let http = quote! { #ruma_common::exports::http };
let percent_encoding = quote! { #ruma_common::exports::percent_encoding };
let ruma_serde = quote! { #ruma_common::exports::ruma_serde };
let method = &self.method;
let error_ty = &self.error_ty;
@ -139,7 +139,7 @@ impl Request {
"Bearer {}",
access_token
.get_required_for_endpoint()
.ok_or(#ruma_api::error::IntoHttpError::NeedsAuthentication)?,
.ok_or(#ruma_common::api::error::IntoHttpError::NeedsAuthentication)?,
))?,
);
},
@ -177,7 +177,7 @@ impl Request {
quote! {
#[automatically_derived]
#[cfg(feature = "client")]
impl #impl_generics #ruma_api::OutgoingNonAuthRequest
impl #impl_generics #ruma_common::api::OutgoingNonAuthRequest
for Request #ty_generics #where_clause {}
}
});
@ -185,18 +185,18 @@ impl Request {
quote! {
#[automatically_derived]
#[cfg(feature = "client")]
impl #impl_generics #ruma_api::OutgoingRequest for Request #ty_generics #where_clause {
impl #impl_generics #ruma_common::api::OutgoingRequest for Request #ty_generics #where_clause {
type EndpointError = #error_ty;
type IncomingResponse = <Response as #ruma_serde::Outgoing>::Incoming;
const METADATA: #ruma_api::Metadata = self::METADATA;
const METADATA: #ruma_common::api::Metadata = self::METADATA;
fn try_into_http_request<T: ::std::default::Default + #bytes::BufMut>(
self,
base_url: &::std::primitive::str,
access_token: #ruma_api::SendAccessToken<'_>,
considering_versions: &'_ [#ruma_api::MatrixVersion],
) -> ::std::result::Result<#http::Request<T>, #ruma_api::error::IntoHttpError> {
access_token: #ruma_common::api::SendAccessToken<'_>,
considering_versions: &'_ [#ruma_common::api::MatrixVersion],
) -> ::std::result::Result<#http::Request<T>, #ruma_common::api::error::IntoHttpError> {
let metadata = self::METADATA;
let mut req_builder = #http::Request::builder()
@ -204,7 +204,7 @@ impl Request {
.uri(::std::format!(
"{}{}{}",
base_url.strip_suffix('/').unwrap_or(base_url),
#ruma_api::select_path(considering_versions, &metadata, #unstable_path, #r0_path, #stable_path)?,
#ruma_common::api::select_path(considering_versions, &metadata, #unstable_path, #r0_path, #stable_path)?,
#request_query_string,
));

View File

@ -13,10 +13,8 @@ use syn::{
DeriveInput, Field, Generics, Ident, Lifetime, Token, Type,
};
use super::{
attribute::{Meta, MetaNameValue},
util,
};
use super::attribute::{Meta, MetaNameValue};
use crate::util::import_ruma_common;
mod incoming;
mod outgoing;
@ -95,10 +93,10 @@ impl Response {
}
fn expand_all(&self) -> TokenStream {
let ruma_api = util::import_ruma_api();
let ruma_macros = quote! { #ruma_api::exports::ruma_macros };
let ruma_serde = quote! { #ruma_api::exports::ruma_serde };
let serde = quote! { #ruma_api::exports::serde };
let ruma_common = import_ruma_common();
let ruma_macros = quote! { #ruma_common::exports::ruma_macros };
let ruma_serde = quote! { #ruma_common::exports::ruma_serde };
let serde = quote! { #ruma_common::exports::serde };
let response_body_struct = (!self.has_raw_body()).then(|| {
let serde_derives = self.manual_body_serde.not().then(|| {
@ -121,8 +119,8 @@ impl Response {
}
});
let outgoing_response_impl = self.expand_outgoing(&ruma_api);
let incoming_response_impl = self.expand_incoming(&self.error_ty, &ruma_api);
let outgoing_response_impl = self.expand_outgoing(&ruma_common);
let incoming_response_impl = self.expand_incoming(&self.error_ty, &ruma_common);
quote! {
#response_body_struct

View File

@ -5,10 +5,10 @@ use syn::Type;
use super::{Response, ResponseField};
impl Response {
pub fn expand_incoming(&self, error_ty: &Type, ruma_api: &TokenStream) -> TokenStream {
let http = quote! { #ruma_api::exports::http };
let ruma_serde = quote! { #ruma_api::exports::ruma_serde };
let serde_json = quote! { #ruma_api::exports::serde_json };
pub fn expand_incoming(&self, error_ty: &Type, ruma_common: &TokenStream) -> TokenStream {
let http = quote! { #ruma_common::exports::http };
let ruma_serde = quote! { #ruma_common::exports::ruma_serde };
let serde_json = quote! { #ruma_common::exports::serde_json };
let extract_response_headers = self.has_header_fields().then(|| {
quote! {
@ -111,14 +111,14 @@ impl Response {
quote! {
#[automatically_derived]
#[cfg(feature = "client")]
impl #ruma_api::IncomingResponse for Response {
impl #ruma_common::api::IncomingResponse for Response {
type EndpointError = #error_ty;
fn try_from_http_response<T: ::std::convert::AsRef<[::std::primitive::u8]>>(
response: #http::Response<T>,
) -> ::std::result::Result<
Self,
#ruma_api::error::FromHttpResponseError<#error_ty>,
#ruma_common::api::error::FromHttpResponseError<#error_ty>,
> {
if response.status().as_u16() < 400 {
#extract_response_headers
@ -128,14 +128,14 @@ impl Response {
#response_init_fields
})
} else {
match <#error_ty as #ruma_api::EndpointError>::try_from_http_response(
match <#error_ty as #ruma_common::api::EndpointError>::try_from_http_response(
response
) {
::std::result::Result::Ok(err) => {
Err(#ruma_api::error::ServerError::Known(err).into())
Err(#ruma_common::api::error::ServerError::Known(err).into())
}
::std::result::Result::Err(response_err) => {
Err(#ruma_api::error::ServerError::Unknown(response_err).into())
Err(#ruma_common::api::error::ServerError::Unknown(response_err).into())
}
}
}

View File

@ -4,10 +4,10 @@ use quote::quote;
use super::{Response, ResponseField};
impl Response {
pub fn expand_outgoing(&self, ruma_api: &TokenStream) -> TokenStream {
let bytes = quote! { #ruma_api::exports::bytes };
let http = quote! { #ruma_api::exports::http };
let ruma_serde = quote! { #ruma_api::exports::ruma_serde };
pub fn expand_outgoing(&self, ruma_common: &TokenStream) -> TokenStream {
let bytes = quote! { #ruma_common::exports::bytes };
let http = quote! { #ruma_common::exports::http };
let ruma_serde = quote! { #ruma_common::exports::ruma_serde };
let serialize_response_headers = self.fields.iter().filter_map(|response_field| {
response_field.as_header_field().map(|(field, header_name)| {
@ -64,10 +64,10 @@ impl Response {
quote! {
#[automatically_derived]
#[cfg(feature = "server")]
impl #ruma_api::OutgoingResponse for Response {
impl #ruma_common::api::OutgoingResponse for Response {
fn try_into_http_response<T: ::std::default::Default + #bytes::BufMut>(
self,
) -> ::std::result::Result<#http::Response<T>, #ruma_api::error::IntoHttpError> {
) -> ::std::result::Result<#http::Response<T>, #ruma_common::api::error::IntoHttpError> {
let mut resp_builder = #http::Response::builder()
.header(#http::header::CONTENT_TYPE, "application/json");

View File

@ -3,28 +3,9 @@
use std::collections::BTreeSet;
use proc_macro2::{Ident, Span, TokenStream};
use proc_macro_crate::{crate_name, FoundCrate};
use quote::{format_ident, quote, ToTokens};
use quote::{quote, ToTokens};
use syn::{parse_quote, visit::Visit, Attribute, Lifetime, NestedMeta, Type};
pub fn import_ruma_api() -> TokenStream {
if let Ok(FoundCrate::Name(name)) = crate_name("ruma-common") {
let import = format_ident!("{}", name);
quote! { ::#import::api }
} else if let Ok(FoundCrate::Name(name)) = crate_name("ruma") {
let import = format_ident!("{}", name);
quote! { ::#import::api }
} else if let Ok(FoundCrate::Name(name)) = crate_name("matrix-sdk") {
let import = format_ident!("{}", name);
quote! { ::#import::ruma::api }
} else if let Ok(FoundCrate::Name(name)) = crate_name("matrix-sdk-appservice") {
let import = format_ident!("{}", name);
quote! { ::#import::ruma::api }
} else {
quote! { ::ruma_common::api }
}
}
pub fn map_option_literal<T: ToTokens>(ver: &Option<T>) -> TokenStream {
match ver {
Some(v) => quote! { ::std::option::Option::Some(#v) },