Skip to main content

Crate cobs_codec_rs

Crate cobs_codec_rs 

Source
Expand description

Consistent Overhead Byte Stuffing (COBS) and COBS/R for Rust.

COBS encodes an arbitrary byte sequence into one that contains no zero (0x00) bytes, at a small and predictable cost: at most one extra byte per 254 bytes, plus one. That makes a single 0x00 a reliable packet delimiter for serial/UART, USB, TCP and other byte streams, which is why COBS is popular in embedded and robotics protocols.

This crate is #![no_std] and dependency-free. The core cobs and cobsr encode/decode functions work on caller-provided slices, with *_with_sentinel variants for a non-0x00 delimiter and cobs::decode_in_place for zero-copy decoding. The allocation-free framing::StreamDecoder reassembles delimited frames into a fixed buffer. The alloc feature (enabled by default via std) adds *_to_vec conveniences and the owned-Vec framing::FrameDecoder.

§Example

use cobs_codec_rs::cobs;

let encoded = cobs::encode_to_vec(&[0x11, 0x22, 0x00, 0x33]);
assert_eq!(encoded, [0x03, 0x11, 0x22, 0x02, 0x33]); // no 0x00
assert_eq!(cobs::decode_to_vec(&encoded).unwrap(), [0x11, 0x22, 0x00, 0x33]);

§no_std usage

use cobs_codec_rs::{cobs, max_encoded_len};

let src = [0x11, 0x00, 0x22];
let mut buf = [0u8; 16]; // >= max_encoded_len(src.len())
let n = cobs::encode(&src, &mut buf);
assert_eq!(&buf[..n], &[0x02, 0x11, 0x02, 0x22]);

See “Consistent Overhead Byte Stuffing” by Stuart Cheshire and Mary Baker, IEEE/ACM Transactions on Networking, Vol. 7, No. 2, April 1999.

Modules§

cobs
Basic Consistent Overhead Byte Stuffing (COBS).
cobsr
Consistent Overhead Byte Stuffing, Reduced (COBS/R).
framing
Packet framing helpers built on top of COBS.

Enums§

DecodeError
An error returned when decoding fails.

Constants§

DELIMITER
The byte value used to delimit COBS-encoded frames on the wire.
MAX_BLOCK_LEN
The largest number of source bytes a single COBS code block can carry without emitting an overhead byte.

Functions§

encoding_overhead
Returns the maximum encoding overhead, in bytes, that COBS or COBS/R can add when encoding a message of source_len bytes.
max_encoded_len
Returns the maximum possible length, in bytes, of the COBS (or COBS/R) encoding of a message of source_len bytes. Useful for sizing an encode buffer.