use crate::configuration::EmailConfiguration;
use crate::email::{EmailAddress, EmailObject};
use crate::traits::EmailTrait;
use async_trait::async_trait;
#[derive(Debug, Clone, serde::Deserialize, serde::Serialize, Default, PartialOrd, PartialEq)]
pub struct TerminalConfig {
pub sender: EmailAddress,
}
impl From<String> for TerminalConfig {
fn from(value: String) -> Self {
Self {
sender: value.as_str().into(),
}
}
}
#[derive(Clone, Debug, Default, PartialOrd, PartialEq)]
pub struct TerminalClient {
sender: EmailAddress,
}
impl From<TerminalConfig> for EmailConfiguration {
fn from(value: TerminalConfig) -> Self {
EmailConfiguration::Terminal(value)
}
}
impl TerminalClient {
pub fn new(config: TerminalConfig) -> Self {
Self {
sender: config.sender,
}
}
}
#[async_trait]
impl EmailTrait for TerminalClient {
fn get_sender(&self) -> EmailAddress {
self.sender.clone()
}
async fn send_emails(&self, email: EmailObject) -> crate::Result<()> {
println!("From: {}", self.sender);
for e in email.to {
println!("To: {} <{}>", e.name, e.email);
}
println!("Subject: {}\n\n", email.subject);
println!("{}", email.plain);
println!("----------");
println!("{}", email.html);
Ok(())
}
}