zino_derive/
lib.rs

1#![doc = include_str!("../README.md")]
2#![doc(html_favicon_url = "https://zino.cc/assets/zino-logo.png")]
3#![doc(html_logo_url = "https://zino.cc/assets/zino-logo.svg")]
4
5use proc_macro::TokenStream;
6use syn::{DeriveInput, parse_macro_input};
7
8mod decode_row;
9mod entity;
10mod model;
11mod model_accessor;
12mod model_hooks;
13mod parser;
14mod schema;
15
16#[doc = include_str!("../docs/entity.md")]
17#[proc_macro_derive(Entity, attributes(schema))]
18pub fn derive_entity(item: TokenStream) -> TokenStream {
19    let input = parse_macro_input!(item as DeriveInput);
20    let output = entity::parse_token_stream(input);
21    TokenStream::from(output)
22}
23
24#[doc = include_str!("../docs/schema.md")]
25#[proc_macro_derive(Schema, attributes(schema))]
26pub fn derive_schema(item: TokenStream) -> TokenStream {
27    let input = parse_macro_input!(item as DeriveInput);
28    let output = schema::parse_token_stream(input);
29    TokenStream::from(output)
30}
31
32#[doc = include_str!("../docs/model_accessor.md")]
33#[proc_macro_derive(ModelAccessor, attributes(schema))]
34pub fn derive_model_accessor(item: TokenStream) -> TokenStream {
35    let input = parse_macro_input!(item as DeriveInput);
36    let output = model_accessor::parse_token_stream(input);
37    TokenStream::from(output)
38}
39
40#[doc = include_str!("../docs/decode_row.md")]
41#[proc_macro_derive(DecodeRow, attributes(schema))]
42pub fn derive_decode_row(item: TokenStream) -> TokenStream {
43    let input = parse_macro_input!(item as DeriveInput);
44    let output = decode_row::parse_token_stream(input);
45    TokenStream::from(output)
46}
47
48#[doc = include_str!("../docs/model_hooks.md")]
49#[proc_macro_derive(ModelHooks, attributes(schema))]
50pub fn derive_model_hooks(item: TokenStream) -> TokenStream {
51    let input = parse_macro_input!(item as DeriveInput);
52    let output = model_hooks::parse_token_stream(input);
53    TokenStream::from(output)
54}
55
56#[doc = include_str!("../docs/model.md")]
57#[proc_macro_derive(Model, attributes(schema))]
58pub fn derive_model(item: TokenStream) -> TokenStream {
59    let input = parse_macro_input!(item as DeriveInput);
60    let output = model::parse_token_stream(input);
61    TokenStream::from(output)
62}