pub struct Base64QuantumCodec { /* private fields */ }Expand description
Encodes and decodes one complete Base64 quantum.
A quantum maps exactly three raw bytes to four Base64 units. It does not
handle final short input groups or = padding; callers that process streams
must finalize those cases in a transcoder or facade layer.
§Examples
use qubit_codec::Codec;
use qubit_codec_misc::Base64QuantumCodec;
let mut codec = Base64QuantumCodec::standard();
let mut encoded = [0; 4];
// SAFETY: `encoded` has room for the four units written by one quantum.
let written = unsafe { codec.encode(b"Man", &mut encoded, 0) }
.expect("three bytes can be encoded");
assert_eq!(written, 4);
assert_eq!(&encoded, b"TWFu");Implementations§
Trait Implementations§
Source§impl Clone for Base64QuantumCodec
impl Clone for Base64QuantumCodec
Source§impl Codec for Base64QuantumCodec
impl Codec for Base64QuantumCodec
Source§type DecodeError = MiscCodecError
type DecodeError = MiscCodecError
Error reported when an encoded unit is outside the selected alphabet.
Source§type EncodeError = MiscCodecError
type EncodeError = MiscCodecError
Error type exposed by the codec’s encoding operation.
Source§unsafe fn decode(
&mut self,
input: &[u8],
input_index: usize,
) -> Result<([u8; 3], NonZeroUsize), DecodeFailure<Self::DecodeError>>
unsafe fn decode( &mut self, input: &[u8], input_index: usize, ) -> Result<([u8; 3], NonZeroUsize), DecodeFailure<Self::DecodeError>>
Decodes one complete four-unit Base64 quantum.
§Parameters
input: Encoded Base64 units containing the quantum.input_index: Index of the first unit in the quantum.
§Returns
The decoded three-byte value and the number of consumed input units.
§Errors
Returns a decode failure with MiscCodecError::InvalidBase64 when any
unit is not valid for the selected alphabet. Its input index is relative
to input, and the failure reports that the complete four-unit quantum
was consumed.
§Safety
The caller must ensure that four units starting at input_index are
readable in input.
Source§unsafe fn encode(
&mut self,
value: &[u8; 3],
output: &mut [u8],
output_index: usize,
) -> Result<usize, Self::EncodeError>
unsafe fn encode( &mut self, value: &[u8; 3], output: &mut [u8], output_index: usize, ) -> Result<usize, Self::EncodeError>
Encodes one complete three-byte Base64 quantum.
§Parameters
value: Three raw bytes to encode.output: Destination buffer for four encoded units.output_index: Index of the first destination unit to write.
§Returns
The number of output units written, which is always four.
§Errors
This implementation does not return an error.
§Safety
The caller must ensure that four units starting at output_index are
writable in output.
Source§const MIN_UNITS_PER_VALUE: usize = 4
const MIN_UNITS_PER_VALUE: usize = 4
Source§const MAX_ENCODE_UNITS_PER_VALUE: usize = 4
const MAX_ENCODE_UNITS_PER_VALUE: usize = 4
Source§const MAX_DECODE_UNITS_PER_VALUE: usize = 4
const MAX_DECODE_UNITS_PER_VALUE: usize = 4
Source§const MAX_ENCODE_RESET_UNITS: usize = 0
const MAX_ENCODE_RESET_UNITS: usize = 0
Source§const MAX_ENCODE_FINISH_UNITS: usize = 0
const MAX_ENCODE_FINISH_UNITS: usize = 0
Source§const MAX_DECODE_RESET_VALUES: usize = 0
const MAX_DECODE_RESET_VALUES: usize = 0
Source§const MAX_DECODE_FINISH_VALUES: usize = 0
const MAX_DECODE_FINISH_VALUES: usize = 0
Source§fn can_encode_value(&self, _value: &Self::Value) -> bool
fn can_encode_value(&self, _value: &Self::Value) -> bool
value is in this codec’s encodable value domain. Read moreSource§fn encode_len(&self, _value: &Self::Value) -> usize
fn encode_len(&self, _value: &Self::Value) -> usize
value. Read moreSource§unsafe fn encode_reset(
&mut self,
_output: &mut [Self::Unit],
_output_index: usize,
) -> Result<usize, Self::EncodeError>
unsafe fn encode_reset( &mut self, _output: &mut [Self::Unit], _output_index: usize, ) -> Result<usize, Self::EncodeError>
Source§unsafe fn encode_finish(
&mut self,
_output: &mut [Self::Unit],
_output_index: usize,
) -> Result<usize, Self::EncodeError>
unsafe fn encode_finish( &mut self, _output: &mut [Self::Unit], _output_index: usize, ) -> Result<usize, Self::EncodeError>
Source§unsafe fn decode_reset(
&mut self,
_output: &mut [Self::Value],
_output_index: usize,
) -> Result<usize, Self::DecodeError>
unsafe fn decode_reset( &mut self, _output: &mut [Self::Value], _output_index: usize, ) -> Result<usize, Self::DecodeError>
Source§unsafe fn decode_eof(
&mut self,
input: &[Self::Unit],
input_index: usize,
) -> Result<(Self::Value, NonZero<usize>), DecodeFailure<Self::DecodeError>>
unsafe fn decode_eof( &mut self, input: &[Self::Unit], input_index: usize, ) -> Result<(Self::Value, NonZero<usize>), DecodeFailure<Self::DecodeError>>
Source§unsafe fn decode_finish(
&mut self,
_output: &mut [Self::Value],
_output_index: usize,
) -> Result<usize, Self::DecodeError>
unsafe fn decode_finish( &mut self, _output: &mut [Self::Value], _output_index: usize, ) -> Result<usize, Self::DecodeError>
output. Read more