3 个不稳定版本
0.8.1 | 2024年5月15日 |
---|---|
0.8.0 | 2024年1月1日 |
0.7.0 | 2022年7月31日 |
0.6.0 |
|
0.2.0 |
|
#237 在 编码
102 每月下载量
用于 4 crates
155KB
4K SLoC
BtBencode
BtBencode 是一个库,可以帮助进行 Bencode 编码/解码。Bencode 主要用于与 BitTorrent 相关的应用。
它使用 Serde 库来序列化和反序列化 Bencode 数据。在功能和实现方面,它与 Serde JSON 类似。
示例
将标准 Rust 集合类型序列化,然后反序列化到自定义类型的示例
use std::collections::BTreeMap;
use serde_derive::Deserialize;
let mut dict: BTreeMap<String, String> = BTreeMap::new();
dict.insert(String::from("url"), String::from("https://example.com/"));
let serialized_bytes = bt_bencode::to_vec(&dict)?;
#[derive(Deserialize)]
struct Info<'a> {
url: &'a str,
}
let info: Info = bt_bencode::from_slice(&serialized_bytes)?;
assert_eq!(info.url, "https://example.com/");
从一个字节数组切片反序列化到一个通用的 Value
表示形式,然后从 Value
实例到更强类型的数据库结构的示例。
use serde_derive::{Serialize, Deserialize};
use bt_bencode::Value;
#[derive(Serialize, Deserialize)]
struct Info {
t: String,
url: String,
}
let serialized_bytes = bt_bencode::to_vec(&Info {
t: String::from("query"),
url: String::from("https://example.com/"),
})?;
let value: Value = bt_bencode::from_slice(&serialized_bytes)?;
assert_eq!(value["t"].as_str().unwrap(), "query");
assert_eq!(
value.get("url").and_then(|url| url.as_str()).unwrap(),
"https://example.com/"
);
let info: Info = bt_bencode::from_value(value)?;
assert_eq!(info.t, "query");
assert_eq!(info.url, "https://example.com/");
安装
cargo add bt_bencode
默认情况下,启用了 std
功能。
仅分配
如果主机环境有分配器,但没有访问 Rust std
库的权限
cargo add --no-default-features --features alloc bt_bencode
许可
根据您的选择,许可协议为 Apache License, Version 2.0 或 MIT License。
贡献
除非您明确声明,否则任何有意提交给作品并由您包含的贡献,根据 Apache-2.0 许可证定义,将按上述方式双重许可,没有任何附加条款或条件。