use serde::{Deserialize, Serialize};
use std::fmt;
use std::str::FromStr;
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
#[non_exhaustive]
pub enum UpdateWebhookEndpointEvents {
AuthenticationEmailVerificationSucceeded,
AuthenticationMagicAuthFailed,
AuthenticationMagicAuthSucceeded,
AuthenticationMfaSucceeded,
AuthenticationOAuthFailed,
AuthenticationOAuthSucceeded,
AuthenticationPasswordFailed,
AuthenticationPasswordSucceeded,
AuthenticationPasskeyFailed,
AuthenticationPasskeySucceeded,
AuthenticationSSOFailed,
AuthenticationSSOStarted,
AuthenticationSSOSucceeded,
AuthenticationSSOTimedOut,
AuthenticationRadarRiskDetected,
ApiKeyCreated,
ApiKeyRevoked,
ConnectionActivated,
ConnectionDeactivated,
ConnectionSAMLCertificateRenewalRequired,
ConnectionSAMLCertificateRenewed,
ConnectionDeleted,
DsyncActivated,
DsyncDeleted,
DsyncGroupCreated,
DsyncGroupDeleted,
DsyncGroupUpdated,
DsyncGroupUserAdded,
DsyncGroupUserRemoved,
DsyncUserCreated,
DsyncUserDeleted,
DsyncUserUpdated,
EmailVerificationCreated,
GroupCreated,
GroupDeleted,
GroupMemberAdded,
GroupMemberRemoved,
GroupUpdated,
FlagCreated,
FlagDeleted,
FlagUpdated,
FlagRuleUpdated,
InvitationAccepted,
InvitationCreated,
InvitationResent,
InvitationRevoked,
MagicAuthCreated,
OrganizationCreated,
OrganizationDeleted,
OrganizationUpdated,
OrganizationDomainCreated,
OrganizationDomainDeleted,
OrganizationDomainUpdated,
OrganizationDomainVerified,
OrganizationDomainVerificationFailed,
PasswordResetCreated,
PasswordResetSucceeded,
UserCreated,
UserUpdated,
UserDeleted,
OrganizationMembershipCreated,
OrganizationMembershipDeleted,
OrganizationMembershipUpdated,
RoleCreated,
RoleDeleted,
RoleUpdated,
OrganizationRoleCreated,
OrganizationRoleDeleted,
OrganizationRoleUpdated,
PermissionCreated,
PermissionDeleted,
PermissionUpdated,
SessionCreated,
SessionRevoked,
WaitlistUserApproved,
WaitlistUserCreated,
WaitlistUserDenied,
Unknown(String),
}
impl UpdateWebhookEndpointEvents {
#[allow(deprecated)]
pub fn as_str(&self) -> &str {
match self {
Self::AuthenticationEmailVerificationSucceeded => {
"authentication.email_verification_succeeded"
}
Self::AuthenticationMagicAuthFailed => "authentication.magic_auth_failed",
Self::AuthenticationMagicAuthSucceeded => "authentication.magic_auth_succeeded",
Self::AuthenticationMfaSucceeded => "authentication.mfa_succeeded",
Self::AuthenticationOAuthFailed => "authentication.oauth_failed",
Self::AuthenticationOAuthSucceeded => "authentication.oauth_succeeded",
Self::AuthenticationPasswordFailed => "authentication.password_failed",
Self::AuthenticationPasswordSucceeded => "authentication.password_succeeded",
Self::AuthenticationPasskeyFailed => "authentication.passkey_failed",
Self::AuthenticationPasskeySucceeded => "authentication.passkey_succeeded",
Self::AuthenticationSSOFailed => "authentication.sso_failed",
Self::AuthenticationSSOStarted => "authentication.sso_started",
Self::AuthenticationSSOSucceeded => "authentication.sso_succeeded",
Self::AuthenticationSSOTimedOut => "authentication.sso_timed_out",
Self::AuthenticationRadarRiskDetected => "authentication.radar_risk_detected",
Self::ApiKeyCreated => "api_key.created",
Self::ApiKeyRevoked => "api_key.revoked",
Self::ConnectionActivated => "connection.activated",
Self::ConnectionDeactivated => "connection.deactivated",
Self::ConnectionSAMLCertificateRenewalRequired => {
"connection.saml_certificate_renewal_required"
}
Self::ConnectionSAMLCertificateRenewed => "connection.saml_certificate_renewed",
Self::ConnectionDeleted => "connection.deleted",
Self::DsyncActivated => "dsync.activated",
Self::DsyncDeleted => "dsync.deleted",
Self::DsyncGroupCreated => "dsync.group.created",
Self::DsyncGroupDeleted => "dsync.group.deleted",
Self::DsyncGroupUpdated => "dsync.group.updated",
Self::DsyncGroupUserAdded => "dsync.group.user_added",
Self::DsyncGroupUserRemoved => "dsync.group.user_removed",
Self::DsyncUserCreated => "dsync.user.created",
Self::DsyncUserDeleted => "dsync.user.deleted",
Self::DsyncUserUpdated => "dsync.user.updated",
Self::EmailVerificationCreated => "email_verification.created",
Self::GroupCreated => "group.created",
Self::GroupDeleted => "group.deleted",
Self::GroupMemberAdded => "group.member_added",
Self::GroupMemberRemoved => "group.member_removed",
Self::GroupUpdated => "group.updated",
Self::FlagCreated => "flag.created",
Self::FlagDeleted => "flag.deleted",
Self::FlagUpdated => "flag.updated",
Self::FlagRuleUpdated => "flag.rule_updated",
Self::InvitationAccepted => "invitation.accepted",
Self::InvitationCreated => "invitation.created",
Self::InvitationResent => "invitation.resent",
Self::InvitationRevoked => "invitation.revoked",
Self::MagicAuthCreated => "magic_auth.created",
Self::OrganizationCreated => "organization.created",
Self::OrganizationDeleted => "organization.deleted",
Self::OrganizationUpdated => "organization.updated",
Self::OrganizationDomainCreated => "organization_domain.created",
Self::OrganizationDomainDeleted => "organization_domain.deleted",
Self::OrganizationDomainUpdated => "organization_domain.updated",
Self::OrganizationDomainVerified => "organization_domain.verified",
Self::OrganizationDomainVerificationFailed => "organization_domain.verification_failed",
Self::PasswordResetCreated => "password_reset.created",
Self::PasswordResetSucceeded => "password_reset.succeeded",
Self::UserCreated => "user.created",
Self::UserUpdated => "user.updated",
Self::UserDeleted => "user.deleted",
Self::OrganizationMembershipCreated => "organization_membership.created",
Self::OrganizationMembershipDeleted => "organization_membership.deleted",
Self::OrganizationMembershipUpdated => "organization_membership.updated",
Self::RoleCreated => "role.created",
Self::RoleDeleted => "role.deleted",
Self::RoleUpdated => "role.updated",
Self::OrganizationRoleCreated => "organization_role.created",
Self::OrganizationRoleDeleted => "organization_role.deleted",
Self::OrganizationRoleUpdated => "organization_role.updated",
Self::PermissionCreated => "permission.created",
Self::PermissionDeleted => "permission.deleted",
Self::PermissionUpdated => "permission.updated",
Self::SessionCreated => "session.created",
Self::SessionRevoked => "session.revoked",
Self::WaitlistUserApproved => "waitlist_user.approved",
Self::WaitlistUserCreated => "waitlist_user.created",
Self::WaitlistUserDenied => "waitlist_user.denied",
Self::Unknown(s) => s.as_str(),
}
}
}
impl fmt::Display for UpdateWebhookEndpointEvents {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
f.write_str(self.as_str())
}
}
impl AsRef<str> for UpdateWebhookEndpointEvents {
fn as_ref(&self) -> &str {
self.as_str()
}
}
impl FromStr for UpdateWebhookEndpointEvents {
type Err = std::convert::Infallible;
#[allow(deprecated)]
fn from_str(s: &str) -> Result<Self, Self::Err> {
Ok(match s {
"authentication.email_verification_succeeded" => {
Self::AuthenticationEmailVerificationSucceeded
}
"authentication.magic_auth_failed" => Self::AuthenticationMagicAuthFailed,
"authentication.magic_auth_succeeded" => Self::AuthenticationMagicAuthSucceeded,
"authentication.mfa_succeeded" => Self::AuthenticationMfaSucceeded,
"authentication.oauth_failed" => Self::AuthenticationOAuthFailed,
"authentication.oauth_succeeded" => Self::AuthenticationOAuthSucceeded,
"authentication.password_failed" => Self::AuthenticationPasswordFailed,
"authentication.password_succeeded" => Self::AuthenticationPasswordSucceeded,
"authentication.passkey_failed" => Self::AuthenticationPasskeyFailed,
"authentication.passkey_succeeded" => Self::AuthenticationPasskeySucceeded,
"authentication.sso_failed" => Self::AuthenticationSSOFailed,
"authentication.sso_started" => Self::AuthenticationSSOStarted,
"authentication.sso_succeeded" => Self::AuthenticationSSOSucceeded,
"authentication.sso_timed_out" => Self::AuthenticationSSOTimedOut,
"authentication.radar_risk_detected" => Self::AuthenticationRadarRiskDetected,
"api_key.created" => Self::ApiKeyCreated,
"api_key.revoked" => Self::ApiKeyRevoked,
"connection.activated" => Self::ConnectionActivated,
"connection.deactivated" => Self::ConnectionDeactivated,
"connection.saml_certificate_renewal_required" => {
Self::ConnectionSAMLCertificateRenewalRequired
}
"connection.saml_certificate_renewed" => Self::ConnectionSAMLCertificateRenewed,
"connection.deleted" => Self::ConnectionDeleted,
"dsync.activated" => Self::DsyncActivated,
"dsync.deleted" => Self::DsyncDeleted,
"dsync.group.created" => Self::DsyncGroupCreated,
"dsync.group.deleted" => Self::DsyncGroupDeleted,
"dsync.group.updated" => Self::DsyncGroupUpdated,
"dsync.group.user_added" => Self::DsyncGroupUserAdded,
"dsync.group.user_removed" => Self::DsyncGroupUserRemoved,
"dsync.user.created" => Self::DsyncUserCreated,
"dsync.user.deleted" => Self::DsyncUserDeleted,
"dsync.user.updated" => Self::DsyncUserUpdated,
"email_verification.created" => Self::EmailVerificationCreated,
"group.created" => Self::GroupCreated,
"group.deleted" => Self::GroupDeleted,
"group.member_added" => Self::GroupMemberAdded,
"group.member_removed" => Self::GroupMemberRemoved,
"group.updated" => Self::GroupUpdated,
"flag.created" => Self::FlagCreated,
"flag.deleted" => Self::FlagDeleted,
"flag.updated" => Self::FlagUpdated,
"flag.rule_updated" => Self::FlagRuleUpdated,
"invitation.accepted" => Self::InvitationAccepted,
"invitation.created" => Self::InvitationCreated,
"invitation.resent" => Self::InvitationResent,
"invitation.revoked" => Self::InvitationRevoked,
"magic_auth.created" => Self::MagicAuthCreated,
"organization.created" => Self::OrganizationCreated,
"organization.deleted" => Self::OrganizationDeleted,
"organization.updated" => Self::OrganizationUpdated,
"organization_domain.created" => Self::OrganizationDomainCreated,
"organization_domain.deleted" => Self::OrganizationDomainDeleted,
"organization_domain.updated" => Self::OrganizationDomainUpdated,
"organization_domain.verified" => Self::OrganizationDomainVerified,
"organization_domain.verification_failed" => Self::OrganizationDomainVerificationFailed,
"password_reset.created" => Self::PasswordResetCreated,
"password_reset.succeeded" => Self::PasswordResetSucceeded,
"user.created" => Self::UserCreated,
"user.updated" => Self::UserUpdated,
"user.deleted" => Self::UserDeleted,
"organization_membership.created" => Self::OrganizationMembershipCreated,
"organization_membership.deleted" => Self::OrganizationMembershipDeleted,
"organization_membership.updated" => Self::OrganizationMembershipUpdated,
"role.created" => Self::RoleCreated,
"role.deleted" => Self::RoleDeleted,
"role.updated" => Self::RoleUpdated,
"organization_role.created" => Self::OrganizationRoleCreated,
"organization_role.deleted" => Self::OrganizationRoleDeleted,
"organization_role.updated" => Self::OrganizationRoleUpdated,
"permission.created" => Self::PermissionCreated,
"permission.deleted" => Self::PermissionDeleted,
"permission.updated" => Self::PermissionUpdated,
"session.created" => Self::SessionCreated,
"session.revoked" => Self::SessionRevoked,
"waitlist_user.approved" => Self::WaitlistUserApproved,
"waitlist_user.created" => Self::WaitlistUserCreated,
"waitlist_user.denied" => Self::WaitlistUserDenied,
other => Self::Unknown(other.to_string()),
})
}
}
impl From<String> for UpdateWebhookEndpointEvents {
fn from(s: String) -> Self {
match Self::from_str(&s) {
Ok(Self::Unknown(_)) => Self::Unknown(s),
Ok(other) => other,
}
}
}
impl From<&str> for UpdateWebhookEndpointEvents {
fn from(s: &str) -> Self {
Self::from_str(s).unwrap_or_else(|_| Self::Unknown(s.to_string()))
}
}
impl Serialize for UpdateWebhookEndpointEvents {
fn serialize<S: serde::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
serializer.serialize_str(self.as_str())
}
}
impl<'de> Deserialize<'de> for UpdateWebhookEndpointEvents {
fn deserialize<D: serde::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
let s = String::deserialize(deserializer)?;
Ok(Self::from(s))
}
}