use proc_macro2::TokenStream;
use syn::{Attribute, DataStruct, Meta, parse_quote};
use super::{EMBED, field_member};
pub(crate) fn basic_embed_fields(
data_struct: &DataStruct,
) -> impl Iterator<Item = (syn::Member, &syn::Field)> {
data_struct
.fields
.iter()
.enumerate()
.filter(|(_, field)| {
field.attrs.iter().any(|attribute| match attribute {
Attribute {
meta: Meta::Path(path),
..
} => path.is_ident(EMBED),
_ => false,
})
})
.map(|(index, field)| (field_member(index, field), field))
}
pub(crate) fn add_struct_bounds(
generics: &mut syn::Generics,
field_type: &syn::Type,
embed_trait: &TokenStream,
) {
let where_clause = generics.make_where_clause();
where_clause.predicates.push(parse_quote! {
#field_type: #embed_trait
});
}