1use crate::types::{MessageVersion, ResultsStatus};
2use serde::{Deserialize, Serialize};
3
4#[derive(Debug, Clone, Serialize, Deserialize)]
10#[serde(rename_all = "camelCase")]
11pub struct ResultsResponse {
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(rename = "dsTransID", skip_serializing_if = "Option::is_none")]
19 pub ds_trans_id: Option<String>,
20 pub results_status: ResultsStatus,
21 #[serde(skip_serializing_if = "Option::is_none")]
22 pub message_extension: Option<Vec<super::rreq::MessageExtension>>,
23}
24
25impl ResultsResponse {
26 pub fn acknowledge(rreq: &super::rreq::ResultsRequest) -> Self {
28 Self {
29 message_type: MessageType::RRes,
30 message_version: rreq.message_version,
31 three_ds_server_trans_id: rreq.three_ds_server_trans_id.clone(),
32 acs_trans_id: rreq.acs_trans_id.clone(),
33 ds_trans_id: rreq.ds_trans_id.clone(),
34 results_status: ResultsStatus::Received,
35 message_extension: None,
36 }
37 }
38}
39
40#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
41pub enum MessageType {
42 RRes,
43}