// SPDX-License-Identifier: GPL-2.0 use proc_macro2::TokenStream; use quote::ToTokens; use syn::{ parse::{ Parse, ParseStream, // }, Attribute, Error, LitStr, Result, // }; /// A string literal that is required to have ASCII value only. pub(crate) struct AsciiLitStr(LitStr); impl Parse for AsciiLitStr { fn parse(input: ParseStream<'_>) -> Result { let s: LitStr = input.parse()?; if !s.value().is_ascii() { return Err(Error::new_spanned(s, "expected ASCII-only string literal")); } Ok(Self(s)) } } impl ToTokens for AsciiLitStr { fn to_tokens(&self, ts: &mut TokenStream) { self.0.to_tokens(ts); } } impl AsciiLitStr { pub(crate) fn value(&self) -> String { self.0.value() } } /// Obtain all `#[cfg]` attributes. pub(crate) fn gather_cfg_attrs(attr: &[Attribute]) -> impl Iterator + '_ { attr.iter().filter(|a| a.path().is_ident("cfg")) }