1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
use proc_macro::TokenStream;
use proc_macro_error::proc_macro_error;
mod analyze;
mod codegen;
mod lower;
mod parse;
use analyze::analyze;
use codegen::codegen;
use lower::{lower, ImplBlockType};
use parse::{parse, Ast};
#[proc_macro_derive(FromPositionalRow, attributes(field, matcher))]
#[proc_macro_error]
pub fn from_positional_row(tokens: TokenStream) -> TokenStream {
let ast = parse(tokens.into());
let model = analyze(ast);
let ir = lower(model);
let rust = codegen(ir, ImplBlockType::From);
rust.into()
}
#[proc_macro_derive(ToPositionalRow, attributes(field))]
#[proc_macro_error]
pub fn to_positional_row(tokens: TokenStream) -> TokenStream {
let ast = parse(tokens.into());
let model = analyze(ast);
let ir = lower(model);
let rust = codegen(ir, ImplBlockType::To);
rust.into()
}