#序列化 #bencode #bittorrent #serde #torrent

无需 std bt_bencode

Bencode 编码/解码实现

3 个不稳定版本

0.8.1 2024年5月15日
0.8.0 2024年1月1日
0.7.0 2022年7月31日
0.6.0 2022年3月21日
0.2.0 2020年2月20日

#237编码

Download history 71/week @ 2024-04-26 126/week @ 2024-05-03 264/week @ 2024-05-10 123/week @ 2024-05-17 122/week @ 2024-05-24 55/week @ 2024-05-31 63/week @ 2024-06-07 17/week @ 2024-06-14 11/week @ 2024-06-21 12/week @ 2024-06-28 27/week @ 2024-07-05 5/week @ 2024-07-12 18/week @ 2024-07-19 69/week @ 2024-07-26 6/week @ 2024-08-02 8/week @ 2024-08-09

102 每月下载量
用于 4 crates

MIT/Apache

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 许可证定义,将按上述方式双重许可,没有任何附加条款或条件。

依赖关系