drylib_proc_macros/
lib.rs

1extern crate proc_macro;
2
3use proc_macro::TokenStream;
4
5#[cfg(feature = "muts")]
6mod muts;
7#[cfg(feature = "clones")]
8mod clones;
9
10mod clones_prefix;
11
12#[proc_macro]
13#[cfg(feature = "clones")]
14pub fn clones(input: TokenStream) -> TokenStream {
15    use crate::clones::*;
16    let ids = clones_parse_muts_(input.into_iter());
17    TokenStream::from_iter(get_clones_(ids, false))
18}
19
20#[proc_macro]
21#[cfg(feature = "mutclones")]
22pub fn mutclones(input: TokenStream) -> TokenStream {
23    use crate::clones::*;
24    let ids = clones_parse_muts_(input.into_iter());
25    TokenStream::from_iter(get_clones_(ids, true))
26}
27
28#[proc_macro]
29#[cfg(feature = "muts")]
30pub fn muts(input: TokenStream) -> TokenStream {
31    use crate::muts::*;
32    let (ids, ids_len, vals, vals_len) = muts_get_ids_vals_(&mut input.into_iter());
33    assert_eq!(ids_len, vals_len, "The number of idents and values must be the same");
34    TokenStream::from_iter(get_muts_(ids, vals))
35}