use serde::{Deserialize, Serialize};
use std::collections::HashMap;
use std::fmt;
#[cfg(feature = "python")]
use pyo3::pyclass;
#[derive(Clone)]
#[cfg_attr(
feature = "python",
pyclass(dict, get_all, set_all, str, eq, subclass, from_py_object)
)]
#[derive(Serialize, Deserialize, Debug, PartialEq, Eq)]
pub struct EmailConfig {
pub server: String,
pub sender_email: String,
pub username: String,
pub password: String,
}
impl EmailConfig {
pub fn new(server: &str, sender_email: &str, username: &str, password: &str) -> Self {
EmailConfig {
server: server.to_string(),
sender_email: sender_email.to_string(),
username: username.to_string(),
password: password.to_string(),
}
}
pub fn from_env() -> Self {
let server = std::env::var("EMAIL_SERVER").unwrap_or_default();
let sender_email = std::env::var("EMAIL_SENDER_EMAIL").unwrap_or_default();
let username = std::env::var("EMAIL_USERNAME").unwrap_or_default();
let password = std::env::var("EMAIL_PASSWORD").unwrap_or_default();
EmailConfig {
server,
sender_email,
username,
password,
}
}
}
impl fmt::Display for EmailConfig {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
write!(
f,
"EmailConfig<server={}, sender_email={}, username={}, password={}>",
self.server, self.sender_email, self.username, self.password
)
}
}
impl From<HashMap<String, String>> for EmailConfig {
fn from(map: HashMap<String, String>) -> Self {
EmailConfig {
server: map.get("server").cloned().unwrap_or_default(),
sender_email: map.get("sender_email").cloned().unwrap_or_default(),
username: map.get("username").cloned().unwrap_or_default(),
password: map.get("password").cloned().unwrap_or_default(),
}
}
}