Skip to main content

Crate zerodds_http2

Crate zerodds_http2 

Source
Expand description

Crate zerodds-http2. Safety classification: STANDARD.

HTTP/2 (RFC 9113) wire codec — no_std framing + stream state machine + flow control + connection preface + settings. forbid(unsafe_code). Implements the HTTP/2 wire layer without heap buffering or an async runtime: frames are encoded to / decoded from byte slices, and the state machine is callback-based.

Note: RFC 9113 (HTTP/2) superseded RFC 7540, keeping the wire format and most § numbers while removing a few unused features (priority, hint directives). This crate follows RFC 9113.

Spec: RFC 9113 §3 (connection preface) + §4 (frame layer) + §5 (streams + multiplexing) + §6 (frame definitions) + §7 (error codes).

§Layer position

Layer 5 — bridges. Substrate for:

§Public API (as of 1.0.0-rc.1)

§Example

use zerodds_http2::{FrameHeader, FrameType, Flags, encode_frame, decode_frame};
use zerodds_http2::frame::DEFAULT_MAX_FRAME_SIZE;

// PING frame (8-byte opaque payload, stream ID 0).
let payload = [0u8; 8];
let header = FrameHeader {
    length: 8,
    frame_type: FrameType::Ping,
    flags: Flags(0),
    stream_id: 0,
};

let mut buf = [0u8; 17]; // 9-byte header + 8-byte payload
let written = encode_frame(&header, &payload, &mut buf, DEFAULT_MAX_FRAME_SIZE)
    .expect("encode");
assert_eq!(written, 17);

let (decoded, consumed) = decode_frame(&buf, DEFAULT_MAX_FRAME_SIZE).expect("decode");
assert_eq!(consumed, 17);
assert_eq!(decoded.header.frame_type, FrameType::Ping);

Re-exports§

pub use error::ErrorCode;
pub use error::Http2Error;
pub use flow::FlowControl;
pub use frame::Flags;
pub use frame::Frame;
pub use frame::FrameHeader;
pub use frame::FrameType;
pub use frame::decode_frame;
pub use frame::encode_frame;
pub use preface::CLIENT_PREFACE;
pub use preface::check_preface;
pub use settings::Setting;
pub use settings::SettingId;
pub use settings::Settings;
pub use stream::StreamId;
pub use stream::StreamState;

Modules§

error
HTTP/2 error codes — RFC 9113 §7.
flow
Flow control — RFC 9113 §5.2 + §6.9.
frame
Frame layer — RFC 9113 §4 + §6.
preface
Connection preface — RFC 9113 §3.4.
settings
SETTINGS frame — RFC 9113 §6.5.
stream
Stream state machine — RFC 9113 §5.1.