use darling::ast::Data;
use darling::util::Ignored;
use darling::FromDeriveInput;
use syn::{Ident, Type};
#[derive(Debug, FromDeriveInput)]
#[darling(attributes(crud), supports(struct_named))]
pub struct ModelStructOpts {
pub ident: Ident,
pub data: Data<Ignored, ModelFieldOpts>,
#[darling(default)]
pub option_field: Option<String>,
}
#[derive(Debug, FromField, Clone)]
#[darling(attributes(crud))]
pub struct ModelFieldOpts {
pub ident: Option<Ident>,
pub ty: Type,
#[darling(default)]
pub skip: bool,
#[darling(default)]
pub create_skip: bool,
#[darling(default)]
pub update_skip: bool,
}
impl ModelStructOpts {
pub fn fields(&self) -> Vec<ModelFieldOpts> {
self.data.clone().take_struct().expect("Struct Opts get Field error").fields.into_iter().collect::<Vec<_>>()
}
}
#[derive(Debug, FromDeriveInput)]
#[darling(attributes(view), supports(struct_named))]
pub struct ViewStructOpts {
pub ident: Ident,
#[darling(default)]
pub model: Option<String>,
}