pub struct Encoder { /* private fields */ }Expand description
A QPACK encoder.
Implementations§
Source§impl Encoder
impl Encoder
Sourcepub fn new() -> Self
pub fn new() -> Self
Creates a new encoder.
If not configured, this encoder will only make use of a static table.
Once peer’s settings has been received, you might want to allocate
the dynamic table by means of Self::configure.
Examples found in repository?
7fn main() {
8 let (encoded_headers, _) = Encoder::new()
9 .encode_all(StreamId::new(0), HEADERS)
10 .unwrap()
11 .into();
12
13 let decoded_headers = Decoder::new(0, 0)
14 .decode(StreamId::new(0), encoded_headers)
15 .unwrap()
16 .take()
17 .unwrap();
18
19 println!("Decoded header: {:?}", decoded_headers);
20}More examples
7fn main() {
8 let mut encoder = Encoder::new();
9 let sdtc_data = encoder.configure(1024, 1024, 1).unwrap();
10
11 let (encoded_hdr_data, encoded_stream_data) = encoder
12 .encode_all(StreamId::new(0), HEADERS)
13 .unwrap()
14 .into();
15
16 println!("Encoding ratio: {}", encoder.ratio());
17
18 let mut decoder = Decoder::new(1024, 1);
19 decoder.feed(sdtc_data).unwrap();
20
21 let decoder_status = decoder.decode(StreamId::new(0), encoded_hdr_data).unwrap();
22
23 assert!(decoder_status.is_blocked());
24 println!("Decoder blocked. Stream data needed");
25
26 decoder.feed(encoded_stream_data).unwrap();
27
28 let decoded_hdr = decoder
29 .unblocked(StreamId::new(0))
30 .unwrap()
31 .unwrap()
32 .take()
33 .unwrap();
34
35 println!("Decoded header: {:?}", decoded_hdr);
36}Sourcepub fn configure(
&mut self,
max_table_size: u32,
dyn_table_size: u32,
max_blocked_streams: u32,
) -> Result<SDTCInstruction, EncoderError>
pub fn configure( &mut self, max_table_size: u32, dyn_table_size: u32, max_blocked_streams: u32, ) -> Result<SDTCInstruction, EncoderError>
Sets dynamic table size and it applies peer’s settings.
§Returns
SDTC instruction (Set Dynamic Table Capacity) data. This should be transmitted to the peer via encoder stream.
§Notes
dyn_table_sizecan be0to avoid dynamic table.dyn_table_sizecannot be larger thanmax_table_size.
Examples found in repository?
7fn main() {
8 let mut encoder = Encoder::new();
9 let sdtc_data = encoder.configure(1024, 1024, 1).unwrap();
10
11 let (encoded_hdr_data, encoded_stream_data) = encoder
12 .encode_all(StreamId::new(0), HEADERS)
13 .unwrap()
14 .into();
15
16 println!("Encoding ratio: {}", encoder.ratio());
17
18 let mut decoder = Decoder::new(1024, 1);
19 decoder.feed(sdtc_data).unwrap();
20
21 let decoder_status = decoder.decode(StreamId::new(0), encoded_hdr_data).unwrap();
22
23 assert!(decoder_status.is_blocked());
24 println!("Decoder blocked. Stream data needed");
25
26 decoder.feed(encoded_stream_data).unwrap();
27
28 let decoded_hdr = decoder
29 .unblocked(StreamId::new(0))
30 .unwrap()
31 .unwrap()
32 .take()
33 .unwrap();
34
35 println!("Decoded header: {:?}", decoded_hdr);
36}Sourcepub fn encode_all<I, H>(
&mut self,
stream_id: StreamId,
headers: I,
) -> Result<BuffersEncoded, EncoderError>where
I: IntoIterator<Item = H>,
H: TryIntoHeader,
pub fn encode_all<I, H>(
&mut self,
stream_id: StreamId,
headers: I,
) -> Result<BuffersEncoded, EncoderError>where
I: IntoIterator<Item = H>,
H: TryIntoHeader,
Encodes an entire header block (a list of headers).
§Returns
The encoded data (see BuffersEncoded).
§Examples
use ls_qpack::encoder::Encoder;
use ls_qpack::StreamId;
let mut encoder = Encoder::new();
let (enc_hdr, enc_stream) = encoder
.encode_all(
StreamId::new(0),
[(":status", "404"), (":method", "connect")],
)
.unwrap()
.into();Examples found in repository?
7fn main() {
8 let (encoded_headers, _) = Encoder::new()
9 .encode_all(StreamId::new(0), HEADERS)
10 .unwrap()
11 .into();
12
13 let decoded_headers = Decoder::new(0, 0)
14 .decode(StreamId::new(0), encoded_headers)
15 .unwrap()
16 .take()
17 .unwrap();
18
19 println!("Decoded header: {:?}", decoded_headers);
20}More examples
7fn main() {
8 let mut encoder = Encoder::new();
9 let sdtc_data = encoder.configure(1024, 1024, 1).unwrap();
10
11 let (encoded_hdr_data, encoded_stream_data) = encoder
12 .encode_all(StreamId::new(0), HEADERS)
13 .unwrap()
14 .into();
15
16 println!("Encoding ratio: {}", encoder.ratio());
17
18 let mut decoder = Decoder::new(1024, 1);
19 decoder.feed(sdtc_data).unwrap();
20
21 let decoder_status = decoder.decode(StreamId::new(0), encoded_hdr_data).unwrap();
22
23 assert!(decoder_status.is_blocked());
24 println!("Decoder blocked. Stream data needed");
25
26 decoder.feed(encoded_stream_data).unwrap();
27
28 let decoded_hdr = decoder
29 .unblocked(StreamId::new(0))
30 .unwrap()
31 .unwrap()
32 .take()
33 .unwrap();
34
35 println!("Decoded header: {:?}", decoded_hdr);
36}Sourcepub fn encoding(&mut self, stream_id: StreamId) -> EncodingBlock<'_>
pub fn encoding(&mut self, stream_id: StreamId) -> EncodingBlock<'_>
Encodes a list of headers in a sequential fashion way.
This method is similar to Self::encode_all. However, instead of
providing the entire list of header, it is possible to append a header step by step.
See EncodingBlock.
§Examples
use ls_qpack::encoder::Encoder;
use ls_qpack::StreamId;
let mut encoder = Encoder::new();
let mut encoding_block = encoder.encoding(StreamId::new(0));
encoding_block.append((":status", "404"));
encoding_block.append((":method", "connect"));
let (enc_hdr, enc_stream) = encoding_block.encode().unwrap().into();Sourcepub fn ratio(&self) -> f32
pub fn ratio(&self) -> f32
Return estimated compression ratio until this point.
Compression ratio is defined as size of the output divided by the size of the input, where output includes both header blocks and instructions sent on the encoder stream.
Examples found in repository?
7fn main() {
8 let mut encoder = Encoder::new();
9 let sdtc_data = encoder.configure(1024, 1024, 1).unwrap();
10
11 let (encoded_hdr_data, encoded_stream_data) = encoder
12 .encode_all(StreamId::new(0), HEADERS)
13 .unwrap()
14 .into();
15
16 println!("Encoding ratio: {}", encoder.ratio());
17
18 let mut decoder = Decoder::new(1024, 1);
19 decoder.feed(sdtc_data).unwrap();
20
21 let decoder_status = decoder.decode(StreamId::new(0), encoded_hdr_data).unwrap();
22
23 assert!(decoder_status.is_blocked());
24 println!("Decoder blocked. Stream data needed");
25
26 decoder.feed(encoded_stream_data).unwrap();
27
28 let decoded_hdr = decoder
29 .unblocked(StreamId::new(0))
30 .unwrap()
31 .unwrap()
32 .take()
33 .unwrap();
34
35 println!("Decoded header: {:?}", decoded_hdr);
36}