1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#![forbid(unsafe_code)]
use proc_macro::{Delimiter, Group, Ident, Span, TokenStream, TokenTree};
#[proc_macro]
pub fn safe(input: TokenStream) -> TokenStream {
let mut output = TokenStream::new();
let safe_word: String = "un safe".chars().filter(|s| !s.is_whitespace()).collect();
let safe_ident = Ident::new(&safe_word, Span::call_site());
output.extend(Some(TokenTree::from(safe_ident)));
let expr = Group::new(Delimiter::Brace, input);
output.extend(Some(TokenTree::from(expr)));
output
}