Skip to main content

TranscodeDecoder

Trait TranscodeDecoder 

Source
pub trait TranscodeDecoder: Transcoder<Error = TranscodeDecodeError<Self::DecodeError>> {
    type DecodeError;
}
Expand description

Decodes encoded units into logical values over caller-provided buffers.

TranscodeDecoder refines Transcoder for implementations whose input is the encoded unit stream and whose output is the logical value stream. The trait adds no methods; it exists to make generic bounds distinguish decoding direction from encoding and unit-to-unit conversion.

The word “buffered” describes the caller-managed buffer and progress model. It does not require the implementor to own an internal buffer.

§Examples

use core::convert::Infallible;
use core::num::NonZeroUsize;

use qubit_codec::Codec;
use qubit_codec::CodecTranscodeDecoder;
use qubit_codec::DecodeFailure;
use qubit_codec::TranscodeDecoder;
use qubit_codec::Transcoder;

fn accepts_decoder<D: TranscodeDecoder>(_: &D) {}
let mut decoder = CodecTranscodeDecoder::new(IdentityCodec);
accepts_decoder(&decoder);
let mut values = [0_u8; 1];
decoder.reset(&mut values, 0).unwrap();
let progress = decoder.transcode(&[7_u8], 0, &mut values, 0).unwrap();
assert_eq!(progress.read(), 1);
assert_eq!(progress.written(), 1);
assert_eq!(values, [7]);

Required Associated Types§

Source

type DecodeError

Error type produced by the underlying codec or decode policy.

TranscodeDecodeError wraps this error with transcode context.

Dyn Compatibility§

This trait is dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety".

Implementors§