#codec #decoding #bencodex

bin+lib bencodex-rs

Bencodex 的 Rust 实现

7 个版本 (破坏性)

0.5.0 2024 年 7 月 4 日
0.4.0 2024 年 6 月 28 日
0.3.1 2021 年 11 月 3 日
0.2.0 2021 年 1 月 9 日
0.0.1 2021 年 1 月 2 日

编码 中排名第 595

Download history 124/week @ 2024-06-23 141/week @ 2024-06-30 19/week @ 2024-07-07 1/week @ 2024-07-14 145/week @ 2024-07-28 5/week @ 2024-08-04

每月下载量 151

MIT 许可证

66KB
1.5K SLoC

bencodex-rs

build codecov Docs-rs

RustBencodex 的实现。

  • 正确性 - 实现 Bencodex 规范并使用其测试套件通过测试。
  • Bencodex JSON - 支持 Bencodex 到 JSON 的编码以及 JSON 到 Bencodex 的解码。
  • 功能标志 - 支持使用 jsonjson-cli 功能标志以最小化使用时的二进制文件大小。

Bencodex JSON 功能

bencodex-rs 实现了 Bencodex JSON 功能,支持编码和解码。

要使用 Bencodex JSON 功能,您应启用 json 功能。

bencodex-rs = { version = "<VERSION>", features = ["json"] }

编码到 JSON

要从 Bencodex 编码到 JSON,您可以使用 to_json 函数。

use bencodex::{ BencodexValue, json::to_json };

let json = to_json(&BencodexValue::Null);
println!("{}", json);

有两种方式编码 BencodexValue::Binary 类型,HexBase64。您可以使用 bencodex::json::BinaryEncoding 选择其中一种方式,并将其传递给 bencodex::json::JsonEncodeOptions,然后传递给 bencodex::json::to_json_with_options

use bencodex::BencodexValue;
use bencodex::json::{ BinaryEncoding, JsonEncodeOptions, to_json_with_options };

let json = to_json_with_options(&BencodexValue::Null, JsonEncodeOptions {
  binary_encoding: BinaryEncoding::Base64,
});
println!("{}", json);

从 JSON 解码

要从 JSON 解码到 Bencodex,您可以使用 from_json_stringfrom_json 函数。

// from_json_string
use bencodex::{ BencodexValue, json::from_json_string };

let result = from_json_string("null");
assert!(result.is_ok());
assert_eq!(result.unwrap(), BencodexValue::Null);
// from_json
use serde_json::from_str;
use bencodex::{ BencodexValue, json::from_json };

let json = from_str("null").unwrap();
let result = from_json(&json);
assert!(result.is_ok());
assert_eq!(result.unwrap(), BencodexValue::Null);

命令行工具

此外,它还提供了一个命令行工具,用于从 Bencodex 到 JSON 的编码以及从 JSON 到 Bencodex 的解码。您可以使用以下命令安装它

cargo install bencodex-rs --features json-cli

您可以使用以下方式使用它

# encode
$ echo -n 'n' | bencodex
null
$ echo -n 'i123e' | bencodex
"123"
$ echo -n '1:\x12' | bencodex
"0x12"
$ echo -n '1:\x12' | bencodex --base64
"b64:Eg=="

# decode
$ echo -n '"123"' | bencodex -d
123
$ echo -n 'null' | bencodex -d
n

依赖项

~0.8–1.5MB
~30K SLoC