use secrecy::SecretString;
#[derive(Clone, Debug)]
pub enum SaslMechanism {
Anonymous,
Login,
Plain,
OAuthBearer,
XOAuth2,
ScramSha256,
}
#[derive(Clone, Debug)]
pub enum Sasl {
Anonymous(SaslAnonymous),
Login(SaslLogin),
Plain(SaslPlain),
Oauthbearer(SaslOauthbearer),
Xoauth2(SaslXoauth2),
ScramSha256(SaslScramSha256),
}
impl From<SaslAnonymous> for Sasl {
fn from(sasl: SaslAnonymous) -> Self {
Self::Anonymous(sasl)
}
}
impl From<SaslLogin> for Sasl {
fn from(sasl: SaslLogin) -> Self {
Self::Login(sasl)
}
}
impl From<SaslPlain> for Sasl {
fn from(sasl: SaslPlain) -> Self {
Self::Plain(sasl)
}
}
impl From<SaslOauthbearer> for Sasl {
fn from(sasl: SaslOauthbearer) -> Self {
Self::Oauthbearer(sasl)
}
}
impl From<SaslXoauth2> for Sasl {
fn from(sasl: SaslXoauth2) -> Self {
Self::Xoauth2(sasl)
}
}
impl From<SaslScramSha256> for Sasl {
fn from(sasl: SaslScramSha256) -> Self {
Self::ScramSha256(sasl)
}
}
#[derive(Clone, Debug)]
pub struct SaslAnonymous {
pub message: Option<String>,
}
#[derive(Clone, Debug)]
pub struct SaslLogin {
pub username: String,
pub password: SecretString,
}
#[derive(Clone, Debug)]
pub struct SaslPlain {
pub authzid: Option<String>,
pub authcid: String,
pub passwd: SecretString,
}
#[derive(Clone, Debug)]
pub struct SaslOauthbearer {
pub username: String,
pub host: String,
pub port: u16,
pub token: SecretString,
}
#[derive(Clone, Debug)]
pub struct SaslXoauth2 {
pub username: String,
pub token: SecretString,
}
#[derive(Clone, Debug)]
pub struct SaslScramSha256 {
pub username: String,
pub password: SecretString,
}