gravel_ffi_macros/
util.rs

1use 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}