1mod embedded;
5mod fields;
6mod input;
7mod model_columns;
8mod model_form;
9mod options;
10mod record_form;
11
12use proc_macro::TokenStream;
13use syn::DeriveInput;
14
15#[proc_macro_derive(EmbeddedForm, attributes(form))]
17pub fn embedded_form(input: TokenStream) -> TokenStream {
18 let input = syn::parse_macro_input!(input as DeriveInput);
19 embedded::expand(input)
20}
21
22#[proc_macro_derive(RecordForm, attributes(form))]
25pub fn record_form(input: TokenStream) -> TokenStream {
26 let input = syn::parse_macro_input!(input as DeriveInput);
27 record_form::expand_tokens(input).into()
28}
29
30#[proc_macro_derive(ModelColumns, attributes(columns))]
32pub fn model_columns(input: TokenStream) -> TokenStream {
33 let input = syn::parse_macro_input!(input as DeriveInput);
34 model_columns::expand_tokens(input).into()
35}
36
37#[proc_macro_derive(ModelForm, attributes(form))]
40pub fn model_form(input: TokenStream) -> TokenStream {
41 let input = syn::parse_macro_input!(input as DeriveInput);
42 model_form::expand_tokens(input).into()
43}
44
45#[proc_macro_derive(FormInput, attributes(form))]
48pub fn form_input(input: TokenStream) -> TokenStream {
49 let input = syn::parse_macro_input!(input as DeriveInput);
50 input::expand_tokens(input).into()
51}
52
53#[proc_macro_derive(Options, attributes(option))]
55pub fn options(input: TokenStream) -> TokenStream {
56 let input = syn::parse_macro_input!(input as DeriveInput);
57 options::expand_tokens(input).into()
58}
59
60fn tablo_core_path(span: &syn::Ident, derive: &str) -> syn::Result<proc_macro2::TokenStream> {
65 let found = proc_macro_crate::crate_name("tablo")
66 .map(|found| (found, "tablo"))
67 .or_else(|_| proc_macro_crate::crate_name("tablo-core").map(|found| (found, "tablo_core")));
68 match found {
69 Ok((found, own_name)) => {
70 let name = match found {
71 proc_macro_crate::FoundCrate::Itself => own_name.to_string(),
72 proc_macro_crate::FoundCrate::Name(n) => n,
73 };
74 let ident = syn::Ident::new(&name.replace('-', "_"), proc_macro2::Span::call_site());
75 Ok(quote::quote! { ::#ident })
76 }
77 Err(_) => Err(syn::Error::new_spanned(
78 span,
79 format!("`tablo` (or `tablo-core`) must be a dependency to #[derive({derive})]"),
80 )),
81 }
82}