use reinhardt_core::macros::settings;
use serde::{Deserialize, Serialize};
use std::path::PathBuf;
fn default_backend() -> String {
"console".to_string()
}
fn default_host() -> String {
"localhost".to_string()
}
fn default_port() -> u16 {
25
}
fn default_from_email() -> String {
"noreply@example.com".to_string()
}
fn default_server_email() -> String {
"root@localhost".to_string()
}
#[settings(fragment = true, section = "email")]
#[non_exhaustive]
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct EmailSettings {
#[serde(default = "default_backend")]
pub backend: String,
#[serde(default = "default_host")]
pub host: String,
#[serde(default = "default_port")]
pub port: u16,
pub username: Option<String>,
pub password: Option<String>,
pub use_tls: bool,
pub use_ssl: bool,
#[serde(default = "default_from_email")]
pub from_email: String,
#[serde(default)]
pub admins: Vec<(String, String)>,
#[serde(default)]
pub managers: Vec<(String, String)>,
#[serde(default = "default_server_email")]
pub server_email: String,
#[serde(default)]
pub subject_prefix: String,
pub timeout: Option<u64>,
pub ssl_certfile: Option<PathBuf>,
pub ssl_keyfile: Option<PathBuf>,
#[serde(default)]
pub file_path: Option<PathBuf>,
}
impl Default for EmailSettings {
fn default() -> Self {
Self {
backend: "console".to_string(),
host: "localhost".to_string(),
port: 25,
username: None,
password: None,
use_tls: false,
use_ssl: false,
from_email: "noreply@example.com".to_string(),
admins: Vec::new(),
managers: Vec::new(),
server_email: default_server_email(),
subject_prefix: String::new(),
timeout: None,
ssl_certfile: None,
ssl_keyfile: None,
file_path: None,
}
}
}
#[cfg(test)]
mod tests {
use super::*;
use crate::settings::fragment::SettingsFragment;
use rstest::rstest;
#[rstest]
fn test_email_section_name() {
let section = EmailSettings::section();
assert_eq!(section, "email");
}
#[rstest]
fn test_email_default_values() {
let settings = EmailSettings::default();
assert_eq!(settings.backend, "console");
assert_eq!(settings.host, "localhost");
assert_eq!(settings.port, 25);
assert!(settings.username.is_none());
assert!(settings.password.is_none());
assert!(!settings.use_tls);
assert!(!settings.use_ssl);
assert_eq!(settings.from_email, "noreply@example.com");
assert!(settings.admins.is_empty());
assert!(settings.managers.is_empty());
assert_eq!(settings.server_email, "root@localhost");
assert!(settings.subject_prefix.is_empty());
assert!(settings.timeout.is_none());
assert!(settings.ssl_certfile.is_none());
assert!(settings.ssl_keyfile.is_none());
assert!(settings.file_path.is_none());
}
}