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_simplified
feature - Added
Vec2
- Added short
README.md
toassets
folder - Added quirk for trailing space in STATUS. Thanks, @nbdd0121!
- Changed
Status
to make it easier to use - Check only explicit features for SemVer violations
- Renamed
NonEmptyVec
toVec1
- Updated
CONTRIBUTING.md
- 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}::unvalidated
panic!
in debug on wrong input - Mention
panic!
inunvalidated
documentation - Fixed typo in
AuthMechanism
documentation
Version 1.0.0 - 2023-08-22
- Use
'static
lifetime forDecoder::Error
indecode_static
.
Version 1.0.0-beta - 2023-08-17
- Introduced
FlagNameAttributeExtension
. - Implemented
Display
for someT
whereT
sDisplay
implementation 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
Decode
trait withDecoder
. - Replaced
Encode
trait withEncoder
. - Made
*Other
types merely technicalities. - Improved
Debug
print. - Updated
Swatinem/rust-cache
. - Simplified
Error
s. - 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-hack
and--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
Debug
ing ofNonEmptyVec
.
- Fixed warnings and broken links in documentation.
- Fixed
is_text_char
. - Fixed
condstore
identity. - Fixed usage of
complete
(instead ofstreaming
).
- Removed
ansi_term
dev 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-versions
job to CI.- Test MSRV.
- Test lowest versions of dependencies.
- Migrated to Rust 2021.
- Redesigned
Encode
trait. - Moved
Encode
trait from imap-types to imap-codec.
- Made known-answer tests stronger.
- Made it so that
Decode
is always tested duringEncode
and vice versa.
- Made it so that
- Made it so that random tests are reproducable through a seed.
- Resolved remaining
TODO
s incommand_to_bytes_and_back
fuzz-target. - Resolved remaining
TODO
s in{Single,Multi}PartExtensionData
- Fixed misuse of
{Single,Multi}PartExtensionData.
- Introduced
BodyExtension
.
- Fixed misuse of
- Introduced
ContinueBasic
to prevent ambiguities. - Fixed
Eq
side effect ofSecret
. - Fixed
mbx_list_flags
. - Fixed
NaiveDate
.- Made
MyNaiveDate::arbitrary
really arbitrary. - Narrowed allowed values for
DateTime
andNaiveDate
.
- 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
ext
anddebug
features.
- Security
- Forbid
unsafe
and introducedunchecked
feature. - Ensured that secret values are not
Debug
-printed and comparisons are made in constant time.- Wrapped
AuthenticateData
inSecret
. - Wrapped
CommandBody::Login.password
inSecret
.
- Wrapped
- Forbid
- Refactoring
- Feature-gated all existing extensions.
- Simplified module/feature names for
tokio
support. - Changed naming schema to phase out
mod.rs
. - Renamed
MyDateTime
toDateTime
,SeqNo
toSeqOrUid
,SeqNo::Largest
toSeqNo::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
Coverage
job is started only after a successfulBuild & Test
. - Inlined
--all-features
to reduce compilation time.
- Chore
- Allowed
Unicode-DFS-2016
andBSD-3-Clause
dependencies.
- 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
Atom
s.
- Fixed
text
parser by excluding[
and]
.
- Fixed (known) misuses for
Version 0.7.0 - 2022-08-05
- Add tokio demos (client + server).
- Introduce
ImapClientCodec
and implementtokio_util::codec::{Encoder, Decoder}
. - Add tests to
tokio_compat
. - Add
greeting_to_bytes_and_back
fuzz target. - Introduce
Decode
trait and implement it forCommand
andResponse
. - Introduce
Greeting
, andGreetingKind
. - Introduce
State::Greeting
variant. - Introduce
IdleDone
. - Introduce
CapabilityOther
and implementCapability::other()
. - Implement
Decode
forGreeting
and use it in thetokio_compat
module. - 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
Command
s andCommandBody
s. - Use
Decode
trait in examples. - Use
Command::decode
instead ofcommand
. - Allow "Unicode-DFS-2016" license in "deny.toml".
- Use
Tag
inState::{IdleAuthenticated,IdleSelected}
instead ofString
. - Derive
Debug
,Eq
, andPartialEq
forState
. - Feature-gate
Capability::LoginDisabled
with "starttls" feature. - Feature-gate
State::{Idle*}
variants with "ext_idle" feature.
- Remove
nom
feature. - Don't export
arbitrary
, andrfc3501
. - Make
imap_types::{codec, state}
part of public API. Don't exportimap_types::Encode
directly. - Delete
greeting
constructor ofStatus
. - Delete
PreAuth
variant (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
CapabilityEnable
to 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
Cow
to 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 Display
for types in imap-types. - Remove
nom
feature 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).