use std::fs; use heck::ToPascalCase; use proc_macro2::TokenStream; use quote::{format_ident, quote}; pub fn build() -> TokenStream { println!("cargo:rerun-if-changed=../assets/chunk_status.json"); let chunk_status: Vec = serde_json::from_str(&fs::read_to_string("../assets/chunk_status.json").unwrap()) .expect("Failed to parse chunk_status.json"); let variants: Vec = chunk_status .into_iter() .map(|status| { let full_name = format!("minecraft:{status}"); let name = format_ident!("{}", status.to_pascal_case()); quote! { #[serde(rename = #full_name)] #name, } }) .collect(); quote! { use serde::{Deserialize, Serialize}; #[derive(Serialize, Deserialize, Debug, PartialEq, Eq, Clone, Copy)] pub enum ChunkStatus { #(#variants)* } } }