use std::sync::{Arc, Mutex};
use async_trait::async_trait;
use tracing::{event, Level};
use super::{EmailError, EmailService};
use crate::email::Email;
pub struct TestEmailService {
pub emails: Arc<Mutex<Vec<Email>>>,
}
impl TestEmailService {
pub fn new() -> Self {
Self {
emails: Arc::new(Mutex::new(vec![])),
}
}
}
#[async_trait]
impl EmailService for TestEmailService {
async fn send(&self, email: Email) -> Result<(), EmailError> {
event!(Level::INFO, ?email, "Sending email");
self.emails.lock().unwrap().push(email);
Ok(())
}
}