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}