12 个版本
0.4.1 | 2021年11月21日 |
---|---|
0.4.0 | 2020年10月25日 |
0.4.0-alpha.4 | 2020年2月8日 |
0.4.0-alpha.2 | 2019年7月8日 |
0.1.2 | 2018年3月16日 |
#392 在 异步
28 每月下载量
在 5 个 Crates 中使用 (4 直接)
36KB
624 行
异步编解码器助手
有关先前的艺术,请参阅 tokio-codec。这借鉴了许多起源于那里的想法,尽管采用了更简单且与 no_std
兼容的方法。编解码器 [Encode] 或 [Decode] 特性的实现者不需要进行任何分配,这使得它们适用于嵌入式应用程序。
编码器
编码器是实现了 [Encode] 特性的类型。该特性的消费者将提供一个要编码的 Item
,以及一个应将结果字节放入其中的缓冲区。编码器可以从该操作返回三种之一
EncodeResult::Ok(n)
:项目已成功编码到提供的缓冲区,并占用n
字节。EncodeResult::Err(e)
:编码项目时发生了不可恢复的错误。对相同项目的后续调用应返回相同的错误。EncodeResult::Overflow(n)
:可以编码项目,但编码表示形式会超出缓冲区。如果n > 0
,则需要长度为n
的缓冲区来保存序列化项目。
当遇到Overflow
结果时,调用者应分配更大的缓冲区(如果可能),然后再次尝试操作。Encode
实现可能将先前编码的Item
保留在内部缓冲区中,以使重试编码的成本更低。如果采用此方法,则必须实现Encode::reset方法。
解码器
解码器实现了[Decode]特质。为了解码一个Item
,调用者向解码器提供一个包含来自流的字节的缓冲区。解码器返回一个指示它已从缓冲区中消耗了一定数量的字节的usize
,以及以下三种结果之一
DecodeResult::Ok(item)
:成功解码了item
DecodeResult::Err(e)
:在解码项目时发生了错误。这并不一定使流无效。DecodeResult::UnexpectedEnd
:没有足够的数据进行解码,调用者应读取更多数据并使用更多字节再次尝试。
解码器可以自由地在返回UnexpectedEnd
结果时按行消耗字节,并保留迄今为止已读取的运行内部缓冲区,或者可以选择一次性消耗Item
的字节。它们还应在错误情况下消耗字节,以确保调用者不会两次提供相同的不良数据。
帧化
类型[Framed]为AsyncRead + AsyncWrite
流提供了一个包装器,将Encode + Decode
对象应用于创建异步的Stream + Sink
流,其中包含Item
。
许可证
根据以下之一进行许可
- Apache License,版本2.0,(LICENSE-APACHE或https://apache.ac.cn/licenses/LICENSE-2.0)
- MIT许可证(LICENSE-MIT或http://opensource.org/licenses/MIT)
由你选择。
贡献
除非你明确声明,否则根据Apache-2.0许可证定义的,你提交的任何有意包含在工作中的贡献,应如上所述双重许可,不附加任何其他条款或条件。
依赖关系
~0.6–0.9MB
~16K SLoC