aboutsummaryrefslogtreecommitdiff
path: root/src/imap/command
diff options
context:
space:
mode:
authorQuentin Dufour <quentin@deuxfleurs.fr>2024-01-11 16:55:37 +0100
committerQuentin Dufour <quentin@deuxfleurs.fr>2024-01-11 16:55:37 +0100
commit60a166185a034019d9e55136ee4417386ff57703 (patch)
treeaf515bc47372e7979562b4a3f41f8d87b15ca049 /src/imap/command
parenta9d33c67080fd08b057501c36a07fade351bd83d (diff)
downloadaerogramme-60a166185a034019d9e55136ee4417386ff57703.tar.gz
aerogramme-60a166185a034019d9e55136ee4417386ff57703.zip
Fetch and store modifiers are parsed
Diffstat (limited to 'src/imap/command')
-rw-r--r--src/imap/command/authenticated.rs18
-rw-r--r--src/imap/command/examined.rs6
-rw-r--r--src/imap/command/selected.rs10
3 files changed, 17 insertions, 17 deletions
diff --git a/src/imap/command/authenticated.rs b/src/imap/command/authenticated.rs
index da41182..9b6bb24 100644
--- a/src/imap/command/authenticated.rs
+++ b/src/imap/command/authenticated.rs
@@ -2,7 +2,7 @@ use std::collections::BTreeMap;
use std::sync::Arc;
use anyhow::{anyhow, bail, Result};
-use imap_codec::imap_types::command::{Command, CommandBody};
+use imap_codec::imap_types::command::{Command, CommandBody, SelectExamineModifier};
use imap_codec::imap_types::core::{Atom, Literal, NonEmptyVec, QuotedChar};
use imap_codec::imap_types::datetime::DateTime;
use imap_codec::imap_types::extensions::enable::CapabilityEnable;
@@ -58,8 +58,8 @@ pub async fn dispatch<'a>(
} => ctx.status(mailbox, item_names).await,
CommandBody::Subscribe { mailbox } => ctx.subscribe(mailbox).await,
CommandBody::Unsubscribe { mailbox } => ctx.unsubscribe(mailbox).await,
- CommandBody::Select { mailbox, parameters } => ctx.select(mailbox, parameters).await,
- CommandBody::Examine { mailbox, parameters } => ctx.examine(mailbox, parameters).await,
+ CommandBody::Select { mailbox, modifiers } => ctx.select(mailbox, modifiers).await,
+ CommandBody::Examine { mailbox, modifiers } => ctx.examine(mailbox, modifiers).await,
CommandBody::Append {
mailbox,
flags,
@@ -422,11 +422,9 @@ impl<'a> AuthenticatedContext<'a> {
async fn select(
self,
mailbox: &MailboxCodec<'a>,
- parameters: &Option<NonEmptyVec<Atom<'a>>>,
+ modifiers: &[SelectExamineModifier],
) -> Result<(Response<'static>, flow::Transition)> {
- parameters.as_ref().map(|plist|
- self.client_capabilities.select_enable(plist.as_ref())
- );
+ self.client_capabilities.select_enable(modifiers);
let name: &str = MailboxName(mailbox).try_into()?;
@@ -462,11 +460,9 @@ impl<'a> AuthenticatedContext<'a> {
async fn examine(
self,
mailbox: &MailboxCodec<'a>,
- parameters: &Option<NonEmptyVec<Atom<'a>>>,
+ modifiers: &[SelectExamineModifier],
) -> Result<(Response<'static>, flow::Transition)> {
- parameters.as_ref().map(|plist|
- self.client_capabilities.select_enable(plist.as_ref())
- );
+ self.client_capabilities.select_enable(modifiers);
let name: &str = MailboxName(mailbox).try_into()?;
diff --git a/src/imap/command/examined.rs b/src/imap/command/examined.rs
index bb05250..a8077e3 100644
--- a/src/imap/command/examined.rs
+++ b/src/imap/command/examined.rs
@@ -1,7 +1,7 @@
use std::sync::Arc;
use anyhow::Result;
-use imap_codec::imap_types::command::{Command, CommandBody};
+use imap_codec::imap_types::command::{Command, CommandBody, FetchModifier};
use imap_codec::imap_types::core::Charset;
use imap_codec::imap_types::fetch::MacroOrMessageDataItemNames;
use imap_codec::imap_types::search::SearchKey;
@@ -37,8 +37,9 @@ pub async fn dispatch(ctx: ExaminedContext<'_>) -> Result<(Response<'static>, fl
CommandBody::Fetch {
sequence_set,
macro_or_item_names,
+ modifiers,
uid,
- } => ctx.fetch(sequence_set, macro_or_item_names, uid).await,
+ } => ctx.fetch(sequence_set, macro_or_item_names, modifiers, uid).await,
CommandBody::Search {
charset,
criteria,
@@ -88,6 +89,7 @@ impl<'a> ExaminedContext<'a> {
self,
sequence_set: &SequenceSet,
attributes: &'a MacroOrMessageDataItemNames<'static>,
+ modifiers: &[FetchModifier],
uid: &bool,
) -> Result<(Response<'static>, flow::Transition)> {
match self.mailbox.fetch(sequence_set, attributes, uid).await {
diff --git a/src/imap/command/selected.rs b/src/imap/command/selected.rs
index de59ed3..862d4aa 100644
--- a/src/imap/command/selected.rs
+++ b/src/imap/command/selected.rs
@@ -1,8 +1,8 @@
use std::sync::Arc;
use anyhow::Result;
-use imap_codec::imap_types::command::{Command, CommandBody, StoreModifier};
-use imap_codec::imap_types::core::{Charset, Atom};
+use imap_codec::imap_types::command::{Command, CommandBody, FetchModifier, StoreModifier};
+use imap_codec::imap_types::core::Charset;
use imap_codec::imap_types::fetch::MacroOrMessageDataItemNames;
use imap_codec::imap_types::flag::{Flag, StoreResponse, StoreType};
use imap_codec::imap_types::mailbox::Mailbox as MailboxCodec;
@@ -43,8 +43,9 @@ pub async fn dispatch<'a>(
CommandBody::Fetch {
sequence_set,
macro_or_item_names,
+ modifiers,
uid,
- } => ctx.fetch(sequence_set, macro_or_item_names, uid).await,
+ } => ctx.fetch(sequence_set, macro_or_item_names, modifiers, uid).await,
CommandBody::Search {
charset,
criteria,
@@ -114,6 +115,7 @@ impl<'a> SelectedContext<'a> {
self,
sequence_set: &SequenceSet,
attributes: &'a MacroOrMessageDataItemNames<'static>,
+ modifiers: &[FetchModifier],
uid: &bool,
) -> Result<(Response<'static>, flow::Transition)> {
match self.mailbox.fetch(sequence_set, attributes, uid).await {
@@ -194,7 +196,7 @@ impl<'a> SelectedContext<'a> {
kind: &StoreType,
response: &StoreResponse,
flags: &[Flag<'a>],
- modifiers: &[(Atom<'a>, StoreModifier<'a>)],
+ modifiers: &[StoreModifier],
uid: &bool,
) -> Result<(Response<'static>, flow::Transition)> {
tracing::info!(modifiers=?modifiers);