use darling::FromField;
use proc_macro2::TokenStream;
use quote::quote;
use syn::{Fields, Ident};
use crate::parse::{FieldAttrs, StructAttrs};
pub fn generate_migration_impl(
struct_ident: &Ident,
attrs: &StructAttrs,
fields: &Fields,
) -> TokenStream {
let version = attrs.version.unwrap_or(1);
let _field_migrations: Vec<TokenStream> = fields
.iter()
.filter_map(|field| {
let ident = field.ident.as_ref()?;
let field_attrs = FieldAttrs::from_field(field).ok()?;
if field_attrs.skip {
return None;
}
Some(quote! {
field: #ident
})
})
.collect();
quote! {
impl confers::migration::Versioned for #struct_ident {
const VERSION: u32 = #version;
}
pub fn migration_registry() -> confers::migration::MigrationRegistry {
confers::migration::MigrationRegistry::new()
}
}
}