Skip to main content

soph_mail/config/
mod.rs

1use serde::Deserialize;
2
3#[derive(Clone, Debug, Deserialize)]
4pub struct Mail {
5    #[serde(default)]
6    pub mailer: Mailer,
7    #[serde(default = "default_host")]
8    pub host: String,
9    #[serde(default = "default_port")]
10    pub port: u16,
11    #[serde(default = "default_username")]
12    pub username: String,
13    #[serde(default = "default_password")]
14    pub password: String,
15    #[serde(default = "default_timeout")]
16    pub timeout: u64,
17    #[serde(default)]
18    pub pool: PoolConfig,
19}
20
21#[derive(Clone, Debug, Default, Deserialize)]
22pub enum Mailer {
23    #[serde(rename = "smtp")]
24    Smtp,
25    #[default]
26    #[serde(rename = "stub")]
27    Stub,
28}
29
30impl std::fmt::Display for Mailer {
31    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
32        match self {
33            Self::Smtp => "smtp".fmt(f),
34            Self::Stub => "stub".fmt(f),
35        }
36    }
37}
38
39fn default_timeout() -> u64 {
40    3000 // 3 seconds
41}
42
43fn default_host() -> String {
44    "smtp.example.com".to_string()
45}
46
47fn default_port() -> u16 {
48    465
49}
50
51fn default_username() -> String {
52    "hello@example.com".to_string()
53}
54
55fn default_password() -> String {
56    "password".to_string()
57}
58
59#[derive(Clone, Debug, Deserialize)]
60pub struct PoolConfig {
61    #[serde(default = "default_min_idle")]
62    pub min_idle: u32,
63    #[serde(default = "default_max_size")]
64    pub max_size: u32,
65    #[serde(default = "default_idle_timeout")]
66    pub idle_timeout: u64,
67}
68
69impl Default for PoolConfig {
70    fn default() -> Self {
71        PoolConfig {
72            min_idle: default_min_idle(),
73            max_size: default_max_size(),
74            idle_timeout: default_idle_timeout(),
75        }
76    }
77}
78
79fn default_min_idle() -> u32 {
80    0
81}
82
83fn default_max_size() -> u32 {
84    10
85}
86
87fn default_idle_timeout() -> u64 {
88    60 * 1000
89}