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