1use crate::types::{ChallengeWindowSize, MessageVersion};
2use serde::{Deserialize, Serialize};
3
4#[derive(Debug, Clone, Serialize, Deserialize)]
10#[serde(rename_all = "camelCase")]
11pub struct ChallengeRequest {
12 pub message_type: MessageType,
13 pub message_version: MessageVersion,
14 #[serde(rename = "threeDSServerTransID")]
15 pub three_ds_server_trans_id: String,
16 #[serde(rename = "acsTransID")]
17 pub acs_trans_id: String,
18 #[serde(skip_serializing_if = "Option::is_none")]
20 pub challenge_data_entry: Option<String>,
21 #[serde(skip_serializing_if = "Option::is_none")]
23 pub challenge_window_size: Option<ChallengeWindowSize>,
24 #[serde(skip_serializing_if = "Option::is_none")]
26 pub challenge_completion_ind: Option<CompletionIndicator>,
27 #[serde(skip_serializing_if = "Option::is_none")]
29 pub sdk_trans_id: Option<String>,
30 #[serde(skip_serializing_if = "Option::is_none")]
32 pub resend_challenge: Option<ResendChallenge>,
33 #[serde(skip_serializing_if = "Option::is_none")]
35 pub whitelist_status_source: Option<String>,
36}
37
38#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
39pub enum MessageType {
40 CReq,
41}
42
43#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
44pub enum CompletionIndicator {
45 #[serde(rename = "Y")]
46 Completed,
47 #[serde(rename = "N")]
48 NotCompleted,
49}
50
51#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
52pub enum ResendChallenge {
53 #[serde(rename = "Y")]
54 Yes,
55}