fastobo_derive_internal/
lib.rs

1#[macro_use]
2extern crate darling;
3extern crate heck;
4extern crate proc_macro;
5extern crate syn;
6
7mod from_str;
8mod obo_clause;
9mod utils;
10
11use darling::FromDeriveInput;
12use proc_macro::TokenStream;
13use quote::quote;
14
15use self::from_str::FromStrDerive;
16use self::obo_clause::OboClauseDerive;
17
18#[proc_macro_derive(OboClause, attributes(clause))]
19pub fn oboclause_derive(input: TokenStream) -> TokenStream {
20    let parsed = syn::parse(input).unwrap();
21    let receiver = OboClauseDerive::from_derive_input(&parsed).unwrap();
22
23    let oboclause_impl = receiver.oboclause_impl();
24    let display_impl = receiver.display_impl();
25
26    TokenStream::from(quote!(
27        #oboclause_impl
28        #display_impl
29    ))
30}
31
32#[proc_macro_derive(FromStr)]
33pub fn fromstr_derive(input: TokenStream) -> TokenStream {
34    let parsed = syn::parse(input).unwrap();
35    let receiver = FromStrDerive::from_derive_input(&parsed).unwrap();
36
37    let fromstr_impl = receiver.fromstr_impl();
38
39    TokenStream::from(quote!(#fromstr_impl))
40}