• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 use proc_macro2::TokenStream;
2 use quote::quote;
3 use syn_codegen::Features;
4 
features<'a>( features: &Features, overriding_cfg: impl Into<Option<&'a str>>, ) -> TokenStream5 pub fn features<'a>(
6     features: &Features,
7     overriding_cfg: impl Into<Option<&'a str>>,
8 ) -> TokenStream {
9     let features = &features.any;
10     let cfg = match features.len() {
11         0 => None,
12         1 => Some(quote! { cfg(feature = #(#features)*) }),
13         _ => Some(quote! { cfg(any(#(feature = #features),*)) }),
14     };
15     match (cfg, overriding_cfg.into()) {
16         (Some(cfg), Some(overriding_cfg)) => quote! {
17             #[#cfg]
18             #[cfg_attr(doc_cfg, doc(cfg(feature = #overriding_cfg)))]
19         },
20         (Some(cfg), None) => quote! {
21             #[#cfg]
22             #[cfg_attr(doc_cfg, doc(#cfg))]
23         },
24         (None, Some(overriding_cfg)) => quote! {
25             #[cfg_attr(doc_cfg, doc(cfg(feature = #overriding_cfg)))]
26         },
27         (None, None) => TokenStream::new(),
28     }
29 }
30