Skip to main content

codama_nodes_derive/
lib.rs

1use codama_errors::CodamaError;
2use proc_macro::TokenStream;
3use syn::{parse_macro_input, DeriveInput};
4
5mod nestable_type_node;
6mod node;
7mod node_union;
8mod registered_nodes;
9mod type_node;
10mod utils;
11use utils::*;
12
13#[proc_macro_attribute]
14pub fn node(_attr: TokenStream, input: TokenStream) -> TokenStream {
15    let input = parse_macro_input!(input as DeriveInput);
16    node::expand_attribute_node(&input)
17        .unwrap_or_else(CodamaError::into_compile_error)
18        .into()
19}
20
21#[proc_macro_derive(Node)]
22pub fn derive_node(input: TokenStream) -> TokenStream {
23    let input = parse_macro_input!(input as DeriveInput);
24    node::expand_derive_node(&input)
25        .unwrap_or_else(CodamaError::into_compile_error)
26        .into()
27}
28
29#[proc_macro_attribute]
30pub fn type_node(_attr: TokenStream, input: TokenStream) -> TokenStream {
31    let input = parse_macro_input!(input as DeriveInput);
32    type_node::expand_attribute_type_node(&input)
33        .unwrap_or_else(CodamaError::into_compile_error)
34        .into()
35}
36
37#[proc_macro_derive(TypeNode)]
38pub fn derive_type_node(input: TokenStream) -> TokenStream {
39    let input = parse_macro_input!(input as DeriveInput);
40    type_node::expand_derive_type_node(&input)
41        .unwrap_or_else(CodamaError::into_compile_error)
42        .into()
43}
44
45#[proc_macro_attribute]
46pub fn nestable_type_node(_attr: TokenStream, input: TokenStream) -> TokenStream {
47    let input = parse_macro_input!(input as DeriveInput);
48    nestable_type_node::expand_attribute_nestable_type_node(&input)
49        .unwrap_or_else(CodamaError::into_compile_error)
50        .into()
51}
52
53#[proc_macro_derive(NestableTypeNode)]
54pub fn derive_nestable_type_node(input: TokenStream) -> TokenStream {
55    let input = parse_macro_input!(input as DeriveInput);
56    nestable_type_node::expand_derive_nestable_type_node(&input)
57        .unwrap_or_else(CodamaError::into_compile_error)
58        .into()
59}
60
61#[proc_macro_attribute]
62pub fn node_union(_attr: TokenStream, input: TokenStream) -> TokenStream {
63    let input = parse_macro_input!(input as DeriveInput);
64    node_union::expand_attribute_node_union(&input)
65        .unwrap_or_else(CodamaError::into_compile_error)
66        .into()
67}
68
69#[proc_macro_derive(NodeUnion, attributes(fallback))]
70pub fn derive_node_union(input: TokenStream) -> TokenStream {
71    let input = parse_macro_input!(input as DeriveInput);
72    node_union::expand_derive_node_union(&input)
73        .unwrap_or_else(CodamaError::into_compile_error)
74        .into()
75}
76
77#[proc_macro_derive(RegisteredNodes, attributes(registered))]
78pub fn derive_registered_nodes(input: TokenStream) -> TokenStream {
79    let input = parse_macro_input!(input as DeriveInput);
80    registered_nodes::expand_derive_registered_nodes(&input)
81        .unwrap_or_else(CodamaError::into_compile_error)
82        .into()
83}