#bencode #bittorrent #deserialize #serialization #torrent

bende

由 serde 支持的 bencode 编码/解码实现

9 个版本 (4 个重大更新)

0.5.4 2022年5月5日
0.5.3 2022年5月5日
0.5.1 2022年4月28日
0.4.0 2022年4月25日
0.1.0 2022年4月20日

#773 in 编码

每月30次下载

MIT 许可证

78KB
2K SLoC


Bende

Bende 是一个由 serde 支持的 rust bencode 编码/解码实现。

关于

这是 rust 可用的少数几个 bencode 实现之一。尽管有替代方案(见下文),实现 bencode 既是乐趣,也是良好的学习经验。另外,多一个替代方案也无妨。

替代方案

更多,但有些已不再维护。

用法

将库作为依赖项添加到 Cargo.toml

[dependencies]
bende = "0.5.4"
serde = { version = "1", features = ["derive"] }

示例

use serde::{Deserialize, Serialize};

#[derive(Debug, PartialEq, Serialize, Deserialize)]
struct Person {
    name: String,
    age: u8,
    is_employed: bool,
}

let jerry = Person {
    name: "Jerry Smith".to_string(),
    age: 50,
    is_employed: false,
};

let bytes = bende::encode(&jerry).unwrap();
assert_eq!(bende::decode::<Person>(&bytes).unwrap(), jerry);

不支持类型

不支持以下类型

  • f32
  • f64

贡献

贡献使开源社区成为一个如此神奇的学习、灵感和创造的地方。您所做出的任何贡献都将被 大力赞赏

如果您有改进此项目的建议,请克隆仓库并创建一个拉取请求。您也可以简单地打开一个带有“增强”标签的问题。别忘了给项目点个赞!再次感谢!

  1. 克隆项目
  2. 创建您的功能分支 (git checkout -b feature/AmazingFeature)
  3. 提交您的更改 (git commit -m 'Add some AmazingFeature')
  4. 推送到分支 (git push origin feature/AmazingFeature)
  5. 打开拉取请求

注意

  • 解码器支持两种形式的Option<_>(Some和None),但是编码器只支持Some
  • 键值对象的键必须是字符串,否则将返回错误。
  • 在编码之前,Map和struct条目将按其键的字典序排序。
  • 如果您在编码/解码原始字节时遇到问题,例如:&[u8]Vec<u8>,那么请使用这个crate
  • 代码库相对较小(约2000行),易于理解,并充满注释。如果您是初学者,您将会有愉快的时光进行您的第一次贡献。

依赖项

~110–350KB