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}