#codec #enums #bencode #deserialize #decoder #encoder #rustc-serialize

simple_bencode

Simple bencode 编码器和解码器,不使用 rustc-serialize 或 Serde。相反,它使用一个4分支枚举从/到树进行序列化和反序列化。

5个版本

使用旧的Rust 2015

0.1.4 2016年12月31日
0.1.3 2016年12月26日
0.1.2 2016年12月26日
0.1.1 2016年12月26日
0.1.0 2016年12月26日

2080编码

22 每月下载
fcp_switching 中使用

MIT 许可证

15KB
298

rust-simple-bencode

Simple bencode 编码器和解码器,不使用 rustc-serialize 或 Serde。相反,它使用一个4分支枚举从/到树进行序列化和反序列化。

基本用法

这个库主要由 readwrite 函数组成,这些函数将枚举序列化和反序列化

pub enum Value {
    String(Vec<u8>),
    Integer(i64),
    List(Vec<Value>),
    Dictionary(HashMap<Vec<u8>, Value>),
}

这些函数的签名是

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>;

其中 DecodeError 定义如下

pub enum DecodeError {
    IOError(io::Error),
    UnexpectedEndOfBuffer,
    UnexpectedCharacter(String)
}

与字节数组一起工作

如果您正在处理字节数组,以下快捷方式可能对您有帮助

pub fn decode(sl: &[u8]) -> Result<Value, DecodeError>;
pub fn encode(v: &Value) -> Vec<u8>;

## 处理 Value 的辅助函数

因为一些读取 Value 的操作很常见,这个库提供了一些辅助函数来避免错误处理样板代码

pub enum HelperDecodeError {
    BencodeDecodeError(DecodeError),
    BadType(String),
    MissingKey(String),
    FromUtf8Error(FromUtf8Error),
}

/// Pops a BValue::Integer from a HashMap.
pub fn pop_value_integer(map: &mut HashMap<Vec<u8>, Value>, key: String) -> Result<i64, HelperDecodeError>;

/// Pops a BValue::String from a HashMap.
pub fn pop_value_bytestring(map: &mut HashMap<Vec<u8>, Value>, key: String) -> Result<Vec<u8>, HelperDecodeError>;

/// Pops an optional BValue::String from a HashMap.
pub fn pop_value_bytestring_option(map: &mut HashMap<Vec<u8>, Value>, key: String) -> Result<Option<Vec<u8>>, HelperDecodeError>;

/// Pops a BValue::String from a HashMap and decode it into a Rust String.
pub fn pop_value_utf8_string(map: &mut HashMap<Vec<u8>, Value>, key: String) -> Result<String, HelperDecodeError>;

/// Pops an optional BValue::String from a HashMap and decode it into a Rust String.
pub fn pop_value_utf8_string_option(map: &mut HashMap<Vec<u8>, Value>, key: String) -> Result<Option<String>, HelperDecodeError>;

没有运行时依赖