From 7a5be040fd57496d2d8e673f50e7061ef555667a Mon Sep 17 00:00:00 2001 From: Jonas Platte Date: Thu, 24 Mar 2022 18:08:21 +0100 Subject: [PATCH] macros: Reduce codegen by feature-gating Serialize and Deserialize derives MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit … this makes it faster to compiler ruma-*-api with either the client or server feature inactive. --- crates/ruma-macros/src/api/request.rs | 22 ++++++++++------------ crates/ruma-macros/src/api/response.rs | 13 ++++++------- 2 files changed, 16 insertions(+), 19 deletions(-) diff --git a/crates/ruma-macros/src/api/request.rs b/crates/ruma-macros/src/api/request.rs index 98490ebb..49f9fad1 100644 --- a/crates/ruma-macros/src/api/request.rs +++ b/crates/ruma-macros/src/api/request.rs @@ -214,13 +214,12 @@ impl Request { quote! { /// Data in the request body. - #[derive( - Debug, - #ruma_macros::_FakeDeriveRumaApi, - #serde::Serialize, - #derive_deserialize + #[derive(Debug, #ruma_macros::_FakeDeriveRumaApi)] + #[cfg_attr(feature = "client", derive(#serde::Serialize))] + #[cfg_attr( + feature = "server", + derive(#ruma_common::serde::Incoming, #derive_deserialize) )] - #[cfg_attr(feature = "server", derive(#ruma_common::serde::Incoming))] #serde_attr struct RequestBody< #(#lifetimes),* > { #(#fields),* } } @@ -242,13 +241,12 @@ impl Request { quote! { /// Data in the request's query string. - #[derive( - Debug, - #ruma_macros::_FakeDeriveRumaApi, - #serde::Serialize, - #derive_deserialize + #[derive(Debug, #ruma_macros::_FakeDeriveRumaApi)] + #[cfg_attr(feature = "client", derive(#serde::Serialize))] + #[cfg_attr( + feature = "server", + derive(#ruma_common::serde::Incoming, #derive_deserialize) )] - #[cfg_attr(feature = "server", derive(#ruma_common::serde::Incoming))] struct RequestQuery< #(#lifetimes),* > #def } }); diff --git a/crates/ruma-macros/src/api/response.rs b/crates/ruma-macros/src/api/response.rs index cbccaa0f..83edc894 100644 --- a/crates/ruma-macros/src/api/response.rs +++ b/crates/ruma-macros/src/api/response.rs @@ -99,7 +99,10 @@ impl Response { let response_body_struct = (!self.has_raw_body()).then(|| { let serde_derives = self.manual_body_serde.not().then(|| { - quote! { #serde::Deserialize, #serde::Serialize } + quote! { + #[cfg_attr(feature = "client", derive(#serde::Deserialize))] + #[cfg_attr(feature = "server", derive(#serde::Serialize))] + } }); let serde_attr = self.has_newtype_body().then(|| quote! { #[serde(transparent)] }); @@ -107,12 +110,8 @@ impl Response { quote! { /// Data in the response body. - #[derive( - Debug, - #ruma_macros::_FakeDeriveRumaApi, - #ruma_common::serde::Incoming, - #serde_derives - )] + #[derive(Debug, #ruma_macros::_FakeDeriveRumaApi)] + #serde_derives #serde_attr struct ResponseBody { #(#fields),* } }