diff --git a/Cargo.lock b/Cargo.lock index e6735e0..06f1283 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -292,6 +292,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c041f5090df68b32bcd905365fd51769c8b9d553fe87fde0b683534f10c01bd2" dependencies = [ "enumflags2_derive", + "serde", ] [[package]] diff --git a/Cargo.toml b/Cargo.toml index 62fcd3c..664b976 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -12,7 +12,7 @@ anyhow = "1.0.68" bincode = "1.3.3" bytemuck = "1.13.0" clap = { version = "4.1.4", features = ["derive"] } -enumflags2 = "0.7.5" +enumflags2 = { version = "0.7.5", features = ["serde"] } fastnbt = "2.3.2" flate2 = "1.0.25" futures-util = "0.3.28" diff --git a/src/resource/mod.rs b/src/resource/mod.rs index 5eb2838..501156a 100644 --- a/src/resource/mod.rs +++ b/src/resource/mod.rs @@ -6,12 +6,11 @@ mod legacy_block_types; use std::collections::HashMap; use enumflags2::{bitflags, BitFlags}; - -use serde::{de, Deserialize, Deserializer, Serialize, Serializer}; +use serde::{Deserialize, Serialize}; #[bitflags] #[repr(u8)] -#[derive(Debug, Clone, Copy, PartialEq)] +#[derive(Debug, Clone, Copy, PartialEq, Serialize, Deserialize)] pub enum BlockFlag { Opaque, Grass, @@ -21,29 +20,11 @@ pub enum BlockFlag { Water, } -fn serialize_block_flags(flags: &BitFlags, serializer: S) -> Result -where - S: Serializer, -{ - flags.bits().serialize(serializer) -} -fn deserialize_block_flags<'de, D>(deserializer: D) -> Result, D::Error> -where - D: Deserializer<'de>, -{ - let bits = u8::deserialize(deserializer)?; - BitFlags::::from_bits(bits).map_err(de::Error::custom) -} - #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)] pub struct Color(pub [u8; 3]); #[derive(Debug, Clone, Copy, Serialize, Deserialize)] pub struct BlockType { - #[serde( - serialize_with = "serialize_block_flags", - deserialize_with = "deserialize_block_flags" - )] pub flags: BitFlags, pub color: Color, }