5个版本 (稳定版)
3.0.0 | 2020年9月7日 |
---|---|
2.1.0 | 2019年3月4日 |
2.0.0 | 2019年2月28日 |
1.0.0 | 2018年10月10日 |
0.1.0 | 2018年10月10日 |
在编码类别中排名第1436
每月下载量8,356次
被11个crate使用(直接使用5个)
7KB
codicon
编码和解码特质。
这个crate提供了用于编码和解码到std::io::Read
或std::io::Write
类型的泛型特质。
我们经常需要表达一个类型可以被编码或解码。我们还需要一种方法来表达编码或解码的类型以及可能用于该编码或解码的参数。这个小crate解决了这个问题。
示例
假设我们想让u8
能够以一个(虚构的)格式Foo
进行编码,这个格式只是简单地写入字节而不做修改。我们可以这样表达这个编码:
use codicon::*;
struct Foo;
impl Encoder<Foo> for u8 {
type Error = std::io::Error;
fn encode(&self, mut writer: impl Write, params: Foo) -> std::io::Result<()> {
writer.write_all(std::slice::from_ref(self))?;
Ok(())
}
}
let mut buf = [0u8; 1];
7u8.encode(&mut buf.as_mut(), Foo).unwrap();
assert_eq!(buf[0], 7u8);
注意我们使用了单元结构,因为Foo
编码不需要任何选项。但如果你想指定编码选项,你可以创建一个带参数的类型。
解码的工作方式与编码相同
use codicon::*;
struct Foo;
impl Decoder<Foo> for u8 {
type Error = std::io::Error;
fn decode(mut reader: impl Read, params: Foo) -> std::io::Result<Self> {
let mut byte = 0u8;
reader.read_exact(std::slice::from_mut(&mut byte))?;
Ok(byte)
}
}
let buf = [7u8; 1];
assert_eq!(u8::decode(&mut buf.as_ref(), Foo).unwrap(), 7u8);
许可证:Apache-2.0