All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
Unreleased - YYYY-MM-DD
- Implemented more IMAP extensions
- ID
- UNSELECT
- SORT and THREAD
- BINARY
- METADATA
- Implemented
AuthenticateData::Cancel - Implemented
AuthMechanism::ScramSha3_512{,Plus} - Implemented more common traits for types
- Thanks, @jakoschiko!
- Implemented missing tests
- Added
arbitrary_simplifiedfeature - Added
Vec2 - Added short
README.mdtoassetsfolder - Added quirk for trailing space in STATUS. Thanks, @nbdd0121!
- Increased MSRV to 1.78.
- Changed
Statusto make it easier to use - Check only explicit features for SemVer violations
- Renamed
NonEmptyVectoVec1 - Updated
CONTRIBUTING.md - Changed serde representation for many
enums from externally to adjacently tagged
- Fixed examples in README (and test them in CI now)
- Thanks, @coalooball!
- Fixed broken links in README
- Fixed iteration over sequence numbers
- Thanks, @superboum!
- Don't log
Rectified missing text to \"...\"unnecessarily - Made
{DateTime,NaiveDate}::unvalidatedpanic!in debug on wrong input - Mention
panic!inunvalidateddocumentation - Fixed typo in
AuthMechanismdocumentation
Version 1.0.0 - 2023-08-22
- Use
'staticlifetime forDecoder::Errorindecode_static.
Version 1.0.0-beta - 2023-08-17
- Introduced
FlagNameAttributeExtension. - Implemented
Displayfor someTwhereTsDisplayimplementation equalsEncode.
- Inlined stable
ext_*features to improve SemVer compatibility. - Re-exported
imap_codec::imap_types. - Simplified module hierarchy.
- Increased MSRV to 1.65.
- Moved tokio implementation to demos.
- Replaced
Decodetrait withDecoder. - Replaced
Encodetrait withEncoder. - Made
*Othertypes merely technicalities. - Improved
Debugprint. - Updated
Swatinem/rust-cache. - Simplified
Errors. - Aligned type names with IMAP RFC.
- Improved documentation.
- Replaced
Capability::Literal(LiteralCapability)withCapability::LiteralPlus, andCapability::LiteralMinus.
Version 0.10.0 - 2023-07-05
- Added
AuthMechanism::XOAUTH. - Added more constructors.
- Added (and improved) feature documentation. (Thanks, @jakoschiko!)
- Added multiple
quirk_*features to improve interoperability. - Added
DecodeStatic. - Checking with
cargo-hackand--feature-powerset. - Fuzz-testing with incomplete messages.
- Simplified module hierarchy.
- Renamed types for better understandability (and to align them with the IMAP4rev1 standard).
- Renamed constructors so they cannot be confused with
unsafe. (Thanks, @jakoschiko!) - Resolved multiple SemVer hazards.
- Use custom nom error.
- Deduplicated (and added a new) fuzz-target(s).
- Don't export nom parsers anymore.
- Removed constant-time comparison support.
- Simplified
Debuging ofNonEmptyVec.
- Fixed warnings and broken links in documentation.
- Fixed
is_text_char. - Fixed
condstoreidentity. - Fixed usage of
complete(instead ofstreaming).
- Removed
ansi_termdev dependency.
Version 0.9.0 - 2023-05-30
- Implemented
MOVE(RFC 6851). - Implemented
UNSELECT(RFC 3691). - Implemented (some of)
CONDSTORE/QRESYNC(RFC 7162). - Reworked (and enabled) coverage job in CI.
- Added (spot-)fuzzing to CI.
- Added
minimal-versionsjob to CI.- Test MSRV.
- Test lowest versions of dependencies.
- Migrated to Rust 2021.
- Redesigned
Encodetrait. - Moved
Encodetrait from imap-types to imap-codec.
- Made known-answer tests stronger.
- Made it so that
Decodeis always tested duringEncodeand vice versa.
- Made it so that
- Made it so that random tests are reproducable through a seed.
- Resolved remaining
TODOs incommand_to_bytes_and_backfuzz-target. - Resolved remaining
TODOs in{Single,Multi}PartExtensionData- Fixed misuse of
{Single,Multi}PartExtensionData. - Introduced
BodyExtension.
- Fixed misuse of
- Introduced
ContinueBasicto prevent ambiguities. - Fixed
Eqside effect ofSecret. - Fixed
mbx_list_flags. - Fixed
NaiveDate.- Made
MyNaiveDate::arbitraryreally arbitrary. - Narrowed allowed values for
DateTimeandNaiveDate.
- Made
- Fixed poor constant-time sanity check.
- Fixed possible
panic!inresponse. - Reactivated ignored tests.
Version 0.8.0 - 2023-04-16
- Community
- Introduced a project board and a GitHub action that adds all opened issues to the project board.
- Added a
CONTRIBUTING.md.
- Features
- Implemented RFC 2088/RFC 7888 (LITERAL+).
- Implemented RFC 2087/RFC 9208 (QUOTA).
- Thanks, @MinisculeGirraffe!
- Introduced usable error reporting.
- Introduced
Encode::encode_detached. - Implemented missing
From,TryFrom,AsRef, ... conversions for various types.
- Testing/Fuzzing
- Improved debug workflow.
- Introduced
extanddebugfeatures.
- Security
- Forbid
unsafeand introduceduncheckedfeature. - Ensured that secret values are not
Debug-printed and comparisons are made in constant time.- Wrapped
AuthenticateDatainSecret. - Wrapped
CommandBody::Login.passwordinSecret.
- Wrapped
- Forbid
- Refactoring
- Feature-gated all existing extensions.
- Simplified module/feature names for
tokiosupport. - Changed naming schema to phase out
mod.rs. - Renamed
MyDateTimetoDateTime,SeqNotoSeqOrUid,SeqNo::LargesttoSeqNo::Asterisk.
- CI
- Added a job that checks for SemVer violations.
- Improved CI runtime.
- Made it so that superseded jobs are eagerly canceled.
- Made it so that the
Coveragejob is started only after a successfulBuild & Test. - Inlined
--all-featuresto reduce compilation time.
- Chore
- Allowed
Unicode-DFS-2016andBSD-3-Clausedependencies.
- Allowed
- Testing/Fuzzing
- Made fuzz-targets tighter by not skipping (known) misuses.
- Reactivated commented-out test code.
- Restored trace generation for
README.md.
- Misuses
- Fixed (known) misuses for
Capability{,Other},Code{,Other},Continue,Flag, andBody.- Worked around ambiguities in IMAP.
- Fixed various parsers that need to greedily consume tokens such as
Atoms.
- Fixed
textparser by excluding[and].
- Fixed (known) misuses for
Version 0.7.0 - 2022-08-05
- Add tokio demos (client + server).
- Introduce
ImapClientCodecand implementtokio_util::codec::{Encoder, Decoder}. - Add tests to
tokio_compat. - Add
greeting_to_bytes_and_backfuzz target. - Introduce
Decodetrait and implement it forCommandandResponse. - Introduce
Greeting, andGreetingKind. - Introduce
State::Greetingvariant. - Introduce
IdleDone. - Introduce
CapabilityOtherand implementCapability::other(). - Implement
DecodeforGreetingand use it in thetokio_compatmodule. - Implement
AuthMechanism::other. - Implement
Data::expunge. - Implement
Code::{uidnext, uidvalidity, unseen}.
- Improve CI.
- Improve documentation.
- Switch to new module layout in imap-codec.
- Refactor creation of
Commands andCommandBodys. - Use
Decodetrait in examples. - Use
Command::decodeinstead ofcommand. - Allow "Unicode-DFS-2016" license in "deny.toml".
- Use
TaginState::{IdleAuthenticated,IdleSelected}instead ofString. - Derive
Debug,Eq, andPartialEqforState. - Feature-gate
Capability::LoginDisabledwith "starttls" feature. - Feature-gate
State::{Idle*}variants with "ext_idle" feature.
- Remove
nomfeature. - Don't export
arbitrary, andrfc3501. - Make
imap_types::{codec, state}part of public API. Don't exportimap_types::Encodedirectly. - Delete
greetingconstructor ofStatus. - Delete
PreAuthvariant (and constructor) ofStatus.
- Fix missing doc test in CI.
- Fix (and improve) examples.
Version 0.6.0 - 2022-06-14
- Introduce "starttls" feature.
- Cleanup and document existing features.
- Measure code coverage in CI.
- Upload coverage report to Coveralls.io.
- Add/Update code coverage badge in README.md.
- Compile fuzzers in CI.
- Implement benchmarks (Criterion.rs).
- Compile benchmarks in CI.
- Implement
Command::into_static()andResponse::into_static().- Use
bounded-static(thanks, @jakoschiko)
- Use
- Add types to fix misuses
- Introduce
AtomExt(1*ASTRING-CHAR) to fix misuse. - Introduce
CapabilityEnableto increase misuse-resistance.
- Introduce
- Split imap-codec into imap-codec and imap-types.
- Implement non-nom parsing in imap-types.
- Add README.md to imap-types.
- Split crate into imap-codec and imap-types.
- Make imap-codec the primary workspace member.
- Re-export
imap-types.
- Make fuzz targets members of workspace to simplify workflow.
- Rename "serdex"/"nomx" features to "serde"/"nom".
- Reduce allocations during parsing.
- Use
Cowto abstract over owned and borrowed slices.
- Use
- Do not check slices twice.
- Introduce
new_unchecked()functions. - Check
new_unchecked()during debug builds.
- Introduce
- Cleanup API for
AuthMechanism. - Update to nom 7 and abnf-core 0.5.
- Remove
impl Displayfor types in imap-types. - Remove
nomfeature in imap-types. - Remove/cleanup (unused) dependencies in imap-codec.
- Remove/cleanup (unused) dependencies in imap-types.
- Fix fuzz targets.
- Fix benchmarks (thanks, @franziskuskiefer).
- Fix misuses, e.g.,
AtomExt(1*ASTRING-CHAR).