Pumpkin/tools/pumpkin-codegen/src/version.rs
2026-08-06 12:56:40 +02:00

200 lines
9.5 KiB
Rust

use quote::{ToTokens, format_ident, quote};
use syn::Ident;
/// Represents a specific version of the Minecraft Java Edition protocol.
/// from pumpkin_util::version::JavaMinecraftVersion
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord)]
#[allow(non_camel_case_types)]
#[allow(dead_code)]
pub enum JavaMinecraftVersion {
/// 1.7.2: The Update That Changed The World
V_1_7_2,
V_1_7_6,
/// 1.8: The Bountiful Update
V_1_8,
/// 1.9: The Combat Update
V_1_9,
V_1_9_1,
V_1_9_2,
V_1_9_3,
/// 1.10: The Frostburn Update
V_1_10,
/// 1.11: The Exploration Update
V_1_11,
V_1_11_1,
/// 1.12: The World of Color Update
V_1_12,
V_1_12_1,
V_1_12_2,
/// 1.13: Update Aquatic
V_1_13,
V_1_13_1,
V_1_13_2,
/// 1.14: Village & Pillage
V_1_14,
V_1_14_1,
V_1_14_2,
V_1_14_3,
V_1_14_4,
/// 1.15: Buzzy Bees
V_1_15,
V_1_15_1,
V_1_15_2,
/// 1.16: Nether Update
V_1_16,
V_1_16_1,
V_1_16_2,
V_1_16_3,
V_1_16_4,
/// 1.17: Caves & Cliffs: Part I
V_1_17,
V_1_17_1,
/// 1.18: Caves & Cliffs: Part II
V_1_18,
V_1_18_2,
/// 1.19: The Wild Update
V_1_19,
V_1_19_1,
V_1_19_3,
V_1_19_4,
/// 1.20: Trails & Tales
V_1_20,
V_1_20_2,
V_1_20_3,
/// 1.20.5: Armored Paws
V_1_20_5,
/// 1.21: Tricky Trials
V_1_21,
V_1_21_2,
V_1_21_4,
/// 1.21.5: Bundles of Bravery
V_1_21_5,
V_1_21_6,
V_1_21_7,
V_1_21_9,
V_1_21_11,
V_26_1,
V_26_2,
}
impl JavaMinecraftVersion {
/// Converts this version to a snake_case `Ident` suitable for use as a struct field name.
///
/// # Returns
/// A `syn::Ident` like `v1_21_4` for `JavaMinecraftVersion::V_1_21_4`.
pub fn to_field_ident(self) -> Ident {
match self {
Self::V_1_7_2 => format_ident!("v1_7_2"),
Self::V_1_7_6 => format_ident!("v1_7_6"),
Self::V_1_8 => format_ident!("v1_8"),
Self::V_1_9 => format_ident!("v1_9"),
Self::V_1_9_1 => format_ident!("v1_9_1"),
Self::V_1_9_2 => format_ident!("v1_9_2"),
Self::V_1_9_3 => format_ident!("v1_9_3"),
Self::V_1_10 => format_ident!("v1_10"),
Self::V_1_11 => format_ident!("v1_11"),
Self::V_1_11_1 => format_ident!("v1_11_1"),
Self::V_1_12 => format_ident!("v1_12"),
Self::V_1_12_1 => format_ident!("v1_12_1"),
Self::V_1_12_2 => format_ident!("v1_12_2"),
Self::V_1_13 => format_ident!("v1_13"),
Self::V_1_13_1 => format_ident!("v1_13_1"),
Self::V_1_13_2 => format_ident!("v1_13_2"),
Self::V_1_14 => format_ident!("v1_14"),
Self::V_1_14_1 => format_ident!("v1_14_1"),
Self::V_1_14_2 => format_ident!("v1_14_2"),
Self::V_1_14_3 => format_ident!("v1_14_3"),
Self::V_1_14_4 => format_ident!("v1_14_4"),
Self::V_1_15 => format_ident!("v1_15"),
Self::V_1_15_1 => format_ident!("v1_15_1"),
Self::V_1_15_2 => format_ident!("v1_15_2"),
Self::V_1_16 => format_ident!("v1_16"),
Self::V_1_16_1 => format_ident!("v1_16_1"),
Self::V_1_16_2 => format_ident!("v1_16_2"),
Self::V_1_16_3 => format_ident!("v1_16_3"),
Self::V_1_16_4 => format_ident!("v1_16_4"),
Self::V_1_17 => format_ident!("v1_17"),
Self::V_1_17_1 => format_ident!("v1_17_1"),
Self::V_1_18 => format_ident!("v1_18"),
Self::V_1_18_2 => format_ident!("v1_18_2"),
Self::V_1_19 => format_ident!("v1_19"),
Self::V_1_19_1 => format_ident!("v1_19_1"),
Self::V_1_19_3 => format_ident!("v1_19_3"),
Self::V_1_19_4 => format_ident!("v1_19_4"),
Self::V_1_20 => format_ident!("v1_20"),
Self::V_1_20_2 => format_ident!("v1_20_2"),
Self::V_1_20_3 => format_ident!("v1_20_3"),
Self::V_1_20_5 => format_ident!("v1_20_5"),
Self::V_1_21 => format_ident!("v1_21"),
Self::V_1_21_2 => format_ident!("v1_21_2"),
Self::V_1_21_4 => format_ident!("v1_21_4"),
Self::V_1_21_5 => format_ident!("v1_21_5"),
Self::V_1_21_6 => format_ident!("v1_21_6"),
Self::V_1_21_7 => format_ident!("v1_21_7"),
Self::V_1_21_9 => format_ident!("v1_21_9"),
Self::V_1_21_11 => format_ident!("v1_21_11"),
Self::V_26_1 => format_ident!("v26_1"),
Self::V_26_2 => format_ident!("v26_2"),
}
}
}
impl ToTokens for JavaMinecraftVersion {
/// Emits a fully-qualified `pumpkin_util::version::JavaMinecraftVersion::V_x_y_z` token stream.
fn to_tokens(&self, tokens: &mut proc_macro2::TokenStream) {
tokens.extend(match self {
Self::V_1_7_2 => quote! { pumpkin_util::version::JavaMinecraftVersion::V_1_7_2 },
Self::V_1_7_6 => quote! { pumpkin_util::version::JavaMinecraftVersion::V_1_7_6 },
Self::V_1_8 => quote! { pumpkin_util::version::JavaMinecraftVersion::V_1_8 },
Self::V_1_9 => quote! { pumpkin_util::version::JavaMinecraftVersion::V_1_9 },
Self::V_1_9_1 => quote! { pumpkin_util::version::JavaMinecraftVersion::V_1_9_1 },
Self::V_1_9_2 => quote! { pumpkin_util::version::JavaMinecraftVersion::V_1_9_2 },
Self::V_1_9_3 => quote! { pumpkin_util::version::JavaMinecraftVersion::V_1_9_3 },
Self::V_1_10 => quote! { pumpkin_util::version::JavaMinecraftVersion::V_1_10 },
Self::V_1_11 => quote! { pumpkin_util::version::JavaMinecraftVersion::V_1_11 },
Self::V_1_11_1 => quote! { pumpkin_util::version::JavaMinecraftVersion::V_1_11_1 },
Self::V_1_12 => quote! { pumpkin_util::version::JavaMinecraftVersion::V_1_12 },
Self::V_1_12_1 => quote! { pumpkin_util::version::JavaMinecraftVersion::V_1_12_1 },
Self::V_1_12_2 => quote! { pumpkin_util::version::JavaMinecraftVersion::V_1_12_2 },
Self::V_1_13 => quote! { pumpkin_util::version::JavaMinecraftVersion::V_1_13 },
Self::V_1_13_1 => quote! { pumpkin_util::version::JavaMinecraftVersion::V_1_13_1 },
Self::V_1_13_2 => quote! { pumpkin_util::version::JavaMinecraftVersion::V_1_13_2 },
Self::V_1_14 => quote! { pumpkin_util::version::JavaMinecraftVersion::V_1_14 },
Self::V_1_14_1 => quote! { pumpkin_util::version::JavaMinecraftVersion::V_1_14_1 },
Self::V_1_14_2 => quote! { pumpkin_util::version::JavaMinecraftVersion::V_1_14_2 },
Self::V_1_14_3 => quote! { pumpkin_util::version::JavaMinecraftVersion::V_1_14_3 },
Self::V_1_14_4 => quote! { pumpkin_util::version::JavaMinecraftVersion::V_1_14_4 },
Self::V_1_15 => quote! { pumpkin_util::version::JavaMinecraftVersion::V_1_15 },
Self::V_1_15_1 => quote! { pumpkin_util::version::JavaMinecraftVersion::V_1_15_1 },
Self::V_1_15_2 => quote! { pumpkin_util::version::JavaMinecraftVersion::V_1_15_2 },
Self::V_1_16 => quote! { pumpkin_util::version::JavaMinecraftVersion::V_1_16 },
Self::V_1_16_1 => quote! { pumpkin_util::version::JavaMinecraftVersion::V_1_16_1 },
Self::V_1_16_2 => quote! { pumpkin_util::version::JavaMinecraftVersion::V_1_16_2 },
Self::V_1_16_3 => quote! { pumpkin_util::version::JavaMinecraftVersion::V_1_16_3 },
Self::V_1_16_4 => quote! { pumpkin_util::version::JavaMinecraftVersion::V_1_16_4 },
Self::V_1_17 => quote! { pumpkin_util::version::JavaMinecraftVersion::V_1_17 },
Self::V_1_17_1 => quote! { pumpkin_util::version::JavaMinecraftVersion::V_1_17_1 },
Self::V_1_18 => quote! { pumpkin_util::version::JavaMinecraftVersion::V_1_18 },
Self::V_1_18_2 => quote! { pumpkin_util::version::JavaMinecraftVersion::V_1_18_2 },
Self::V_1_19 => quote! { pumpkin_util::version::JavaMinecraftVersion::V_1_19 },
Self::V_1_19_1 => quote! { pumpkin_util::version::JavaMinecraftVersion::V_1_19_1 },
Self::V_1_19_3 => quote! { pumpkin_util::version::JavaMinecraftVersion::V_1_19_3 },
Self::V_1_19_4 => quote! { pumpkin_util::version::JavaMinecraftVersion::V_1_19_4 },
Self::V_1_20 => quote! { pumpkin_util::version::JavaMinecraftVersion::V_1_20 },
Self::V_1_20_2 => quote! { pumpkin_util::version::JavaMinecraftVersion::V_1_20_2 },
Self::V_1_20_3 => quote! { pumpkin_util::version::JavaMinecraftVersion::V_1_20_3 },
Self::V_1_20_5 => quote! { pumpkin_util::version::JavaMinecraftVersion::V_1_20_5 },
Self::V_1_21 => quote! { pumpkin_util::version::JavaMinecraftVersion::V_1_21 },
Self::V_1_21_2 => quote! { pumpkin_util::version::JavaMinecraftVersion::V_1_21_2 },
Self::V_1_21_4 => quote! { pumpkin_util::version::JavaMinecraftVersion::V_1_21_4 },
Self::V_1_21_5 => quote! { pumpkin_util::version::JavaMinecraftVersion::V_1_21_5 },
Self::V_1_21_6 => quote! { pumpkin_util::version::JavaMinecraftVersion::V_1_21_6 },
Self::V_1_21_7 => quote! { pumpkin_util::version::JavaMinecraftVersion::V_1_21_7 },
Self::V_1_21_9 => quote! { pumpkin_util::version::JavaMinecraftVersion::V_1_21_9 },
Self::V_1_21_11 => quote! { pumpkin_util::version::JavaMinecraftVersion::V_1_21_11 },
Self::V_26_1 => quote! { pumpkin_util::version::JavaMinecraftVersion::V_26_1 },
Self::V_26_2 => quote! { pumpkin_util::version::JavaMinecraftVersion::V_26_2 },
});
}
}