#nbt #minecraft #serialization #serde #deserialize

serde_nbt

用于Minecraft的命名二进制标签(NBT)格式的Serde库

2个版本

0.1.1 2022年9月22日
0.1.0 2022年9月3日

#35 in #nbt


用于 valence

MIT 许可协议

75KB
2K SLoC

注意:此crate已被valence_nbt取代。如果您需要此crate名称,请联系Valence开发者。

一个用于序列化和反序列化Minecraft的命名二进制标签(NBT)格式的Serde库。

更多信息,请参阅此处的文档。


lib.rs:

一个用于序列化和反序列化Minecraft的命名二进制标签(NBT)格式的serde库。

示例

将NBT复合体写入字节缓冲区。

use serde::Serialize;
use serde_nbt::binary::to_writer;

#[derive(Serialize)]
struct Example {
    boolean: bool,
    string: String,
    list_of_float: Vec<f32>,
    #[serde(with = "serde_nbt::int_array")]
    int_array: Vec<i32>,
}

let example = Example {
    boolean: true,
    string: "abc123".to_owned(),
    list_of_float: vec![3.1415, 2.7182, 1.4142],
    int_array: vec![7, 8, 9],
};

let mut buf = Vec::new();
to_writer(&mut buf, &example).unwrap();

有时无法事先知道NBT数据结构。在这种情况下,您可以使用Value

use serde_nbt::binary::from_reader;
use serde_nbt::{Compound, Value};

let some_bytes = [10, 0, 0, 3, 0, 3, 105, 110, 116, 0, 0, 222, 173, 0];
let reader = &mut some_bytes.as_slice();

let value: Value = from_reader(reader).unwrap();

let expected_value = Value::Compound(Compound::from_iter([(
    "int".to_owned(),
    Value::Int(0xdead),
)]));

assert_eq!(value, expected_value);

依赖项

~1.2–1.6MB
~28K SLoC