#[derive(Deserialize, Debug, Clone)] #[serde( rename_all(deserialize = "camelCase", serialize = "snake_case"), untagged )] pub enum Recipe { Shaped(ShapedRecipe), Shapeless(ShapelessRecipe), } #[derive(Deserialize, Debug, Clone)] #[serde(rename_all(deserialize = "camelCase", serialize = "snake_case"))] pub struct ShapedRecipe { result: RecipeItem, in_shape: Shape, out_shape: Option, } #[derive(Deserialize, Debug, Clone)] #[serde(rename_all(deserialize = "camelCase", serialize = "snake_case"))] pub struct ShapelessRecipe { result: RecipeItem, ingredients: Vec, } pub type Shape = Vec>; #[derive(Deserialize, Debug, Clone)] #[serde( rename_all(deserialize = "camelCase", serialize = "snake_case"), untagged )] pub enum RecipeItem { ID(u32), IDMetadataArray([u32; 2]), IDMetadataCountObject(IDMetadataCountObject), Null(Option<()>), } #[derive(Deserialize, Debug, Clone)] #[serde(rename_all(deserialize = "camelCase", serialize = "snake_case"))] pub struct IDMetadataCountObject { id: i32, metadata: Option, count: Option, }