ora_macros/
lib.rs

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
use darling::FromDeriveInput;
use proc_macro_error::proc_macro_error;
use quote::quote;

use crate::task::TaskDerive;

extern crate proc_macro;

mod task;

#[proc_macro_error]
#[proc_macro_derive(Task, attributes(task))]
pub fn derive_task(input: proc_macro::TokenStream) -> proc_macro::TokenStream {
    let task = match syn::parse::<syn::DeriveInput>(input.clone()) {
        Ok(task) => task,
        Err(e) => {
            proc_macro_error::emit_call_site_error!(e.to_string());
            return input;
        }
    };
    let task = match TaskDerive::from_derive_input(&task) {
        Ok(task) => task,
        Err(e) => {
            proc_macro_error::emit_call_site_error!(e.to_string());
            return input;
        }
    };

    quote!(#task).into()
}