email/tls/
derive.rs

1use serde::{Deserialize, Serialize};
2
3#[cfg(feature = "native-tls")]
4use super::NativeTls;
5#[cfg(feature = "rustls")]
6use super::Rustls;
7
8#[derive(Clone, Debug, Eq, PartialEq, Serialize, Deserialize)]
9#[serde(rename_all = "kebab-case", tag = "type")]
10pub enum TlsProvider {
11    #[cfg(feature = "rustls")]
12    Rustls(Rustls),
13    #[cfg(not(feature = "rustls"))]
14    #[serde(skip_serializing, deserialize_with = "missing_rustls_feature")]
15    Rustls,
16    #[cfg(feature = "native-tls")]
17    NativeTls(NativeTls),
18    #[cfg(not(feature = "native-tls"))]
19    #[serde(skip_serializing, deserialize_with = "missing_native_tls_feature")]
20    NativeTls,
21    None,
22}
23
24impl From<TlsProvider> for super::TlsProvider {
25    fn from(provider: TlsProvider) -> Self {
26        match provider {
27            #[cfg(feature = "rustls")]
28            TlsProvider::Rustls(provider) => super::TlsProvider::Rustls(provider),
29            #[cfg(feature = "native-tls")]
30            TlsProvider::NativeTls(provider) => super::TlsProvider::NativeTls(provider),
31            _ => super::TlsProvider::None,
32        }
33    }
34}
35
36#[cfg(not(feature = "rustls"))]
37fn missing_rustls_feature<'de, D>(_: D) -> Result<(), D::Error>
38where
39    D: serde::Deserializer<'de>,
40{
41    use serde::de::Error;
42    Err(Error::custom("missing `rustls` cargo feature"))
43}
44
45#[cfg(not(feature = "native-tls"))]
46fn missing_native_tls_feature<'de, D>(_: D) -> Result<(), D::Error>
47where
48    D: serde::Deserializer<'de>,
49{
50    use serde::de::Error;
51    Err(Error::custom("missing `native-tls` cargo feature"))
52}