Expand description
§🦀 CrabNBT
Up-to-date Rust crate for easy and intuitive working with NBT data.
§Why not other libraries?
CrabNBT combines best features of existing NBT crates, to create perfect solution.
Big thanks to simdnbt and fastnbt for ideas!
§Features
🚧 Support for serializing to/from Struct (soon)
✅ Java string support
✅ NBT! macro for easy creation
✅ Good system of getting values from NBT
✅ Serializing for single tags
✅ Support of Network NBT
§Installing
cargo add crab_nbt
§Serializing
use crab_nbt::{nbt, Nbt, NbtCompound};
fn main() {
// Using NBT macro
let nbt = nbt!("root nbt_inner name", {
"float": 1.0,
"key": "value",
"long_array": [L; 1, 2],
"int_array": [Int; 1, 10, 25],
"byte_array": [B; 0, 1, 0, 0, 1],
"list": ["a", "b", "c"],
"nbt_inner": {
"key": "sub value"
}
});
let nbt = Nbt::new(
"root".to_owned(),
NbtCompound::from_iter([
("float".to_owned(), 1.0.into()),
("key".to_owned(), "value".into()),
("nbt_inner".to_owned(), NbtCompound::from_iter([
("key".to_owned(), "sub value".into()),
]).into())
])
);
}
§Deserializing
use bytes::Bytes;
use crab_nbt::{nbt, Nbt, NbtCompound};
fn example(bytes: &mut Bytes) {
let nbt = Nbt::read(bytes).unwrap();
let egg_name = nbt
.get_compound("nbt_inner")
.and_then(|compound| compound.get_compound("egg"))
.and_then(|compound| compound.get_string("name"))
.unwrap();
}
Modules§
Macros§
- Macro that simplifies the creation of NBT using JSON/SNBT-like syntax. It takes a name and a content block, and returns an
Nbt
object.
Structs§
- Represents the main NBT structure. It contains the root compound tag of the NBT structure and its associated name
Enums§
- Enum representing the different types of NBT tags. Each variant corresponds to a different type of data that can be stored in an NBT tag.