gluesql_derive_proc/
lib.rs

1use proc_macro::TokenStream;
2
3use crate::from_row::try_derive_from_row;
4use crate::to_row::try_derive_to_row;
5use syn::{parse_macro_input, DeriveInput};
6
7mod field;
8mod from_row;
9mod reflect_row;
10mod to_row;
11
12#[proc_macro_derive(ReflectGlueSqlRow, attributes(gluesql))]
13pub fn derive_reflect_row(input: TokenStream) -> TokenStream {
14    let derive_input = parse_macro_input!(input as DeriveInput);
15    reflect_row::try_derive_reflect_row(&derive_input)
16        .unwrap_or_else(|err| err.write_errors().into())
17        .into()
18}
19
20#[proc_macro_derive(FromGlueSqlRow, attributes(gluesql))]
21pub fn derive_from_row(input: TokenStream) -> TokenStream {
22    let derive_input = parse_macro_input!(input as DeriveInput);
23    try_derive_from_row(&derive_input).unwrap_or_else(|err| err.write_errors().into())
24}
25
26#[proc_macro_derive(ToGlueSqlRow, attributes(gluesql))]
27pub fn derive_to_from_row(input: TokenStream) -> TokenStream {
28    let derive_input = parse_macro_input!(input as DeriveInput);
29    try_derive_to_row(&derive_input).unwrap_or_else(|err| err.write_errors().into())
30}