use super::StartTls;
use crate::common::S1Fut;
use crate::smtp::{extension, Action, SmtpContext};
impl Action<StartTls> for StartTls {
fn apply<'a, 's, 'f>(&'a self, _cmd: StartTls, state: &'s mut SmtpContext) -> S1Fut<'f, ()>
where
'a: 'f,
's: 'f,
{
Box::pin(async move {
if state.session.peer_name.is_none() {
state.session.say_command_sequence_fail()
} else {
if state.session.extensions.disable(&extension::STARTTLS) {
state.session.reset();
state.session.say_start_tls()
} else {
state.session.say_not_implemented()
}
}
})
}
}