zerodds-hpack 1.0.0-rc.1

HPACK (RFC 7541) Header-Compression-Codec fuer HTTP/2 — no_std, Static+Dynamic-Table, Integer/String/Huffman-Coding.
Documentation
  • Coverage
  • 100%
    61 out of 61 items documented1 out of 38 items with examples
  • Size
  • Source code size: 59.89 kB This is the summed size of all the files inside the crates.io package for this release.
  • Documentation size: 1.16 MB This is the summed size of all files generated by rustdoc for all configured targets
  • Ø build duration
  • this release: 8s Average build duration of successful builds.
  • all releases: 8s Average build duration of successful builds in releases after 2024-10-23.
  • Links
  • Homepage
  • zero-objects/zero-dds
    2 1 0
  • crates.io
  • Dependencies
  • Versions
  • Owners
  • SandraK82

zerodds-hpack

License: Apache-2.0 docs.rs

HPACK (RFC 7541) Header-Compression-Codec fuer HTTP/2: Variable- Length-Integer, String-Literals (mit/ohne Huffman, Appendix B), Static-Table (61 Eintraege, Appendix A), Dynamic-Table mit SETTINGS_HEADER_TABLE_SIZE-Lifecycle und alle vier Header-Field- Repraesentationen aus §6. no_std + alloc, forbid(unsafe_code). Safety classification: STANDARD.

Spec-Mapping

Spec Abschnitt
RFC 7541 (HPACK) §2.3 (Indexing-Tables), §4 (Dynamic-Table-Management), §5.1 (Integer), §5.2 (String-Literals), §6.1 (Indexed-Header), §6.2.1 (Literal-with-Indexing), §6.2.2 (Literal-without-Indexing), §6.2.3 (Literal-Never-Indexed), §6.3 (Dynamic-Table-Size-Update), Appendix A (Static-Table), Appendix B (Huffman)

Was ist drin

  • Encoder / Decoder — High-Level-Codec mit eigener Dynamic- Table und Indexing-Strategie (Voll-Match → indexed; Name-Only → literal-with-indexing-indexed-name; sonst → literal-with-indexing- new-name).
  • Table / HeaderField — Combined-Lookup ueber Static + Dynamic (Index 1..=61 = Static, 62..N = Dynamic), Eviction per Spec §4.4 (Single-Entry-Too-Large clears die Tabelle).
  • STATIC_TABLE / StaticTableEntry — die 61 Appendix-A-Eintraege als &'static-Konstante.
  • encode_integer / decode_integer — Variable-Length-Integer mit konfigurierbarer Prefix-Bit-Position (§5.1).
  • encode_string / decode_string — String-Literal mit optional Huffman-Compression (§5.2).
  • huffman::encode / huffman::decode — Static-Huffman-Code aus Appendix B mit EOS-Padding-Detection.

Schichten-Position

Layer 5 — Bridges. Substrat fuer:

Quickstart

use zerodds_hpack::{Decoder, Encoder, HeaderField};

let mut encoder = Encoder::new();
let mut decoder = Decoder::new();

let headers = vec![
    HeaderField { name: ":method".into(), value: "GET".into() },
    HeaderField { name: ":scheme".into(), value: "https".into() },
    HeaderField { name: "custom-key".into(), value: "custom-value".into() },
];

let wire = encoder.encode(&headers);
let decoded = decoder.decode(&wire).expect("roundtrip");
assert_eq!(decoded, headers);

Huffman-Compression aktivieren:

use zerodds_hpack::Encoder;

let mut encoder = Encoder::new();
encoder.use_huffman = true;

Dynamic-Table-Size konfigurieren (z.B. wenn HTTP/2-Peer SETTINGS_HEADER_TABLE_SIZE schickt):

use zerodds_hpack::Decoder;

let mut decoder = Decoder::with_max_size(8192);
decoder.table_mut().set_max_size(4096);

Feature-Flags

Feature Default Zweck
std std::error::Error fuer alle Fehler-Typen.
alloc ✅ (via std) Vec / String / VecDeque.

Crate ist no_std-fahig: default-features = false, features = ["alloc"].

Stabilitaet

1.0.0-rc.1 ist die initiale Release-Materialisierung. Public-API, Wire-Format (RFC 7541) und Fehler-Diskriminanten sind RC1-stabil; Breaking-Changes erfordern Major-Bump.

Tests

cargo test -p zerodds-hpack

49 Unit-Tests: Integer-Coding (8, davon 3 RFC-7541-Appendix-C-1- Vektoren), String-Coding (7, inkl. Huffman-Roundtrip), Huffman (7), Table-Management (14), Encoder (7), Decoder (8 inkl. RFC-7541-Appendix- C-2.1-Vektor + Dynamic-Table-Size-Update + Invalid-Index-Rejection).

Lizenz

Apache-2.0. Siehe LICENSE.

Siehe auch