use imap_codec::imap_types::{
core::{AString, Atom, Vec1},
fetch::{MacroOrMessageDataItemNames, MessageDataItemName, Section},
flag::Flag,
};
use crate::imap::protocol_parser::RequiredResponses;
pub fn common_attributes() -> (RequiredResponses, MacroOrMessageDataItemNames<'static>) {
(
RequiredResponses::FETCH_UID
| RequiredResponses::FETCH_FLAGS
| RequiredResponses::FETCH_ENVELOPE
| RequiredResponses::FETCH_REFERENCES
| RequiredResponses::FETCH_BODYSTRUCTURE,
MacroOrMessageDataItemNames::MessageDataItemNames(vec![
MessageDataItemName::Uid,
MessageDataItemName::Flags,
MessageDataItemName::Envelope,
MessageDataItemName::BodyExt {
section: Some(Section::HeaderFields(
None,
Vec1::from(AString::from(Atom::unvalidated("REFERENCES"))),
)),
partial: None,
peek: true,
},
MessageDataItemName::BodyStructure,
]),
)
}
impl From<crate::email::Flag> for Vec<Flag<'static>> {
fn from(val: crate::email::Flag) -> Self {
let mut flags = vec![];
if val.is_replied() {
flags.push(Flag::Answered);
}
if val.is_seen() {
flags.push(Flag::Seen);
}
if val.is_trashed() {
flags.push(Flag::Deleted);
}
if val.is_draft() {
flags.push(Flag::Draft);
}
if val.is_flagged() {
flags.push(Flag::Flagged);
}
flags
}
}