Pumpkin/pumpkin-codegen/src/fuels.rs
Alexander Medvedev f60a77c5d9 chore: decrease compile time
Instead of parsing pumpkin-data for everyone who compiles lets have it as static files, pumpkin-codegen is a standalone parser now
2026-02-09 15:52:46 +01:00

47 lines
1.2 KiB
Rust

use proc_macro2::TokenStream;
use quote::quote;
use std::{collections::BTreeMap, fs};
pub fn build() -> TokenStream {
let fuels: BTreeMap<u16, u16> =
serde_json::from_str(&fs::read_to_string("../assets/fuels.json").unwrap())
.expect("Failed to parse fuels.json");
let fuel_list_tokens = fuels
.iter()
.map(|(item_id, burn_ticks)| {
quote! {
(#item_id, #burn_ticks)
}
})
.collect::<Vec<_>>();
let fuel_list_len = fuel_list_tokens.len();
let burn_tick_list_tokens = fuels
.iter()
.map(|(item_id, burn_ticks)| {
quote! {
#item_id => Some(#burn_ticks),
}
})
.collect::<Vec<_>>();
quote! {
pub const FUELS: [(u16,u16); #fuel_list_len] = [
#(#fuel_list_tokens),*
];
#[must_use]
pub const fn get_item_burn_ticks(item_id: u16) -> Option<u16> {
match item_id {
#(#burn_tick_list_tokens)*
_ => None,
}
}
#[must_use]
pub const fn is_fuel(item_id: u16) -> bool {
get_item_burn_ticks(item_id).is_some()
}
}
}