Skip to main content

rs_auth_core/
email.rs

1use async_trait::async_trait;
2
3use crate::error::AuthError;
4use crate::types::User;
5
6/// Trait for sending authentication-related emails.
7#[async_trait]
8pub trait EmailSender: Send + Sync {
9    async fn send_verification_email(&self, user: &User, token: &str) -> Result<(), AuthError>;
10
11    async fn send_password_reset_email(&self, user: &User, token: &str) -> Result<(), AuthError>;
12}
13
14/// Development email sender that logs emails instead of sending them.
15#[derive(Debug, Default, Clone, Copy)]
16pub struct LogEmailSender;
17
18#[async_trait]
19impl EmailSender for LogEmailSender {
20    async fn send_verification_email(&self, user: &User, token: &str) -> Result<(), AuthError> {
21        tracing::info!(email = %user.email, token = %token, "verification email (dev mode)");
22        Ok(())
23    }
24
25    async fn send_password_reset_email(&self, user: &User, token: &str) -> Result<(), AuthError> {
26        tracing::info!(email = %user.email, token = %token, "password reset email (dev mode)");
27        Ok(())
28    }
29}