pub trait TranscodeEncoder: Transcoder<Error = TranscodeEncodeError<Self::EncodeError, <Self as Transcoder>::Input>> {
type EncodeError;
}Expand description
Encodes logical values into encoded units over caller-provided buffers.
TranscodeEncoder refines Transcoder for implementations whose
input is the logical value stream and whose output is the encoded unit
stream. The trait adds no methods; it exists to make generic bounds
distinguish encoding direction from decoding 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. An encoder
may retain consumed input internally, but Transcoder::transcode must
consume every visible input value before returning
crate::TranscodeStatus::Complete and must never return
crate::TranscodeStatus::NeedInput. It returns
crate::TranscodeStatus::NeedOutput when more output capacity is needed;
Transcoder::finish emits any retained output after the caller has
supplied the complete logical input stream.
§Examples
use core::convert::Infallible;
use core::num::NonZeroUsize;
use qubit_codec::Codec;
use qubit_codec::CodecTranscodeEncoder;
use qubit_codec::DecodeFailure;
use qubit_codec::TranscodeEncoder;
use qubit_codec::Transcoder;
struct ByteCodec;
impl Codec for ByteCodec {
type Value = u8;
type Unit = u8;
type DecodeError = Infallible;
type EncodeError = Infallible;
const MIN_UNITS_PER_VALUE: usize = 1;
const MAX_ENCODE_UNITS_PER_VALUE: usize = 1;
const MAX_DECODE_UNITS_PER_VALUE: usize = 1;
unsafe fn decode(&mut self, input: &[u8], index: usize)
-> Result<(u8, NonZeroUsize), DecodeFailure<Infallible>>
{
Ok((input[index], NonZeroUsize::MIN))
}
unsafe fn encode(&mut self, value: &u8, output: &mut [u8], index: usize)
-> Result<usize, Infallible>
{
output[index] = *value;
Ok(1)
}
}
fn accepts_encoder<E: TranscodeEncoder>(_: &E) {}
let mut encoder = CodecTranscodeEncoder::new(ByteCodec);
accepts_encoder(&encoder);
let mut output = [0; 2];
let written = encoder.transcode_complete_into(&[1, 2], &mut output).unwrap();
assert_eq!(written, 2);
assert_eq!(output, [1, 2]);Required Associated Types§
Sourcetype EncodeError
type EncodeError
Error type produced by the encoding implementation for a logical input value.
The transcoder’s Transcoder::Error carries this type inside
TranscodeEncodeError::Domain; framework failures and unencodable
values are represented by separate variants.
Dyn Compatibility§
This trait is dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety".