7个版本
0.1.3 | 2024年7月31日 |
---|---|
0.1.2 | 2024年7月14日 |
0.1.1 | 2024年6月25日 |
0.1.0 | 2024年4月7日 |
0.0.3 | 2024年3月24日 |
#676 in 解析器实现
每月268次下载
在ussr-nbt中使用
24KB
529 行
🦀 CrabNBT
最新的Rust包,便于直观地处理NBT数据。
为什么不是其他库呢?
CrabNBT结合了现有NBT包的最佳特性,创造了完美的解决方案。
向simdnbt和fastnbt表示感谢,感谢他们的想法!
功能
🚧 支持序列化和反序列化到/从结构体(即将推出)
✅ 支持Java字符串
✅ NBT! 宏,便于创建
✅ 从NBT中获取值的好系统
✅ 单个标签的序列化
✅ 支持网络NBT
安装
cargo add crab_nbt
序列化
use crab_nbt::{nbt, Nbt, NbtCompound};
// 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())
])
);
反序列化
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();
}
依赖项
~0.5–1MB
~22K SLoC