#[cfg(any(
feature = "mailersend",
feature = "terminal",
feature = "smtp",
feature = "memory",
feature = "document-features"
))]
use crate::configuration::EmailConfiguration;
#[cfg(any(
feature = "mailersend",
feature = "terminal",
feature = "smtp",
feature = "memory",
feature = "document-features"
))]
use crate::traits::EmailTrait;
#[cfg_attr(docsrs, doc(cfg(feature = "smtp")))]
#[cfg(feature = "smtp")]
pub mod smtp;
#[cfg_attr(docsrs, doc(cfg(feature = "memory")))]
#[cfg(feature = "memory")]
pub mod memory;
#[cfg_attr(docsrs, doc(cfg(feature = "terminal")))]
#[cfg(feature = "terminal")]
pub mod terminal;
#[cfg_attr(docsrs, doc(cfg(feature = "mailersend")))]
#[cfg(feature = "mailersend")]
pub mod mailersend;
#[cfg(any(
feature = "mailersend",
feature = "terminal",
feature = "smtp",
feature = "memory",
feature = "document-features"
))]
#[derive(Clone, Debug)]
pub enum EmailClient {
#[cfg(feature = "smtp")]
Smtp(smtp::SmtpClient),
#[cfg(feature = "terminal")]
Terminal(terminal::TerminalClient),
#[cfg(feature = "memory")]
Memory(memory::MemoryClient),
#[cfg(feature = "mailersend")]
MailerSend(mailersend::MailerSendClient),
}
#[cfg(feature = "terminal")]
impl Default for EmailClient {
fn default() -> Self {
EmailClient::Terminal(Default::default())
}
}
#[cfg(any(
feature = "mailersend",
feature = "terminal",
feature = "smtp",
feature = "memory",
feature = "document-features"
))]
pub fn get_email_client(configuration: EmailConfiguration) -> EmailClient {
match configuration {
#[cfg(feature = "terminal")]
EmailConfiguration::Terminal(c) => EmailClient::Terminal(terminal::TerminalClient::new(c)),
#[cfg(feature = "smtp")]
EmailConfiguration::SMTP(smtp_config) => {
EmailClient::Smtp(smtp::SmtpClient::new(smtp_config))
}
#[cfg(feature = "memory")]
EmailConfiguration::Memory(c) => EmailClient::Memory(memory::MemoryClient::new(c)),
#[cfg(feature = "mailersend")]
EmailConfiguration::Mailersend(c) => {
EmailClient::MailerSend(mailersend::MailerSendClient::new(c))
}
}
}
#[cfg(any(
feature = "mailersend",
feature = "terminal",
feature = "smtp",
feature = "memory",
feature = "document-features"
))]
impl EmailClient {
pub fn unwrap(self) -> Box<dyn EmailTrait + Send> {
match self {
#[cfg(feature = "smtp")]
EmailClient::Smtp(c) => Box::new(c) as Box<dyn EmailTrait + Send>,
#[cfg(feature = "terminal")]
EmailClient::Terminal(c) => Box::new(c) as Box<dyn EmailTrait + Send>,
#[cfg(feature = "memory")]
EmailClient::Memory(c) => Box::new(c) as Box<dyn EmailTrait + Send>,
#[cfg(feature = "mailersend")]
EmailClient::MailerSend(c) => Box::new(c) as Box<dyn EmailTrait + Send>,
}
}
}