dsntk_macros/
lib.rs

1//! # Macros
2
3#[macro_use]
4extern crate quote;
5
6mod business_context_element;
7mod dmn_element;
8mod expression;
9mod named_element;
10mod utils;
11
12use proc_macro::TokenStream;
13
14#[proc_macro_derive(ToErrorMessage)]
15pub fn to_error_message(input: TokenStream) -> TokenStream {
16  let input = syn::parse_macro_input!(input as syn::DeriveInput);
17  let name = &input.ident;
18  let expanded = quote! {
19    impl ToErrorMessage for #name {
20      fn message(self) -> String {
21        self.0
22      }
23    }
24  };
25  TokenStream::from(expanded)
26}
27
28/// Extends annotated struct with fields and methods required by DMN named element.
29#[proc_macro_attribute]
30pub fn named_element(_input: TokenStream, item: TokenStream) -> TokenStream {
31  named_element::process(item.into()).into()
32}
33
34/// Extends annotated struct with fields and methods required by DMN element.
35#[proc_macro_attribute]
36pub fn dmn_element(_: TokenStream, item: TokenStream) -> TokenStream {
37  dmn_element::process(item.into()).into()
38}
39
40/// Extends annotated struct with fields and methods required by DMN business context element.
41#[proc_macro_attribute]
42pub fn business_context_element(_: TokenStream, item: TokenStream) -> TokenStream {
43  business_context_element::process(item.into()).into()
44}
45
46/// Extends annotated struct with fields and methods required by DMN expressions.
47#[proc_macro_attribute]
48pub fn expression(_input: TokenStream, item: TokenStream) -> TokenStream {
49  expression::process(item.into()).into()
50}