fix: correct lifetimes and types for append

This commit is contained in:
Michael Bøcker-Larsen 2020-12-20 13:03:54 +08:00
parent e6341ccfc0
commit b7bc842979
No known key found for this signature in database
GPG key ID: FEC5F9A03674F95A
2 changed files with 11 additions and 15 deletions

View file

@ -89,13 +89,13 @@ pub struct AppendCmd<'a, T: Read + Write> {
session: &'a mut Session<T>,
content: &'a [u8],
mailbox: &'a str,
flags: Vec<&'a Flag<'a>>,
flags: Vec<Flag<'a>>,
date: Option<DateTime<FixedOffset>>,
}
impl<'a, T: Read + Write> AppendCmd<'a, T> {
/// Append a flag
pub fn flag(&mut self, flag: &'a Flag<'a>) -> &mut Self {
pub fn flag(&mut self, flag: Flag<'a>) -> &mut Self {
self.flags.push(flag);
self
}
@ -108,11 +108,12 @@ impl<'a, T: Read + Write> AppendCmd<'a, T> {
/// Run command when set up
#[must_use]
pub fn run(&self) -> Result<()> {
pub fn run(&mut self) -> Result<()> {
let flagstr = self
.flags
.clone()
.into_iter()
.filter(|f| **f != Flag::Recent)
.filter(|f| *f != Flag::Recent)
.map(|f| f.to_string())
.collect::<Vec<String>>()
.join(" ");
@ -1157,15 +1158,11 @@ impl<T: Read + Write> Session<T> {
/// > If a date-time is specified, the internal date SHOULD be set in
/// > the resulting message; otherwise, the internal date of the
/// > resulting message is set to the current date and time by default.
pub fn append<'a, S: AsRef<str>, B: AsRef<[u8]>>(
&mut self,
mailbox: S,
content: B,
) -> AppendCmd<'a, T> {
pub fn append<'a>(&'a mut self, mailbox: &'a str, content: &'a [u8]) -> AppendCmd<'a, T> {
AppendCmd {
session: self,
content: content.as_ref(),
mailbox: mailbox.as_ref(),
content,
mailbox,
flags: Vec::new(),
date: None,
}

View file

@ -253,7 +253,7 @@ fn append() {
let mbox = "INBOX";
c.select(mbox).unwrap();
//append
c.append(mbox, e.message_to_string().unwrap())
c.append(mbox, e.message_to_string().unwrap().as_bytes())
.run()
.unwrap();
@ -303,7 +303,7 @@ fn append_with_flags() {
c.select(mbox).unwrap();
//append
let flags: &[Flag] = &[Flag::Seen, Flag::Flagged];
c.append(mbox, e.message_to_string().unwrap())
c.append(mbox, e.message_to_string().unwrap().as_bytes())
.flag(Flag::Seen)
.flag(Flag::Flagged)
.run()
@ -359,11 +359,10 @@ fn append_with_flags_and_date() {
let mbox = "INBOX";
c.select(mbox).unwrap();
// append
let flags: &[Flag] = &[Flag::Seen, Flag::Flagged];
let date = FixedOffset::east(8 * 3600)
.ymd(2020, 12, 13)
.and_hms(13, 36, 36);
c.append(mbox, e.message_to_string().unwrap())
c.append(mbox, e.message_to_string().unwrap().as_bytes())
.flag(Flag::Seen)
.flag(Flag::Flagged)
.internal_date(date)