amfiteatr_proc_macro/
lib.rs

1mod token_parsed;
2//mod str_parsed;
3mod token_variant;
4
5use quote::quote;
6
7use syn::{DeriveInput, ItemStruct, parse_macro_input};
8//use crate::str_parsed::{derive_code_str_parsed};
9use crate::token_parsed::{derive_code_token_parsed};
10use crate::token_variant::derive_code_token_variant;
11
12#[proc_macro_attribute]
13pub fn no_assessment_info_set(attr: proc_macro::TokenStream, item: proc_macro::TokenStream) -> proc_macro::TokenStream{
14
15    let item_copy = item.clone();
16
17    let input: ItemStruct = parse_macro_input!(item_copy);
18
19    let domain = parse_macro_input!(attr as syn::Path);
20    let ident = input.ident;
21    let generics = input.generics;
22    let where_clause = generics.where_clause;
23    let params = generics.params;
24
25
26    let implementation = match params.is_empty(){
27        true => quote!{
28            impl amfiteatr_core::agent::EvaluatedInformationSet<#domain,  amfiteatr_core::domain::NoneReward> for #ident{
29
30                fn current_assessment(&self) -> amfiteatr_core::domain::NoneReward{
31                    amfiteatr_core::domain::NoneReward{}
32                }
33                fn penalty_for_illegal(&self) -> amfiteatr_core::domain::NoneReward {
34                    amfiteatr_core::domain::NoneReward{}
35                }
36            }
37        },
38        false => quote!{
39            impl<#params> amfiteatr_core::agent::EvaluatedInformationSet<#domain, amfiteatr_core::domain::NoneReward> for #ident <#params>
40            #where_clause{
41
42                fn current_assessment(&self) -> amfiteatr_core::domain::NoneReward {
43                    amfiteatr_core::domain::NoneReward{}
44                }
45                fn penalty_for_illegal(&self) -> amfiteatr_core::domain::NoneReward {
46                    amfiteatr_core::domain::NoneReward{}
47                }
48            }
49        }
50    };
51    let result = [item, implementation.into()];
52    proc_macro::TokenStream::from_iter(result)
53
54
55
56
57
58}
59
60/*
61#[proc_macro_derive(StrParsed, attributes(keywords))]
62pub fn derive_str_parsed(item: proc_macro::TokenStream) -> proc_macro::TokenStream{
63    let input = parse_macro_input!(item as DeriveInput);
64    derive_code_str_parsed(input)
65}
66*/
67
68
69
70#[proc_macro_derive(TokenParsed, attributes(token, token_type))]
71pub fn derive_token_parsed(item: proc_macro::TokenStream) -> proc_macro::TokenStream{
72    let input = parse_macro_input!(item as DeriveInput);
73    derive_code_token_parsed(input)
74}
75
76#[proc_macro_derive(TokenVariant, attributes(primitive))]
77pub fn derive_token_variant(item: proc_macro::TokenStream) -> proc_macro::TokenStream{
78    let input = parse_macro_input!(item as DeriveInput);
79    derive_code_token_variant(input)
80}