Alphabet::as_str()
Debug
and Clone
impls for the general purpose Engineencoded_len
const
, allowing the creation of arrays sized to encode compile-time-known data lengthssource
instead of cause
on Error typesDecoderReader
no longer sometimes erroneously ignores padding #226Engine.internal_decode
return type changed< 0.20 function | 0.21 equivalent |
---|---|
encode() | engine::general_purpose::STANDARD.encode() or prelude::BASE64_STANDARD.encode() |
encode_config() | engine.encode() |
encode_config_buf() | engine.encode_string() |
encode_config_slice() | engine.encode_slice() |
decode() | engine::general_purpose::STANDARD.decode() or prelude::BASE64_STANDARD.decode() |
decode_config() | engine.decode() |
decode_config_buf() | engine.decode_vec() |
decode_config_slice() | engine.decode_slice() |
The short-lived 0.20 functions were the 0.13 functions with config
replaced with engine
.
If applicable, use the preset engines engine::STANDARD
, engine::STANDARD_NO_PAD
, engine::URL_SAFE
, or engine::URL_SAFE_NO_PAD
. The NO_PAD
ones require that padding is absent when decoding, and the others require that canonical padding is present .
If you need the < 0.20 behavior that did not care about padding, or want to recreate < 0.20.0's predefined Config
s precisely, see the following table.
0.13.1 Config | 0.20.0+ alphabet | encode_padding | decode_padding_mode |
---|---|---|---|
STANDARD | STANDARD | true | Indifferent |
STANDARD_NO_PAD | STANDARD | false | Indifferent |
URL_SAFE | URL_SAFE | true | Indifferent |
URL_SAFE_NO_PAD | URL_SAFE | false | Indifferent |
Engine.decode_slice_unchecked
.Engine
as a pub use
in prelude
.engine
are removed in favor of base64::prelude::...
that are better suited to those who wish to use
the entire path to a name.FastPortable
was only meant to be an interim name, and shouldn't have shipped in 0.20. It is now GeneralPurpose
to make its intended usage more clear.GeneralPurpose
and its config are now pub use
'd in the engine
module for convenience.from()
functions to be new()
. from()
causes confusing compiler errors because of confusion with From::from
, and is a little misleading because some of those invocations are not very cheap as one would usually expect from a from
call.encode*
and decode*
top level functions are now methods on Engine
.DEFAULT_ENGINE
was replaced by engine::general_purpose::STANDARD
engine::general_purpose::{STANDARD, STANDARD_NO_PAD, URL_SAFE, URL_SAFE_NO_PAD}
pub use
d into engine
as well*_slice
decode/encode functions now return an error instead of panicking when the output slice is too smalldecoded_len_estimate()
is provided to make it easy to size decode buffers correctly.NO_PAD
config now requires that padding be absent when decoding.Config
concept into the Engine
abstraction, allowing the user to pick different encoding / decoding implementations.FastPortable
engine, so named because it's portable (works on any CPU) and relatively fast.ConstantTimePortable
?) for security-sensitive applications that need side-channel resistance, and CPU-specific SIMD implementations for more speed.DEFAULT_ENGINE
. To use different alphabets or other settings ( padding, etc), create your own engine instance.CharacterSet
is now Alphabet
(per the RFC), and allows creating custom alphabets. The corresponding tables that were previously code-generated are now built dynamically.const fn
.DecoderReader
now owns its inner reader, and can expose it via into_inner()
. For symmetry, EncoderWriter
can do the same with its writer.encoded_len
is now public so you can size encode buffers precisely.decode_config
.EncoderStringWriter
to allow encoding directly to a StringEncoderWriter
now owns its delegate writer rather than keeping a reference to it (though refs still work)EncoderWriter
via finish()
, which returns Result<W>
instead of Result<()>
. If you were calling finish()
explicitly, you will now need to use let _ = foo.finish()
instead of just foo.finish()
to avoid a warning about the unused value.InvalidByte
will be emitted instead of InvalidLength
to make the problem more obvious.BinHex
alphabetBcrypt
alphabetRead
implementation (DecoderReader
) to let users transparently decoded data from a b64 input sourceAsRef<[ut8]>
for main encode*
/decode*
functionsno_std
is now supported via the two new features alloc
and std
.EncoderWriter::write
.Base64Display
creation no longer uses a Result
because it can't fail, which means its helper methods for common configs that unwrap()
for you are no longer neededWrite
impl to transparently base64 as you write.unsafe
code.no_std
support. No out of the box configs use it, and it's trivial to do yourself if needed: filter(|b| !b" \n\t\r\x0b\x0c".contains(b)
.Clone
for DecodeError
.crypt(3)
's base64 variant.decode_config_slice
function for no-allocation decoding, analogous to encode_config_slice
encode_config_slice
function for no-allocation encodingSTANDARD_NO_PAD
configBase64Display
heap-free wrapper for use in format strings, etcunsafe
in fewer placesdecode_ws
Base64Error
to DecodeError
AsRef<[u8]>
instead of just a &str