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

Download history 4430/week @ 2024-03-14 1738/week @ 2024-03-21 1672/week @ 2024-03-28 1353/week @ 2024-04-04 1893/week @ 2024-04-11 2247/week @ 2024-04-18 2112/week @ 2024-04-25 1752/week @ 2024-05-02 1517/week @ 2024-05-09 1921/week @ 2024-05-16 1712/week @ 2024-05-23 1867/week @ 2024-05-30 1920/week @ 2024-06-06 2105/week @ 2024-06-13 2506/week @ 2024-06-20 1510/week @ 2024-06-27

每月下载量8,356
11个crate使用(直接使用5个)

Apache-2.0许可

7KB

Workflow Status Average time to resolve an issue Percentage of issues still open Maintenance

codicon

编码和解码特质。

这个crate提供了用于编码和解码到std::io::Readstd::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

无运行时依赖