Skip to main content

CodecValueEncoder

Struct CodecValueEncoder 

Source
pub struct CodecValueEncoder<C> { /* private fields */ }
Expand description

Encodes one borrowed value into owned units by using a Codec.

CodecValueEncoder is the default bridge from the low-level unchecked Codec contract to the convenience-layer ValueEncoder contract. Each call emits stream-start output through Codec::encode_reset, encodes one value through Codec::encode, finishes encode-side state through Codec::encode_finish, and returns the owned output truncated to the units actually written.

§Type Parameters

  • C: Low-level codec used to encode one value.

§Examples

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

use qubit_codec::Codec;
use qubit_codec::CodecValueEncoder;
use qubit_codec::DecodeFailure;
use qubit_codec::ValueEncoder;

let mut encoder = CodecValueEncoder::new(IdentityCodec);
assert_eq!(encoder.encode(&7_u8).unwrap(), vec![7]);

Implementations§

Source§

impl<C> CodecValueEncoder<C>
where C: Codec,

Source

pub fn new(codec: C) -> Self

Creates an encoder backed by codec.

§Parameters
  • codec: Low-level codec used to encode one value.
§Returns

Returns a value encoder adapter for the supplied codec.

§Compile-Time Checks

Fails to compile when the supplied codec declares a zero decode unit bound or when Codec::MIN_UNITS_PER_VALUE exceeds Codec::MAX_DECODE_UNITS_PER_VALUE. The encode bound may be zero for a fully buffered codec.

Source

pub const fn codec(&self) -> &C

Returns a shared reference to the wrapped codec.

§Returns

The codec borrowed for as long as this adapter is shared, without cloning.

Source

pub fn codec_mut(&mut self) -> &mut C

Returns a mutable reference to the wrapped codec.

The next value operation starts a fresh codec lifecycle, so mutations are applied to the following operation.

§Returns

An exclusive codec borrow that prevents simultaneous adapter operations.

Source

pub fn into_codec(self) -> C

Consumes the adapter and returns its wrapped codec.

§Returns

The owned codec in its current lifecycle state, without resetting it.

Source

pub fn encode_into( &mut self, input: &C::Value, output: &mut Vec<C::Unit>, ) -> Result<usize, TranscodeEncodeErrorOf<C>>
where C::Unit: Default,

Encodes one borrowed value and appends the emitted units to output.

This method is the reusable-buffer counterpart of ValueEncoder::encode. It emits stream-start output through Codec::encode_reset, encodes input through Codec::encode, and finishes encode-side state through Codec::encode_finish, appending only the units actually written. When encoding fails, the vector length is restored to its original value.

§Parameters
  • input: Value to encode.
  • output: Destination vector receiving appended encoded units.
§Returns

Returns the number of units appended to output.

§Errors

Returns the wrapped codec’s encode error when reset output, input, or finish output cannot be represented. Returns a framework error when output length arithmetic overflows or the output allocation fails.

§Panics

Panics when the wrapped codec reports more reset or finish output than its declared bounds, when Codec::encode_len exceeds Codec::MAX_ENCODE_UNITS_PER_VALUE, or when encoding writes a different value width than Codec::encode_len.

Trait Implementations§

Source§

impl<C> Debug for CodecValueEncoder<C>
where C: Codec + Debug,

Source§

fn fmt(&self, formatter: &mut Formatter<'_>) -> Result

Formats the encoder without requiring finished values to be printable.

§Parameters
  • formatter: Destination receiving the wrapped codec description.
§Returns

Ok(()) when the description has been written.

§Errors

Propagates errors from the destination formatter.

Source§

impl<C> Default for CodecValueEncoder<C>
where C: Codec + Default,

Source§

fn default() -> Self

Creates an encoder from the default codec.

§Returns

An adapter owning C::default(), with the same compile-time unit-bound checks as Self::new.

Source§

impl<C> ValueEncoder<<C as Codec>::Value> for CodecValueEncoder<C>
where C: Codec, C::Unit: Default,

Source§

type Output = Vec<<C as Codec>::Unit>

Owned units containing the complete reset/value/finish representation.

Source§

type Error = TranscodeEncodeError<<C as Codec>::EncodeError, <C as Codec>::Value>

Codec-domain failures or framework capacity/allocation failures.

Source§

fn encode(&mut self, input: &C::Value) -> Result<Self::Output, Self::Error>

Encodes one borrowed value into owned units.

§Parameters
  • input: Value to encode.
§Returns

Returns stream-start output followed by the units written for input and any encode-finish output.

§Errors

Returns the wrapped codec’s encode error when reset output, input, or finish output cannot be represented. Also returns framework capacity overflow or allocation failures while preparing the output vector.

§Panics

Panics when the wrapped codec reports more reset or finish output than its declared bounds, or a value width different from Codec::encode_len.

Auto Trait Implementations§

§

impl<C> Freeze for CodecValueEncoder<C>
where C: Freeze,

§

impl<C> RefUnwindSafe for CodecValueEncoder<C>
where C: RefUnwindSafe,

§

impl<C> Send for CodecValueEncoder<C>
where C: Send,

§

impl<C> Sync for CodecValueEncoder<C>
where C: Sync,

§

impl<C> Unpin for CodecValueEncoder<C>
where C: Unpin,

§

impl<C> UnsafeUnpin for CodecValueEncoder<C>
where C: UnsafeUnpin,

§

impl<C> UnwindSafe for CodecValueEncoder<C>
where C: UnwindSafe,

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = !

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, !>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.