🦔

【Rust】ls-qpack でヘッダーを QPACK 形式に圧縮する

2024/05/05に公開

Rust のプロジェクトをつくり、ls-qpack を追加する

cargo init
cargo add ls-qpack

コードを貼る

src/main.rs
use ls_qpack::decoder::Decoder;
use ls_qpack::encoder::Encoder;
use ls_qpack::StreamId;

const HEADERS: [(&str, &str); 2] = [(":status", "404"), ("foo", "bar")];

fn main() {

    println!("Original header: {:?}", HEADERS);

    let (encoded_headers, _) = Encoder::new()
        .encode_all(StreamId::new(0), HEADERS)
        .unwrap()
        .into();

    println!("Eecoded header: {:?}", encoded_headers);

    let decoded_headers = Decoder::new(0, 0)
        .decode(StreamId::new(0), encoded_headers)
        .unwrap()
        .take()
        .unwrap();

    println!("Decoded header: {:?}", decoded_headers);
}

ビルドして実行してみる

cargo build
cargo run
    Finished dev [unoptimized + debuginfo] target(s) in 0.03s
     Running `target/debug/rust-project`
Original header: [(":status", "404"), ("foo", "bar")]
Eecoded header: [0, 0, 219, 42, 148, 231, 3, 98, 97, 114]
Decoded header: [Header { name: ":status", value: "404" }, Header { name: "foo", value: "bar" }]

Discussion