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