gravel_ffi_macros/
util.rs1use proc_macro::TokenStream as TokenStream1;
2use quote::ToTokens;
3use syn::{Error, LitStr, parse::Parse};
4
5pub fn wrap_syn<P, R>(input: TokenStream1, f: impl FnOnce(P) -> Result<R, Error>) -> TokenStream1
6where
7 P: Parse,
8 R: ToTokens,
9{
10 syn::parse::<P>(input)
11 .and_then(f)
12 .map(ToTokens::into_token_stream)
13 .unwrap_or_else(|e| e.to_compile_error())
14 .into()
15}
16
17pub fn get_name(attr: TokenStream1) -> Result<String, Error> {
18 let lit = syn::parse::<LitStr>(attr)?;
19 let name = lit.value();
20
21 if name.is_empty() {
22 return Err(Error::new_spanned(lit.token(), "plugin name must not be empty"));
23 }
24
25 Ok(name)
26}