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 中使用
15KB
298 行
rust-simple-bencode
Simple bencode 编码器和解码器,不使用 rustc-serialize 或 Serde。相反,它使用一个4分支枚举从/到树进行序列化和反序列化。
基本用法
这个库主要由 read
和 write
函数组成,这些函数将枚举序列化和反序列化
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>;