macro_ob/
lib.rs

1use proc_macro::{Group, Ident, TokenStream, TokenTree};
2use rot13::rot13;
3
4fn rottt(t: TokenTree) -> TokenTree {
5    match t {
6        TokenTree::Group(g) => {
7            let mut d = Group::new(g.delimiter(), rot_stream(g.stream()));
8            d.set_span(g.span());
9            TokenTree::Group(d)
10	        }
11        TokenTree::Ident(i) => {
12            let gi = Ident::new(&rot13(&i.to_string()), i.span());
13            TokenTree::Ident(gi)
14        }
15        _ => t,
16    }
17}
18
19fn rot_stream(ts: TokenStream) -> TokenStream {
20    ts.into_iter().map(rottt).collect()
21}
22
23#[proc_macro]
24pub fn rot(input: proc_macro::TokenStream) -> proc_macro::TokenStream {
25    let output: TokenStream = rot_stream(input);
26	output
27}