1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
use super::{ESMTPCommand, Rfc5321}; use crate::common::*; use crate::smtp::{ApplyCommand, SmtpRset, SmtpSessionCommand, SmtpState}; impl SmtpSessionCommand for ESMTPCommand<SmtpRset> { fn verb(&self) -> &str { "RSET" } fn apply(&self, state: SmtpState) -> S2Fut<SmtpState> { Rfc5321::apply_cmd(&self.instruction, state) } } impl ApplyCommand<SmtpRset> for Rfc5321 { fn apply_cmd(_cmd: &SmtpRset, mut state: SmtpState) -> S2Fut<SmtpState> { state.reset(); state.say_ok(); Box::pin(ready(state)) } } #[cfg(test)] mod tests { use super::*; use crate::{ mail::{Builder, Recipient}, smtp::{SmtpMail, SmtpPath}, }; use futures_await_test::async_test; #[async_test] async fn transaction_gets_reset() { let mut set = SmtpState::new(Builder::default()); set.transaction.id = "someid".to_owned(); set.transaction.mail = Some(SmtpMail::Mail(SmtpPath::Null, vec![])); set.transaction.rcpts.push(Recipient::null()); set.transaction.extra_headers.insert_str(0, "feeeha"); let sut = Rfc5321::command(SmtpRset); let res = sut.apply(set).await; assert!(res.transaction.is_empty()) } }