mirror of
https://github.com/italicsjenga/valence.git
synced 2025-01-10 23:01:31 +11:00
6338fc6300
## Description - Reorganize `valence_nbt` and feature flag the different parts. SNBT and binary serialization are each behind their own flags. - Add optional serde support to `valence_nbt` behind the `serde` flag. This is useful for end users working with `valence_nbt` and allows us to simplify some code in `valence_biome` and `valence_dimension`. Note that this includes a `Serializer` and `Deserializer` for `Compound` and _not_ the binary and SNBT formats. In other words, it's not possible to go directly from an arbitrary data format to binary NBT and vice versa, but it _is_ possible to go to and from `Compound` and finish the (de)serialization this way. I consider this an acceptable compromise because writing fast and correct serialization routines for `Compound` becomes more difficult when serde is in the way. Besides, the intermediate `Compound` often needs to be created anyway. - Fixed unsound uses of `std::mem::transmute` in `valence_nbt` and elsewhere. Using `transmute` to cast between slice types is unsound because slices are `#[repr(Rust)]` and the layouts are not guaranteed. `slice::from_raw_parts` is used as the replacement.
15 lines
637 B
Markdown
15 lines
637 B
Markdown
# valence_nbt
|
|
|
|
A library for encoding and decoding Minecraft's [Named Binary Tag] (NBT)
|
|
format.
|
|
|
|
[Named Binary Tag]: https://minecraft.fandom.com/wiki/NBT_format
|
|
|
|
# Features
|
|
- `binary`: Adds support for serializing and deserializing in Java edition's binary format.
|
|
- `snbt`: Adds support for serializing and deserializing in "stringified" format.
|
|
- `preserve_order`: Causes the order of fields in [`Compound`]s to be
|
|
preserved during insertion and deletion at a slight cost to performance.
|
|
The iterators on `Compound` can then implement [`DoubleEndedIterator`].
|
|
- `serde` Adds support for [`serde`](https://docs.rs/serde/latest/serde/)
|