use darling::{
ast,
util::{PathList, SpannedValue},
FromDeriveInput, FromField, FromMeta,
};
use syn::{Generics, Ident, Type, Visibility};
#[derive(Debug, FromDeriveInput)]
#[darling(
attributes(table),
supports(struct_named, struct_newtype, struct_tuple)
)]
pub struct StructTable {
pub ident: Ident,
pub vis: Visibility,
pub generics: Generics,
pub data: ast::Data<(), TableColumn>,
#[darling(default)]
pub name: Option<String>,
#[darling(default)]
pub skip_parts: Option<SpannedValue<()>>,
#[darling(default, rename = "data")]
pub data_attr: Option<TableDataAttr>,
#[darling(default)]
pub derive: Option<PathList>,
}
#[derive(Debug, Default, FromMeta)]
#[darling(default)]
pub struct TableDataAttr {
#[darling(default)]
pub name: Option<String>,
#[darling(default)]
pub derive: Option<PathList>,
}
#[derive(Debug, FromField)]
#[darling(attributes(table))]
pub struct TableColumn {
pub ident: Option<Ident>,
pub ty: Type,
#[darling(default)]
pub indexed: Option<SpannedValue<()>>,
#[darling(default)]
pub name: Option<String>,
}