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