ora_macros/
lib.rs

1use darling::FromDeriveInput;
2use proc_macro_error::proc_macro_error;
3use quote::quote;
4
5use crate::task::TaskDerive;
6
7extern crate proc_macro;
8
9mod task;
10
11#[proc_macro_error]
12#[proc_macro_derive(Task, attributes(task))]
13pub fn derive_task(input: proc_macro::TokenStream) -> proc_macro::TokenStream {
14    let task = match syn::parse::<syn::DeriveInput>(input.clone()) {
15        Ok(task) => task,
16        Err(e) => {
17            proc_macro_error::emit_call_site_error!(e.to_string());
18            return input;
19        }
20    };
21    let task = match TaskDerive::from_derive_input(&task) {
22        Ok(task) => task,
23        Err(e) => {
24            proc_macro_error::emit_call_site_error!(e.to_string());
25            return input;
26        }
27    };
28
29    quote!(#task).into()
30}