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