pub struct Decoder { /* private fields */ }Expand description
A QPACK decoder.
Implementations§
Source§impl Decoder
impl Decoder
Sourcepub fn new(dyn_table_size: u32, max_blocked_streams: u32) -> Self
pub fn new(dyn_table_size: u32, max_blocked_streams: u32) -> Self
Creates a new decoder.
Specify the size of the dynamic table (it might be 0).
And the max number of blocked streams.
Examples found in repository?
examples/simple.rs (line 13)
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
examples/dyn_table.rs (line 18)
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 decode<D>(
&mut self,
stream_id: StreamId,
data: D,
) -> Result<DecoderOutput, DecoderError>
pub fn decode<D>( &mut self, stream_id: StreamId, data: D, ) -> Result<DecoderOutput, DecoderError>
Decodes header data.
It produces an output, see DecoderOutput.
It might happen that the data provided to this method are not sufficient in order
to complete the decoding operation.
In that case, more data are needed from the encoder stream (via Decoder::feed).
§Examples
use ls_qpack::decoder::Decoder;
use ls_qpack::StreamId;
let mut decoder = Decoder::new(0, 0);
let output = decoder.decode(StreamId::new(0), data).unwrap();Examples found in repository?
examples/simple.rs (line 14)
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
examples/dyn_table.rs (line 21)
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 feed<D>(&mut self, data: D) -> Result<(), DecoderError>
pub fn feed<D>(&mut self, data: D) -> Result<(), DecoderError>
Feeds data from encoder’s buffer stream.
Examples found in repository?
examples/dyn_table.rs (line 19)
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 unblocked(
&mut self,
stream_id: StreamId,
) -> Option<Result<DecoderOutput, DecoderError>>
pub fn unblocked( &mut self, stream_id: StreamId, ) -> Option<Result<DecoderOutput, DecoderError>>
Checks whether a header block for a StreamId has become unblocked.
§Returns
Noneif theStreamIdhas never been fed.Someif theStreamIdproduced anDecoderOutput.
Examples found in repository?
examples/dyn_table.rs (line 29)
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}Auto Trait Implementations§
impl Freeze for Decoder
impl RefUnwindSafe for Decoder
impl !Send for Decoder
impl !Sync for Decoder
impl Unpin for Decoder
impl UnwindSafe for Decoder
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more