wire-codec 0.5.0

Binary frame codec and protocol codec toolkit. Length-prefixed, delimiter-based, and custom framing strategies. Built-in varint, zigzag, bitfield, and packed struct encoding. Runtime-agnostic foundation under network-protocol crates.
Documentation
# Changelog

All notable changes to `wire-codec` will be documented in this file.

The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

---

## [Unreleased]

### Added

### Changed

### Fixed

### Security

---

## [0.5.0] - 2026-05-21

### Added

- Property-test suite (`proptest`) covering varint round-trip, zigzag inverse,
  framer round-trip, bitfield round-trip, and panic-freedom on arbitrary byte
  input.
- Integration test suite (`tests/integration_protocols.rs`) covering:
  partial-delivery length-prefixed streams, newline-delimited line protocols,
  HTTP-style CR/LF request parsing, two-layer length-prefixed + varint record
  pipelines, and back-pressure semantics.
- Bench harness with zero-dependency manual timing (`benches/codec.rs`,
  `benches/framing.rs`). Reports nanoseconds per operation for the varint,
  zigzag, buffer, and framing primitives.
- Three runnable examples under `examples/`: `length_prefixed_echo`,
  `newline_protocol`, `varint_record`.
- `proptest = ">=1, <1.6"` as a dev-dependency (capped below 1.6 so the
  `cargo test` build resolves on MSRV 1.75).
- `.github` CI cache step updated to `actions/cache@v5` to retire the Node 20
  deprecation warning.
- `.gitattributes` pinning all text files to LF on checkout, so Windows CI
  matches `rustfmt.toml`'s `newline_style = "Unix"`.

### Changed

- Documentation surface is unchanged; existing rustdoc covered the new
  invariants without revision.

### Fixed

- `clippy.toml`: removed `allow-panic-in-tests`, `allow-dbg-in-tests`, and
  `allow-print-in-tests` (added after MSRV 1.75); kept the two pre-1.75
  options (`allow-unwrap-in-tests`, `allow-expect-in-tests`).
- `varint::encoded_len_*` allow attributes now use
  `#[allow(unknown_lints, clippy::manual_div_ceil)]` so older clippy releases
  silently skip the unknown lint instead of failing.

---

## [0.2.0] - 2026-05-21

### Added

- Public error type `Error` with `Result<T>` alias.
- Zero-copy cursor primitives `ReadBuf` and `WriteBuf` for borrowed byte slices.
- Codec trait pair `Encode` and `Decode<'de>` with a blanket impl for `u8`.
- LEB128 unsigned varint module (`varint::{encode_u32, encode_u64, decode_u32, decode_u64, encoded_len_u32, encoded_len_u64, MAX_LEN_U16, MAX_LEN_U32, MAX_LEN_U64}`).
- Zigzag signed-integer module (`zigzag::{encode_i32, decode_i32, encode_i64, decode_i64}`), all `const fn`.
- Packed-bit cursors `BitReader` and `BitWriter`, big-endian (MSB-first) bit order.
- Framing module with `Framer` trait, `Frame<'a>` envelope, `LengthPrefixed`
  (u8 / u16 / u32 width, big or little endian), and `Delimited` (single or
  multi-byte delimiter).
- End-to-end smoke test exercising encode + framing + decode in one pipeline.
- API reference at `docs/API.md`.
- Release note at `docs/release/v0.2.0.md`.

### Changed

- Edition lowered from 2024 to 2021 to match the declared MSRV of 1.75.

---

## [0.1.0] - 2026-05-18

### Added

- Initial scaffold and repository bootstrap.
- REPS compliance baseline.
- CI for Linux/macOS/Windows on stable and MSRV (1.75).

[Unreleased]: https://github.com/jamesgober/wire-codec/compare/v0.5.0...HEAD
[0.5.0]: https://github.com/jamesgober/wire-codec/compare/v0.2.0...v0.5.0
[0.2.0]: https://github.com/jamesgober/wire-codec/compare/v0.1.0...v0.2.0
[0.1.0]: https://github.com/jamesgober/wire-codec/releases/tag/v0.1.0