Pumpkin/pumpkin-codegen/src/recipe_remainder.rs
Alexander Medvedev 2fcc9bcf4a chore: enforce some more clippy lints
pumpkin contributors will love me :cap:
2026-05-20 22:27:54 +02:00

32 lines
1.1 KiB
Rust

use proc_macro2::{Span, TokenStream};
use quote::quote;
use std::{collections::BTreeMap, fs};
use syn::LitInt;
/// Generates the `TokenStream` for the `get_recipe_remainder_id` function.
pub fn build() -> TokenStream {
let remainder: BTreeMap<u16, u16> =
serde_json::from_str(&fs::read_to_string("../assets/recipe_remainder.json").unwrap())
.expect("Failed to parse recipe_remainder.json");
let match_arms: Vec<TokenStream> = remainder
.into_iter()
.map(|(item_id, remainder_id)| {
let item_id_lit = LitInt::new(&item_id.to_string(), Span::call_site());
let remainder_id_lit = LitInt::new(&remainder_id.to_string(), Span::call_site());
quote! {
#item_id_lit => Some(#remainder_id_lit),
}
})
.collect();
quote! {
#[must_use]
#[allow(clippy::match_same_arms)]
pub const fn get_recipe_remainder_id(item_id: u16) -> Option<u16> {
match item_id {
#(#match_arms)*
_ => None,
}
}
}
}