1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
use proc_macro::TokenStream;
use std::str::FromStr;

/// Makes your code nut.
#[proc_macro]
pub fn nut(input: TokenStream) -> TokenStream {
    internal_nut(input)
}

fn internal_nut(code_to_nut: TokenStream) -> TokenStream {
    let code_to_nut = code_to_nut.to_string();

    let replaced: String = code_to_nut
        .replace("& nut self", "& mut self")
        .replace("let nut", "let mut");

    TokenStream::from_str(&replaced).expect("this code can't nut :pensive:")
}