diff --git a/src/config.rs b/src/config.rs index 2725e92f..0aa5d7ef 100644 --- a/src/config.rs +++ b/src/config.rs @@ -3,7 +3,7 @@ use std::{collections::HashMap, path::PathBuf}; use comfy_table::ContentArrangement; use pimalaya_toolbox::{ config::{shell_expanded_string, TomlConfig}, - sasl::{Sasl, SaslAnonymous, SaslLogin, SaslMechanism, SaslPlain}, + sasl::{sasl_default_mechanisms, Sasl, SaslAnonymous, SaslLogin, SaslMechanism, SaslPlain}, secret::{Secret, SecretError}, stream::{Rustls, RustlsCrypto, Tls, TlsProvider}, }; @@ -166,17 +166,12 @@ impl TryFrom for Tls { #[derive(Clone, Debug, Default, Deserialize)] #[serde(rename_all = "kebab-case", deny_unknown_fields)] pub struct SaslConfig { - #[serde(default = "default_sasl_mechanisms")] - pub mechanisms: Vec, + pub mechanisms: Option>, pub login: Option, pub plain: Option, pub anonymous: Option, } -fn default_sasl_mechanisms() -> Vec { - vec![SaslMechanismConfig::Plain, SaslMechanismConfig::Login] -} - /// SASL mechanism configuration. #[derive(Clone, Debug, Deserialize)] #[serde(rename_all = "kebab-case")] @@ -217,15 +212,17 @@ impl TryFrom for Sasl { fn try_from(config: SaslConfig) -> Result { Ok(Sasl { - mechanisms: config - .mechanisms - .into_iter() - .map(|m| match m { - SaslMechanismConfig::Anonymous => SaslMechanism::Anonymous, - SaslMechanismConfig::Plain => SaslMechanism::Plain, - SaslMechanismConfig::Login => SaslMechanism::Login, - }) - .collect(), + mechanisms: match config.mechanisms { + None => sasl_default_mechanisms(), + Some(config) => config + .into_iter() + .map(|m| match m { + SaslMechanismConfig::Anonymous => SaslMechanism::Anonymous, + SaslMechanismConfig::Plain => SaslMechanism::Plain, + SaslMechanismConfig::Login => SaslMechanism::Login, + }) + .collect(), + }, anonymous: match config.anonymous { None => None, Some(config) => Some(SaslAnonymous {