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§
Sourcetype DecodeError
type DecodeError
Domain error type produced by decode internals.
Dyn Compatibility§
This trait is dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety".