# BtBencode BtBencode is a library which can help with [Bencode][wikipedia_bencode] encoding/decoding. Bencode is primarily used in [BitTorrent][bep_0003] related applications. It uses the [Serde][serde] library to serialize and deserialize Bencode data. It is similar to [Serde JSON][serde_json] in terms of functionality and implementation. * [Latest API Documentation][docs_rs_bt_bencode] ## Examples An example serializing a standard Rust collection type and then deserializing into a custom type: ```rust use std::collections::BTreeMap; use serde_derive::Deserialize; let mut dict: BTreeMap = 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. ```rust 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 ```sh 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: ```sh cargo add --no-default-features --features alloc bt_bencode ``` ## License Licensed under either of [Apache License, Version 2.0][LICENSE_APACHE] or [MIT License][LICENSE_MIT] 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. [LICENSE_APACHE]: LICENSE-APACHE [LICENSE_MIT]: LICENSE-MIT [wikipedia_bencode]: https://en.wikipedia.org/wiki/Bencode [bep_0003]: http://www.bittorrent.org/beps/bep_0003.html [serde]: https://serde.rs [serde_json]: https://github.com/serde-rs/json [docs_rs_bt_bencode]: https://docs.rs/bt_bencode/latest/bt_bencode/