Struct Encoding
#[repr(transparent)]
pub struct Encoding(/* private field */);
Base-conversion encoding
See Specification for technical details or how to define a new one.
Implementations
impl Encoding
fn encode_len(&self, len: usize) -> usizeReturns the encoded length of an input of length
lenSee
encode_mutfor when to use it.Panics
May panic if
lenis greater thanusize::MAX / 512:len <= 8_388_607whentarget_pointer_width = "32"len <= 36028_797018_963967whentarget_pointer_width = "64"
If you need to encode an input of length greater than this limit (possibly of infinite length), then you must chunk your input, encode each chunk, and concatenate to obtain the output. The length of each input chunk must be a multiple of
encode_align.Note that this function only may panic in those cases. The function may also return the correct value in some cases depending on the implementation. In other words, those limits are the guarantee below which the function will not panic, and not the guarantee above which the function will panic.
fn encode_align(&self) -> usizeReturns the minimum alignment when chunking a long input
See
encode_lenfor context.fn encode_mut(&self, input: &[u8], output: &mut [u8])Encodes
inputinoutputPanics
Panics if the
outputlength does not match the result ofencode_lenfor theinputlength.Examples
use BASE64; # let mut buffer = vec!; let input = b"Hello world"; let output = &mut buffer; BASE64.encode_mut; assert_eq!;fn encode_mut_str<'a>(&self, input: &[u8], output: &'a mut [u8]) -> &'a strEncodes
inputinoutputand returns it as a&strIt is guaranteed that
outputand the return value only differ by their type. They both point to the same range of memory (pointer and length).Panics
Panics if the
outputlength does not match the result ofencode_lenfor theinputlength.Examples
use BASE64; # let mut buffer = vec!; let input = b"Hello world"; let output = &mut buffer; assert_eq!;fn encode_append(&self, input: &[u8], output: &mut String)Appends the encoding of
inputtooutputExamples
use BASE64; # let mut buffer = vec!; let input = b"Hello world"; let mut output = "Result: ".to_string; BASE64.encode_append; assert_eq!;fn new_encoder<'a>(&'a self, output: &'a mut String) -> Encoder<'a>Returns an object to encode a fragmented input and append it to
outputSee the documentation of
Encoderfor more details and examples.fn encode_write(&self, input: &[u8], output: &mut impl Write) -> ResultWrites the encoding of
inputtooutputThis allocates a buffer of 1024 bytes on the stack. If you want to control the buffer size and location, use [
Encoding::encode_write_buffer()] instead.Errors
Returns an error when writing to the output fails.
fn encode_write_buffer(&self, input: &[u8], output: &mut impl Write, buffer: &mut [u8]) -> ResultWrites the encoding of
inputtooutputusing a temporarybufferPanics
Panics if the buffer is shorter than 510 bytes.
Errors
Returns an error when writing to the output fails.
fn encode_display<'a>(&'a self, input: &'a [u8]) -> Display<'a>Returns an object to display the encoding of
inputExamples
use BASE64; assert_eq!;fn encode(&self, input: &[u8]) -> StringReturns encoded
inputExamples
use BASE64; assert_eq!;fn decode_len(&self, len: usize) -> Result<usize, DecodeError>Returns the maximum decoded length of an input of length
lenSee
decode_mutfor when to use it. In particular, the actual decoded length might be smaller if the actual input contains padding or ignored characters.Panics
May panic if
lenis greater thanusize::MAX / 8:len <= 536_870_911whentarget_pointer_width = "32"len <= 2_305843_009213_693951whentarget_pointer_width = "64"
If you need to decode an input of length greater than this limit (possibly of infinite length), then you must decode your input chunk by chunk with
decode_mut, making sure that you take into account how many bytes have been read from the input and how many bytes have been written to the output:Ok(written)means all bytes have been read andwrittenbytes have been writtenErr(DecodePartial { error, .. })means an error occurred iferror.kind != DecodeKind::Lengthor this was the last input chunkErr(DecodePartial { read, written, .. })means thatreadbytes have been read andwrittenbytes written (the error can be ignored)
Note that this function only may panic in those cases. The function may also return the correct value in some cases depending on the implementation. In other words, those limits are the guarantee below which the function will not panic, and not the guarantee above which the function will panic.
Errors
Returns an error if
lenis invalid. The error kind isLengthand the position is the greatest valid input length.fn decode_mut(&self, input: &[u8], output: &mut [u8]) -> Result<usize, DecodePartial>Decodes
inputinoutputReturns the length of the decoded output. This length may be smaller than the output length if the input contained padding or ignored characters. The output bytes after the returned length are not initialized and should not be read.
Panics
Panics if the
outputlength does not match the result ofdecode_lenfor theinputlength. Also panics ifdecode_lenfails for theinputlength.Errors
Returns an error if
inputis invalid. Seedecodefor more details. The are two differences though:Lengthmay be returned only if the encoding allows ignored characters, because otherwise this is already checked bydecode_len.- The
readfirst bytes of the input have been successfully decoded to thewrittenfirst bytes of the output.
Examples
use BASE64; # let mut buffer = vec!; let input = b"SGVsbA==byB3b3JsZA=="; let output = &mut buffer; let len = BASE64.decode_mut.unwrap; assert_eq!;fn decode(&self, input: &[u8]) -> Result<Vec<u8>, DecodeError>Returns decoded
inputErrors
Returns an error if
inputis invalid. The error kind can be:Lengthif the input length is invalid. The position is the greatest valid input length.Symbolif the input contains an invalid character. The position is the first invalid character.Trailingif the input has non-zero trailing bits. This is only possible if the encoding checks trailing bits. The position is the first character containing non-zero trailing bits.Paddingif the input has an invalid padding length. This is only possible if the encoding uses padding. The position is the first padding character of the first padding of invalid length.
Examples
use BASE64; assert_eq!;fn bit_width(&self) -> usizeReturns the bit-width
fn interpret_byte(&self, byte: u8) -> CharacterInterprets a byte as a character
fn is_canonical(&self) -> boolReturns whether the encoding is canonical
An encoding is not canonical if one of the following conditions holds:
- trailing bits are not checked
- padding is used
- characters are ignored
- characters are translated
fn specification(&self) -> SpecificationReturns the encoding specification
Trait Implementations
impl Clone for Encoding
fn clone(&self) -> Encoding
impl Debug for Encoding
fn fmt(&self, f: &mut Formatter<'_>) -> Result
impl Eq for Encoding
impl PartialEq for Encoding
fn eq(&self, other: &Encoding) -> bool
impl StructuralPartialEq for Encoding
Auto Trait Implementations
impl Freeze for Encoding
impl RefUnwindSafe for Encoding
impl Send for Encoding
impl Sync for Encoding
impl Unpin for Encoding
impl UnsafeUnpin for Encoding
impl UnwindSafe for Encoding
Blanket Implementations
impl<T> Any for Encoding
where
T: 'static + ?Sized,
fn type_id(&self) -> TypeId
impl<T> Borrow<T> for Encoding
where
T: ?Sized,
fn borrow(&self) -> &T
impl<T> BorrowMut<T> for Encoding
where
T: ?Sized,
fn borrow_mut(&mut self) -> &mut T
impl<T> CloneToUninit for Encoding
where
T: Clone,
unsafe fn clone_to_uninit(&self, dest: *mut u8)
impl<T> From<T> for Encoding
fn from(t: T) -> TReturns the argument unchanged.
impl<T> ToOwned for Encoding
where
T: Clone,
type Owned = T;fn to_owned(&self) -> Tfn clone_into(&self, target: &mut T)
impl<T, U> Into<U> for Encoding
where
U: From<T>,
fn into(self) -> UCalls
U::from(self).That is, this conversion is whatever the implementation of
[From]<T> for Uchooses to do.
impl<T, U> TryFrom<U> for Encoding
where
U: Into<T>,
type Error = Infallible;fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>
impl<T, U> TryInto<U> for Encoding
where
U: TryFrom<T>,
type Error = <U as TryFrom<T>>::Error;fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>