1#![allow(clippy::option_option)]
2
3mod apply_constants;
4mod from_clvm;
5mod helpers;
6mod parser;
7mod to_clvm;
8
9use apply_constants::impl_apply_constants;
10use from_clvm::from_clvm;
11use proc_macro::TokenStream;
12
13use proc_macro2::Span;
14use syn::{parse_macro_input, DeriveInput, Ident};
15use to_clvm::to_clvm;
16
17const CRATE_NAME: &str = "clvm_traits";
18
19fn crate_name(name: Option<Ident>) -> Ident {
20 name.unwrap_or_else(|| Ident::new(CRATE_NAME, Span::call_site()))
21}
22
23#[proc_macro_derive(ToClvm, attributes(clvm))]
24pub fn to_clvm_derive(input: TokenStream) -> TokenStream {
25 let ast = parse_macro_input!(input as DeriveInput);
26 to_clvm(ast).into()
27}
28
29#[proc_macro_derive(FromClvm, attributes(clvm))]
30pub fn from_clvm_derive(input: TokenStream) -> TokenStream {
31 let ast = parse_macro_input!(input as DeriveInput);
32 from_clvm(ast).into()
33}
34
35#[proc_macro_attribute]
36pub fn apply_constants(_attr: TokenStream, input: TokenStream) -> TokenStream {
37 let ast = parse_macro_input!(input as DeriveInput);
38 impl_apply_constants(ast).into()
39}