7 stable releases
2.1.0 | Oct 28, 2024 |
---|---|
2.0.0 | Oct 28, 2024 |
1.1.3 | Oct 27, 2024 |
1.1.0 | Oct 26, 2024 |
1.0.0 | Oct 26, 2024 |
#1645 in Encoding
85KB
3K
SLoC
CraftFlow-NBT
A serde-based implementation of the Minecraft NBT binary format.
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:
Using the code above, even if you encounter a value that is encoded as a#[derive(serde::Deserialize)] #[serde(untagged)] enum Example { First(u32), Second(u64), }
Long
in NBT, serde will still always give youExample::First
, except for when the number is big enough that it can't fit in au32
. This is very inconsistent and therefore if you need this functionality, consider implementingDeserialize
manually. See the implementation ofDynNBT
for an example. - Option: if serialized/deserialized standalone, will write/read a
Tag::End
byte. However, if inside a compound, will be skipped altogether.
Dependencies
~0.4–1MB
~21K SLoC