aboutsummaryrefslogtreecommitdiff
path: root/src/imap/command/examined.rs
diff options
context:
space:
mode:
authorQuentin Dufour <quentin@deuxfleurs.fr>2024-01-03 09:21:46 +0100
committerQuentin Dufour <quentin@deuxfleurs.fr>2024-01-03 09:21:46 +0100
commit7ebc708acab9c91db41652cfbfe2814a3a27569d (patch)
tree8f0df3e5d92865fe5650cafd2558b072810e21f3 /src/imap/command/examined.rs
parentb9a0c1e6eced036eb71e8221a4f236f72832fec2 (diff)
downloadaerogramme-7ebc708acab9c91db41652cfbfe2814a3a27569d.tar.gz
aerogramme-7ebc708acab9c91db41652cfbfe2814a3a27569d.zip
unselect implemented rfc3691
Diffstat (limited to 'src/imap/command/examined.rs')
-rw-r--r--src/imap/command/examined.rs11
1 files changed, 7 insertions, 4 deletions
diff --git a/src/imap/command/examined.rs b/src/imap/command/examined.rs
index 7de94f4..8876297 100644
--- a/src/imap/command/examined.rs
+++ b/src/imap/command/examined.rs
@@ -28,7 +28,7 @@ pub async fn dispatch(ctx: ExaminedContext<'_>) -> Result<(Response<'static>, fl
// Specific to the EXAMINE state (specialization of the SELECTED state)
// ~3 commands -> close, fetch, search + NOOP
- CommandBody::Close => ctx.close().await,
+ CommandBody::Close => ctx.close("CLOSE").await,
CommandBody::Fetch {
sequence_set,
macro_or_item_names,
@@ -44,10 +44,13 @@ pub async fn dispatch(ctx: ExaminedContext<'_>) -> Result<(Response<'static>, fl
Response::build()
.to_req(ctx.req)
.message("Forbidden command: can't write in read-only mode (EXAMINE)")
- .bad()?,
+ .no()?,
flow::Transition::None,
)),
+ // UNSELECT extension (rfc3691)
+ CommandBody::Unselect => ctx.close("UNSELECT").await,
+
// In examined mode, we fallback to authenticated when needed
_ => {
authenticated::dispatch(authenticated::AuthenticatedContext {
@@ -64,11 +67,11 @@ pub async fn dispatch(ctx: ExaminedContext<'_>) -> Result<(Response<'static>, fl
impl<'a> ExaminedContext<'a> {
/// CLOSE in examined state is not the same as in selected state
/// (in selected state it also does an EXPUNGE, here it doesn't)
- async fn close(self) -> Result<(Response<'static>, flow::Transition)> {
+ async fn close(self, kind: &str) -> Result<(Response<'static>, flow::Transition)> {
Ok((
Response::build()
.to_req(self.req)
- .message("CLOSE completed")
+ .message(format!("{} completed", kind))
.ok()?,
flow::Transition::Unselect,
))