Skip to main content

amfiteatr_proc_macro/
lib.rs

1mod token_parsed;
2//mod str_parsed;
3mod token_variant;
4mod tensorboard_support;
5
6use quote::quote;
7
8use syn::{DeriveInput, ItemStruct, parse_macro_input};
9//use crate::str_parsed::{derive_code_str_parsed};
10use 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/*
62#[proc_macro_derive(StrParsed, attributes(keywords))]
63pub fn derive_str_parsed(item: proc_macro::TokenStream) -> proc_macro::TokenStream{
64    let input = parse_macro_input!(item as DeriveInput);
65    derive_code_str_parsed(input)
66}
67*/
68
69
70
71#[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/*
84#[proc_macro_derive(TensorboardSupport, attributes(tboard_writer))]
85pub fn derive_tensorboard_support(item: proc_macro::TokenStream) -> proc_macro::TokenStream{
86    let input = parse_macro_input!(item as DeriveInput);
87    derive_code_token_variant(input)
88}
89
90 */