While IDLE, the server sends unilateral responses to notify the client of
changes to the mailbox as they happen. Instead of always exiting the IDLE
on any change, allow the caller to pass a callback function which receives
the messages and returns an action to either Continue IDLE or Stop and exit.
For clients wishing to use the previous behaviour, a callback_stop convenience
function is provided that terminates the IDLE on any change to the mailbox.
EXPUNGE may return either a series of EXPUNGE responses each with
a single message sequence number, or a VANISHED response with a
sequence set of UIDs. This adds a wrapper enum and some associated
iterators to make it easy to handle these in the client.
Add support for HIGHESTMODSEQ (RFC 4551) and VANISHED (RFC 7162),
which allows users to quickly synchronize to a mailbox by fetching
only changes since the last known highest mod sequence.
notes
* i tried to avoid the term "async", because that term is very
overloaded and we're not using e.g. tokio/async-io here
* i'm a little unhappy having to string the channel through the
parser, because that seems rather a part of the client logic than
parsing. on the other hand it's better than passing the whole
client, so there's that at least.
* First stab at structured types (#28)
Tests currently fail due to djc/imap-proto#2.
LSUB is also broken due to djc/imap-proto#4 (but we don't have tests for
that atm).
* Also parse out RFC822 fetch responses
* Make all the things zero-copy
* Also delegate IntoIterator for ZeroCopy ref
* Fix UNSEEN and LSUB
All tests now pass
* Address @sanmai-NL comments
* Correctly handle incomplete parser responses
* No need for git dep anymore