use proc_macro2::TokenStream;
use quote::{ToTokens, quote};
pub fn quote_one<T, F>(t: &T, transform: F) -> TokenStream
where
F: FnOnce(&T) -> TokenStream,
{
let transformed = transform(t);
quote!(#transformed)
}
pub fn quote_option<T, F>(opt: Option<&T>, transform: F) -> TokenStream
where
F: FnOnce(&T) -> TokenStream,
{
if let Some(v) = opt {
let transformed = transform(v);
quote!(Some(#transformed))
} else {
quote!(None)
}
}
pub fn quote_slice<T, F>(vec: &[T], transform: F) -> TokenStream
where
F: Fn(&T) -> TokenStream,
{
let items: Vec<TokenStream> = vec
.iter()
.map(transform)
.filter(|ts| !ts.is_empty())
.collect();
quote! {
&[#(#items),*]
}
}
pub fn to_str_lit<T: ToTokens>(t: &T) -> TokenStream {
let s = quote!(#t).to_string();
quote!(#s)
}
pub fn to_path<T: ToTokens>(t: &T) -> TokenStream {
quote! { <#t as ::icydb_model::Path>::PATH }
}