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}