#codec #encoder #serialization #decoder #async-io #byte #protocols

bytecodec

A tiny framework for implementing encoders/decoders of byte-oriented protocols

45 releases

0.4.15 Jul 22, 2021
0.4.13 Jan 6, 2020
0.4.12 Oct 3, 2019
0.4.11 Sep 10, 2018
0.4.6 Jul 30, 2018

#266 in Encoding

Download history 16917/week @ 2024-08-12 17179/week @ 2024-08-19 16817/week @ 2024-08-26 19879/week @ 2024-09-02 15048/week @ 2024-09-09 15949/week @ 2024-09-16 15154/week @ 2024-09-23 15749/week @ 2024-09-30 20041/week @ 2024-10-07 19033/week @ 2024-10-14 17349/week @ 2024-10-21 17389/week @ 2024-10-28 11732/week @ 2024-11-04 15011/week @ 2024-11-11 12266/week @ 2024-11-18 13867/week @ 2024-11-25

53,604 downloads per month
Used in 44 crates (38 directly)

MIT license

210KB
4K SLoC

bytecodec

bytecodec Documentation Actions Status Coverage Status License: MIT

A tiny Rust framework for implementing encoders/decoders of byte-oriented protocols.

Documentation

Features

  • Suited for byte-oriented protocols
  • Incremental encoding/decoding:
    • Encode and Decode traits support incremental encoding and decoding
    • The number of bytes consumed in an execution of encode/decode methods can be completely controlled by the caller
    • This property makes it easy to implement, for example, multi-stream multiplexing, transmittin rate control and asynchronous I/O
  • Composable:
    • By combining multiple encoders (or decoders), it is easy to build a more complex encoder (or decoder)
    • See the examples of EncodeExt and DecodeExt traits
  • Reduced number of memory copies:
    • In design, only two memory copies are required
    • Considering in the decode process, one is the copy from the actual stream (e.g., TCP socket) to the decoding buffer, the other one is the copy to construct the item from the buffer.
  • Supports some serde implemention crates:
    • Currently serde_json and bincode are supported (as optional featuers)
    • See json_codec and bincode_codec modules
  • Easily adapt to synchronous I/O, asynchronous I/O, UDP, etc
  • Trackable errors:
    • By using trackable crate, the location where an error occurred can be easily specified
    • See EncodeExt::map_err and DecodeExt::map_err methods

Dependencies

~1.4–7.5MB
~65K SLoC