minus_one/lib.rs
1use proc_macro::TokenStream;
2
3use quote::quote;
4use syn::{LitInt, parse_macro_input};
5
6#[proc_macro]
7pub fn minus_one(input: TokenStream) -> TokenStream {
8 // Parse the input tokens into a syntax tree
9 let literal: LitInt = parse_macro_input!(input);
10
11 // Convert the literal to i64, subtract 1, and create a new literal
12 let value = literal.base10_parse::<i64>().unwrap() - 1;
13 let new_literal = LitInt::new(&value.to_string(), literal.span());
14
15 // Generate the final token stream
16 let expanded = quote! {
17 #new_literal
18 };
19
20 // Return the generated tokens
21 TokenStream::from(expanded)
22}