use proc_macro2::TokenStream;
use quote::{quote, ToTokens};
use syn::Lit;
#[derive(Debug, Clone, Default)]
pub struct Multiple<T>(pub Vec<T>);
impl<T: darling::FromMeta> darling::FromMeta for Multiple<T> {
fn from_list(items: &[::syn::NestedMeta]) -> darling::Result<Self> {
items
.iter()
.map(|item| T::from_nested_meta(item))
.collect::<darling::Result<Vec<T>>>()
.map(Self)
}
fn from_value(value: &Lit) -> darling::Result<Self> {
Ok(Self(Vec::from([T::from_value(value)?])))
}
}
pub fn quote_vec<T: ToTokens>(opt: &[T]) -> TokenStream {
quote! {
vec! [#(#opt),*]
}
}
pub fn quote_option<T: ToTokens>(opt: &Option<T>) -> TokenStream {
match opt {
Some(o) => quote! {Some( #o )},
None => quote! {None},
}
}
pub enum MacroError {
DarlingError(darling::Error),
SynError(syn::Error),
}