craftflow-nbt 2.0.0

A serde-based NBT (from Minecraft) binary format implementation
Documentation

Serde deriving

  • Tagged enums not supported
  • Untagged enums: the default implementation of Deserialize derived by serde macros does some crazy stuff with types, so if you have multiple variants with differrent "flavors" of the same base type (integers: byte, short, int, long, or lists: list, byte array, int array, long array) serde will automatically convert it the value that is first defined in the enum. For example:
    #[derive(serde::Deserialize)]
    #[serde(untagged)]
    enum Example {
      First(u32),
      Second(u64),
    }
    
    Using the code above, even if you encounter a value that is encoded as a Long in NBT, serde will still always give you Example::First, except for when the number is big enough that it can't fit in a u32. This is very inconsistent and therefore if you need this functionality, consider implementing Deserialize manually. See the implementation of DynNBT for an example.
  • Option: if serialized/deserialized standalone, will write/read a Tag::End byte. However, if inside a compound, will be skipped altogether.