1# 0.13.0
2
3- Config methods are const
4- Added `EncoderStringWriter` to allow encoding directly to a String
5- `EncoderWriter` now owns its delegate writer rather than keeping a reference to it (though refs still work)
6    - As a consequence, it is now possible to extract the delegate writer from an `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.
7- When decoding input that has both an invalid length and an invalid symbol as the last byte, `InvalidByte` will be emitted instead of `InvalidLength` to make the problem more obvious.
8
9# 0.12.2
10
11- Add `BinHex` alphabet
12
13# 0.12.1
14
15- Add `Bcrypt` alphabet
16
17# 0.12.0
18
19- A `Read` implementation (`DecoderReader`) to let users transparently decoded data from a b64 input source
20- IMAP's modified b64 alphabet
21- Relaxed type restrictions to just `AsRef<[ut8]>` for main `encode*`/`decode*` functions
22- A minor performance improvement in encoding
23
24# 0.11.0
25- Minimum rust version 1.34.0
26- `no_std` is now supported via the two new features `alloc` and `std`.
27
28# 0.10.1
29
30- Minimum rust version 1.27.2
31- Fix bug in streaming encoding ([#90](https://github.com/marshallpierce/rust-base64/pull/90)): if the underlying writer didn't write all the bytes given to it, the remaining bytes would not be retried later. See the docs on `EncoderWriter::write`.
32- Make it configurable whether or not to return an error when decoding detects excess trailing bits.
33
34# 0.10.0
35
36- Remove line wrapping. Line wrapping was never a great conceptual fit in this library, and other features (streaming encoding, etc) either couldn't support it or could support only special cases of it with a great increase in complexity. Line wrapping has been pulled out into a [line-wrap](https://crates.io/crates/line-wrap) crate, so it's still available if you need it.
37  - `Base64Display` creation no longer uses a `Result` because it can't fail, which means its helper methods for common
38  configs that `unwrap()` for you are no longer needed
39- Add a streaming encoder `Write` impl to transparently base64 as you write.
40- Remove the remaining `unsafe` code.
41- Remove whitespace stripping to simplify `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)`.
42- Detect invalid trailing symbols when decoding and return an error rather than silently ignoring them.
43
44# 0.9.3
45
46- Update safemem
47
48# 0.9.2
49
50- Derive `Clone` for `DecodeError`.
51
52# 0.9.1
53
54- Add support for `crypt(3)`'s base64 variant.
55
56# 0.9.0
57
58- `decode_config_slice` function for no-allocation decoding, analogous to `encode_config_slice`
59- Decode performance optimization
60
61# 0.8.0
62
63- `encode_config_slice` function for no-allocation encoding
64
65# 0.7.0
66
67- `STANDARD_NO_PAD` config
68- `Base64Display` heap-free wrapper for use in format strings, etc
69
70# 0.6.0
71
72- Decode performance improvements
73- Use `unsafe` in fewer places
74- Added fuzzers
75
76# 0.5.2
77
78- Avoid usize overflow when calculating length
79- Better line wrapping performance
80
81# 0.5.1
82
83- Temporarily disable line wrapping
84- Add Apache 2.0 license
85
86# 0.5.0
87
88- MIME support, including configurable line endings and line wrapping
89- Removed `decode_ws`
90- Renamed `Base64Error` to `DecodeError`
91
92# 0.4.1
93
94- Allow decoding a `AsRef<[u8]>` instead of just a `&str`
95
96# 0.4.0
97
98- Configurable padding
99- Encode performance improvements
100
101# 0.3.0
102
103- Added encode/decode functions that do not allocate their own storage
104- Decode performance improvements
105- Extraneous padding bytes are no longer ignored. Now, an error will be returned.
106