dess_proc_macros/
lib.rs

1mod imports;
2use imports::*;
3mod bare_clone;
4mod history_methods;
5mod history_vec;
6mod pyo3_api;
7mod solver_attr;
8mod utilities;
9
10/// generate HistoryVec that acts like a vec of States but
11/// stores each field of state as a vec field.
12#[proc_macro_error]
13#[proc_macro_derive(HistoryVec)]
14pub fn history_vec_derive(input: TokenStream) -> TokenStream {
15    history_vec::history_vec_derive(input)
16}
17
18/// Derives `save_state` method for struct and all fields marked with
19/// `save_state` or `use_state` attributes
20#[proc_macro_error]
21#[proc_macro_derive(HistoryMethods, attributes(use_state, save_state))]
22pub fn history_methods_derive(input: TokenStream) -> TokenStream {
23    history_methods::history_methods_derive(input)
24}
25
26/// Generates several methods for struct to create solver framework
27#[proc_macro_error]
28#[proc_macro_attribute]
29pub fn solver(attr: TokenStream, item: TokenStream) -> TokenStream {
30    solver_attr::solver_attr(attr, item)
31}
32
33/// Derives `bare_clone` method
34#[proc_macro_error]
35#[proc_macro_derive(BareClone, attributes(use_state, save_state))]
36pub fn bare_clone(input: TokenStream) -> TokenStream {
37    bare_clone::bare_clone_derive(input)
38}
39
40// TODO: make an attribute-style macro that creates:
41/// Generates pyo3 api for struct.  
42/// Helper attributes:
43/// `skip_get` -- skips generating getter for field
44/// `walk` -- at struct level, tells macro to generate `walk_py` method that calls `walk`
45#[proc_macro_error]
46#[proc_macro_attribute]
47pub fn pyo3_api(attr: TokenStream, item: TokenStream) -> TokenStream {
48    pyo3_api::pyo3_api(attr, item)
49}
50
51/// Dummy derive macro for registering [pyo3_api] attributes.  
52/// This may not be the cleanest way to do this.
53#[proc_macro_error]
54#[proc_macro_derive(Pyo3ApiCleanup, attributes(skip_get))]
55pub fn pyo3_api_cleanup(_item: TokenStream) -> TokenStream {
56    TokenStream::new()
57}
58
59/// Generates list of commonly used derives
60#[proc_macro_error]
61#[proc_macro_attribute]
62pub fn common_derives(_attr: TokenStream, item: TokenStream) -> TokenStream {
63    let item: TokenStream2 = item.into();
64    let output: TokenStream2 = quote! {
65        #[derive(Debug, Clone, PartialEq, PartialOrd, Serialize, Deserialize)]
66        #item
67    };
68
69    output.into()
70}