use serde_derive::{Deserialize, Serialize};
#[derive(Clone, Debug, Deserialize, Serialize)]
pub struct ThreeDSecureDetails {
#[serde(skip_serializing_if = "Option::is_none")]
pub authentication_flow: Option<Box<ThreeDSecureDetailsAuthenticationFlow>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub result: Option<Box<ThreeDSecureDetailsResult>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub result_reason: Option<Box<ThreeDSecureDetailsResultReason>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub version: Option<Box<ThreeDSecureDetailsVersion>>,
}
#[derive(Copy, Clone, Debug, Deserialize, Serialize, Eq, PartialEq)]
#[serde(rename_all = "snake_case")]
pub enum ThreeDSecureDetailsAuthenticationFlow {
Challenge,
Frictionless,
}
impl ThreeDSecureDetailsAuthenticationFlow {
pub fn as_str(self) -> &'static str {
match self {
ThreeDSecureDetailsAuthenticationFlow::Challenge => "challenge",
ThreeDSecureDetailsAuthenticationFlow::Frictionless => "frictionless",
}
}
}
impl AsRef<str> for ThreeDSecureDetailsAuthenticationFlow {
fn as_ref(&self) -> &str {
self.as_str()
}
}
impl std::fmt::Display for ThreeDSecureDetailsAuthenticationFlow {
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
self.as_str().fmt(f)
}
}
#[derive(Copy, Clone, Debug, Deserialize, Serialize, Eq, PartialEq)]
#[serde(rename_all = "snake_case")]
pub enum ThreeDSecureDetailsResult {
AttemptAcknowledged,
Authenticated,
Failed,
NotSupported,
ProcessingError,
}
impl ThreeDSecureDetailsResult {
pub fn as_str(self) -> &'static str {
match self {
ThreeDSecureDetailsResult::AttemptAcknowledged => "attempt_acknowledged",
ThreeDSecureDetailsResult::Authenticated => "authenticated",
ThreeDSecureDetailsResult::Failed => "failed",
ThreeDSecureDetailsResult::NotSupported => "not_supported",
ThreeDSecureDetailsResult::ProcessingError => "processing_error",
}
}
}
impl AsRef<str> for ThreeDSecureDetailsResult {
fn as_ref(&self) -> &str {
self.as_str()
}
}
impl std::fmt::Display for ThreeDSecureDetailsResult {
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
self.as_str().fmt(f)
}
}
#[derive(Copy, Clone, Debug, Deserialize, Serialize, Eq, PartialEq)]
#[serde(rename_all = "snake_case")]
pub enum ThreeDSecureDetailsResultReason {
Abandoned,
Bypassed,
Canceled,
CardNotEnrolled,
NetworkNotSupported,
ProtocolError,
Rejected,
}
impl ThreeDSecureDetailsResultReason {
pub fn as_str(self) -> &'static str {
match self {
ThreeDSecureDetailsResultReason::Abandoned => "abandoned",
ThreeDSecureDetailsResultReason::Bypassed => "bypassed",
ThreeDSecureDetailsResultReason::Canceled => "canceled",
ThreeDSecureDetailsResultReason::CardNotEnrolled => "card_not_enrolled",
ThreeDSecureDetailsResultReason::NetworkNotSupported => "network_not_supported",
ThreeDSecureDetailsResultReason::ProtocolError => "protocol_error",
ThreeDSecureDetailsResultReason::Rejected => "rejected",
}
}
}
impl AsRef<str> for ThreeDSecureDetailsResultReason {
fn as_ref(&self) -> &str {
self.as_str()
}
}
impl std::fmt::Display for ThreeDSecureDetailsResultReason {
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
self.as_str().fmt(f)
}
}
#[derive(Copy, Clone, Debug, Deserialize, Serialize, Eq, PartialEq)]
#[serde(rename_all = "snake_case")]
pub enum ThreeDSecureDetailsVersion {
#[serde(rename = "1.0.2")]
V1_0_2,
#[serde(rename = "2.1.0")]
V2_1_0,
#[serde(rename = "2.2.0")]
V2_2_0,
}
impl ThreeDSecureDetailsVersion {
pub fn as_str(self) -> &'static str {
match self {
ThreeDSecureDetailsVersion::V1_0_2 => "1.0.2",
ThreeDSecureDetailsVersion::V2_1_0 => "2.1.0",
ThreeDSecureDetailsVersion::V2_2_0 => "2.2.0",
}
}
}
impl AsRef<str> for ThreeDSecureDetailsVersion {
fn as_ref(&self) -> &str {
self.as_str()
}
}
impl std::fmt::Display for ThreeDSecureDetailsVersion {
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
self.as_str().fmt(f)
}
}