use serde::{Deserialize, Serialize};
use std::fmt;
use std::str::FromStr;
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
#[non_exhaustive]
pub enum UserManagementAuthenticationProvider {
Authkit,
AppleOAuth,
BitbucketOAuth,
GitHubOAuth,
GitLabOAuth,
GoogleOAuth,
IntuitOAuth,
LinkedInOAuth,
MicrosoftOAuth,
SalesforceOAuth,
SlackOAuth,
VercelMarketplaceOAuth,
VercelOAuth,
XeroOAuth,
Unknown(String),
}
impl UserManagementAuthenticationProvider {
#[allow(deprecated)]
pub fn as_str(&self) -> &str {
match self {
Self::Authkit => "authkit",
Self::AppleOAuth => "AppleOAuth",
Self::BitbucketOAuth => "BitbucketOAuth",
Self::GitHubOAuth => "GitHubOAuth",
Self::GitLabOAuth => "GitLabOAuth",
Self::GoogleOAuth => "GoogleOAuth",
Self::IntuitOAuth => "IntuitOAuth",
Self::LinkedInOAuth => "LinkedInOAuth",
Self::MicrosoftOAuth => "MicrosoftOAuth",
Self::SalesforceOAuth => "SalesforceOAuth",
Self::SlackOAuth => "SlackOAuth",
Self::VercelMarketplaceOAuth => "VercelMarketplaceOAuth",
Self::VercelOAuth => "VercelOAuth",
Self::XeroOAuth => "XeroOAuth",
Self::Unknown(s) => s.as_str(),
}
}
}
impl fmt::Display for UserManagementAuthenticationProvider {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
f.write_str(self.as_str())
}
}
impl AsRef<str> for UserManagementAuthenticationProvider {
fn as_ref(&self) -> &str {
self.as_str()
}
}
impl FromStr for UserManagementAuthenticationProvider {
type Err = std::convert::Infallible;
#[allow(deprecated)]
fn from_str(s: &str) -> Result<Self, Self::Err> {
Ok(match s {
"authkit" => Self::Authkit,
"AppleOAuth" => Self::AppleOAuth,
"BitbucketOAuth" => Self::BitbucketOAuth,
"GitHubOAuth" => Self::GitHubOAuth,
"GitLabOAuth" => Self::GitLabOAuth,
"GoogleOAuth" => Self::GoogleOAuth,
"IntuitOAuth" => Self::IntuitOAuth,
"LinkedInOAuth" => Self::LinkedInOAuth,
"MicrosoftOAuth" => Self::MicrosoftOAuth,
"SalesforceOAuth" => Self::SalesforceOAuth,
"SlackOAuth" => Self::SlackOAuth,
"VercelMarketplaceOAuth" => Self::VercelMarketplaceOAuth,
"VercelOAuth" => Self::VercelOAuth,
"XeroOAuth" => Self::XeroOAuth,
other => Self::Unknown(other.to_string()),
})
}
}
impl From<String> for UserManagementAuthenticationProvider {
fn from(s: String) -> Self {
match Self::from_str(&s) {
Ok(Self::Unknown(_)) => Self::Unknown(s),
Ok(other) => other,
}
}
}
impl From<&str> for UserManagementAuthenticationProvider {
fn from(s: &str) -> Self {
Self::from_str(s).unwrap_or_else(|_| Self::Unknown(s.to_string()))
}
}
impl Serialize for UserManagementAuthenticationProvider {
fn serialize<S: serde::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
serializer.serialize_str(self.as_str())
}
}
impl<'de> Deserialize<'de> for UserManagementAuthenticationProvider {
fn deserialize<D: serde::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
let s = String::deserialize(deserializer)?;
Ok(Self::from(s))
}
}