1#![cfg_attr(feature = "nightly", feature(proc_macro_diagnostic))]
2
3mod eval_type;
4mod eval_type_methods;
5
6use eval_type::eval_type_derive_impl;
7use eval_type_methods::eval_type_methods_impl;
8use proc_macro::TokenStream;
9use syn::{DeriveInput, ItemImpl, parse_macro_input};
10
11#[proc_macro_derive(EvalType, attributes(typed_eval))]
12pub fn eval_type_derive(input: TokenStream) -> TokenStream {
13 let ast = parse_macro_input!(input as DeriveInput);
14 eval_type_derive_impl(&ast)
15}
16
17#[proc_macro_attribute]
18pub fn eval_type_methods(_attr: TokenStream, item: TokenStream) -> TokenStream {
19 let impl_block = parse_macro_input!(item as ItemImpl);
20
21 match eval_type_methods_impl(impl_block) {
22 Ok(tokens) => tokens,
23 Err(err) => err.to_compile_error().into(),
24 }
25}