Documentation
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)*
          }
      }
  }
}