Simple bencode decoder and decoder, that uses neither rustc-serialize or Serde. Instead, it serializes from / deserializes to a tree using a 4-branch enum."
This library is mainly composed of the read
and write
function, which serialize from and deserialize to this enum:
rust
pub enum Value {
String(Vec<u8>),
Integer(i64),
List(Vec<Value>),
Dictionary(HashMap<Vec<u8>, Value>),
}
The signature of these functions are:
rust
pub fn read<R: io::Read>(bytes: &mut Peekable<io::Bytes<R>>) -> Result<Value, DecodeError>;
pub fn write<W: io::Write>(v: &Value, writer: &mut W) -> Result<(), io::Error>;
where DecodeError
is defined like this:
rust
pub enum DecodeError {
IOError(io::Error),
UnexpectedEndOfBuffer,
UnexpectedCharacter(String)
}
If you work with byte arrays, these shortcuts should be useful to you:
rust
pub fn decode(sl: &[u8]) -> Result<Value, DecodeError>;
pub fn encode(v: &Value) -> Vec<u8>;
Value
Because some operations to read Value
are common, this library provides helpers to avoid error-handling boilerplate:
```rust pub enum HelperDecodeError { BencodeDecodeError(DecodeError), BadType(String), MissingKey(String), FromUtf8Error(FromUtf8Error), }
/// Pops a BValue::Integer from a HashMap.
pub fn popvalueinteger(map: &mut HashMap
/// Pops a BValue::String from a HashMap.
pub fn popvaluebytestring(map: &mut HashMap
/// Pops a BValue::String from a HashMap and decode it into a Rust String.
pub fn popvalueutf8_string(map: &mut HashMap