#codec #serialization #encode #async #buffer #byte-buffer #required

无需 std async-codec

创建异步编解码器的实用工具

12 个版本

0.4.1 2021年11月21日
0.4.0 2020年10月25日
0.4.0-alpha.42020年2月8日
0.4.0-alpha.22019年7月8日
0.1.2 2018年3月16日

#392异步

28 每月下载量
5 个 Crates 中使用 (4 直接)

MIT/Apache

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

version documentation license

许可证

根据以下之一进行许可

由你选择。

贡献

除非你明确声明,否则根据Apache-2.0许可证定义的,你提交的任何有意包含在工作中的贡献,应如上所述双重许可,不附加任何其他条款或条件。

依赖关系

~0.6–0.9MB
~16K SLoC