1use std::{fmt, path::PathBuf};
2
3#[cfg(feature = "derive")]
4pub mod derive;
5
6#[derive(Clone, Debug, Eq, PartialEq)]
7#[cfg_attr(
8 feature = "derive",
9 derive(serde::Serialize, serde::Deserialize),
10 serde(rename_all = "kebab-case"),
11 serde(tag = "type")
12)]
13pub enum Encryption {
14 Tls(Tls),
15 #[cfg_attr(feature = "derive", serde(alias = "starttls"))]
16 StartTls(Tls),
17 None,
18}
19
20impl Default for Encryption {
21 fn default() -> Self {
22 Self::Tls(Default::default())
23 }
24}
25
26impl fmt::Display for Encryption {
27 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
28 match self {
29 Self::Tls(_) => write!(f, "SSL/TLS"),
30 Self::StartTls(_) => write!(f, "StartTLS"),
31 Self::None => write!(f, "None"),
32 }
33 }
34}
35
36#[derive(Clone, Debug, Default, Eq, PartialEq)]
37#[cfg_attr(
38 feature = "derive",
39 derive(serde::Serialize, serde::Deserialize),
40 serde(rename_all = "kebab-case")
41)]
42pub struct Tls {
43 pub provider: Option<TlsProvider>,
44 pub cert: Option<PathBuf>,
45}
46
47#[derive(Clone, Debug, Eq, PartialEq)]
48#[cfg_attr(
49 feature = "derive",
50 derive(serde::Serialize, serde::Deserialize),
51 serde(rename_all = "kebab-case"),
52 serde(tag = "type"),
53 serde(from = "derive::TlsProvider")
54)]
55pub enum TlsProvider {
56 #[cfg(feature = "rustls")]
57 Rustls(Rustls),
58 None,
61}
62
63#[cfg(feature = "rustls")]
64impl Default for TlsProvider {
65 fn default() -> Self {
66 TlsProvider::Rustls(Default::default())
67 }
68}
69
70#[cfg(not(feature = "rustls"))]
71impl Default for TlsProvider {
72 fn default() -> Self {
73 Tls::None
74 }
75}
76
77impl fmt::Display for TlsProvider {
78 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
79 match self {
80 #[cfg(feature = "rustls")]
81 Self::Rustls(_) => write!(f, "Rust native (rustls)"),
82 Self::None => write!(f, "None"),
85 }
86 }
87}
88
89#[derive(Clone, Debug, Default, Eq, PartialEq)]
90#[cfg(feature = "rustls")]
91#[cfg_attr(
92 feature = "derive",
93 derive(serde::Serialize, serde::Deserialize),
94 serde(rename_all = "kebab-case")
95)]
96pub struct Rustls {
97 }
99
100