Skip to main content

drylib_procs/
lib.rs

1extern crate proc_macro;
2
3use proc_macro::TokenStream;
4
5mod parse;
6use parse::parse_muts;
7
8#[cfg(feature = "ams")]
9mod ams;
10mod ams_prefix;
11#[cfg(feature = "muts")]
12mod muts;
13#[cfg(feature = "clones")]
14mod clones;
15mod clones_prefix;
16#[cfg(feature = "pubimpl")]
17mod pubimpl;
18#[cfg(feature = "impl_getters")]
19mod getters;
20
21#[proc_macro]
22#[cfg(feature = "ams")]
23pub fn ams(input: TokenStream) -> TokenStream {
24    use crate::ams::*;
25    let ids = parse_muts(input.into_iter());
26    TokenStream::from_iter(get_ams_(ids, false))
27}
28
29#[proc_macro]
30#[cfg(feature = "mutams")]
31pub fn mutams(input: TokenStream) -> TokenStream {
32    use crate::ams::*;
33    let ids = parse_muts(input.into_iter());
34    TokenStream::from_iter(get_ams_(ids, true))
35}
36
37#[proc_macro]
38#[cfg(feature = "muts")]
39pub fn muts(input: TokenStream) -> TokenStream {
40    use crate::muts::*;
41    let (ids, ids_len, vals, vals_len) = muts_get_ids_vals_(&mut input.into_iter());
42    assert_eq!(ids_len, vals_len, "The number of idents and values must be the same");
43    TokenStream::from_iter(get_muts_(ids, vals))
44}
45
46#[proc_macro]
47#[cfg(feature = "clones")]
48pub fn clones(input: TokenStream) -> TokenStream {
49    use crate::clones::*;
50    let ids = parse_muts(input.into_iter());
51    TokenStream::from_iter(get_clones_(ids, false))
52}
53
54#[proc_macro]
55#[cfg(feature = "mutclones")]
56pub fn mutclones(input: TokenStream) -> TokenStream {
57    use crate::clones::*;
58    let ids = parse_muts(input.into_iter());
59    TokenStream::from_iter(get_clones_(ids, true))
60}
61
62#[proc_macro]
63#[cfg(feature = "impl_getters")]
64pub fn impl_getters(input: TokenStream) -> TokenStream {
65    use crate::getters::*;
66    TokenStream::from_iter(getters(input, false))
67}
68
69#[proc_macro]
70#[cfg(feature = "impl_mut_getters")]
71pub fn impl_mut_getters(input: TokenStream) -> TokenStream {
72    use crate::getters::*;
73    TokenStream::from_iter(getters(input, true))
74}
75
76#[proc_macro]
77#[cfg(feature = "pubimpl")]
78pub fn pubimpl(input: TokenStream) -> TokenStream {
79    use crate::pubimpl::*;
80    let impl_ = pubimpl_parse_impl_(input.into_iter());
81    TokenStream::from_iter(impl_)
82}