valence/crates/valence_nbt/Cargo.toml
Ryan Johnson 6338fc6300
serde support for valence_nbt + fixes. (#352)
## 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.
2023-06-04 05:56:10 -07:00

30 lines
997 B
TOML

[package]
name = "valence_nbt"
description = "A library for Minecraft's Named Binary Tag (NBT) format."
documentation = "https://docs.rs/valence_nbt/"
repository = "https://github.com/valence-rs/valence/tree/main/crates/valence_nbt"
readme = "README.md"
license.workspace = true
keywords = ["nbt", "minecraft", "serialization"]
version = "0.5.0"
edition.workspace = true
[features]
binary = ["dep:byteorder", "dep:cesu8"]
snbt = []
# When enabled, the order of fields in compounds are preserved.
preserve_order = ["dep:indexmap"]
serde = ["dep:serde", "dep:thiserror", "indexmap?/serde"]
[dependencies]
byteorder = { workspace = true, optional = true }
cesu8 = { workspace = true, optional = true }
indexmap = { workspace = true, optional = true }
serde = { workspace = true, features = ["derive"], optional = true }
thiserror = { workspace = true, optional = true }
uuid = { workspace = true, optional = true }
[dev-dependencies]
pretty_assertions.workspace = true
serde_json.workspace = true