macro_rules! cfg_feature { ( #![$meta:meta] $($item:item)* ) => { $( #[cfg($meta)] #[cfg_attr(docsrs, doc(cfg($meta)))] $item )* } } macro_rules! cfg_proto { ($($item:item)*) => { cfg_feature! { #![all( any(feature = "http1", feature = "http2"), any(feature = "client", feature = "server"), )] $($item)* } } } cfg_proto! { macro_rules! cfg_client { ($($item:item)*) => { cfg_feature! { #![feature = "client"] $($item)* } } } macro_rules! cfg_server { ($($item:item)*) => { cfg_feature! { #![feature = "server"] $($item)* } } } }