bt_bencode

Crates.iobt_bencode
lib.rsbt_bencode
version0.8.1
sourcesrc
created_at2020-02-18 16:15:12.612587
updated_at2024-05-15 19:11:18.325941
descriptionA Bencode encoding/decoding implementation.
homepage
repositoryhttps://github.com/bluk/bt_bencode
max_upload_size
id210344
size277,745
Bryant Luk (bluk)

documentation

https://docs.rs/bt_bencode/

README

BtBencode

BtBencode is a library which can help with Bencode encoding/decoding. Bencode is primarily used in BitTorrent related applications.

It uses the Serde library to serialize and deserialize Bencode data. It is similar to Serde JSON in terms of functionality and implementation.

Examples

An example serializing a standard Rust collection type and then deserializing into a custom type:

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/");

An example deserializing from a slice of bytes into a general Value representation and then from the Value instance into a more strongly typed data structure.

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/");

Installation

cargo add bt_bencode

By default, the std feature is enabled.

Alloc only

If the host environment has an allocator but does not have access to the Rust std library:

cargo add --no-default-features --features alloc bt_bencode

License

Licensed under either of Apache License, Version 2.0 or MIT License at your option.

Contributions

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.

Commit count: 92

cargo fmt