Skip to main content

emv_3ds/types/
card.rs

1use serde::{Deserialize, Serialize};
2
3/// Type of account being used for the transaction.
4#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
5pub enum AccountType {
6    #[serde(rename = "01")]
7    NotApplicable,
8    #[serde(rename = "02")]
9    Credit,
10    #[serde(rename = "03")]
11    Debit,
12}
13
14/// Cardholder account information used for risk assessment.
15#[derive(Debug, Clone, Default, Serialize, Deserialize)]
16#[serde(rename_all = "camelCase")]
17pub struct AccountInfo {
18    /// Length of time that the cardholder has had the account (01–04).
19    #[serde(skip_serializing_if = "Option::is_none")]
20    pub ch_acc_age_ind: Option<String>,
21    /// Date that the cardholder opened the account (YYYYMMDD).
22    #[serde(skip_serializing_if = "Option::is_none")]
23    pub ch_acc_date: Option<String>,
24    /// Length of time since the last change to the account (01–04).
25    #[serde(skip_serializing_if = "Option::is_none")]
26    pub ch_acc_change_ind: Option<String>,
27    /// Date the last account change occurred (YYYYMMDD).
28    #[serde(skip_serializing_if = "Option::is_none")]
29    pub ch_acc_change: Option<String>,
30    /// Length of time since the password last changed (01–04).
31    #[serde(skip_serializing_if = "Option::is_none")]
32    pub ch_acc_pw_change_ind: Option<String>,
33    /// Number of transactions in the past 24 hours.
34    #[serde(skip_serializing_if = "Option::is_none")]
35    pub nb_purchase_account: Option<String>,
36    /// Number of add-card attempts in the past 24 hours.
37    #[serde(skip_serializing_if = "Option::is_none")]
38    pub provision_attempts_day: Option<String>,
39    /// Number of transactions in the past year.
40    #[serde(skip_serializing_if = "Option::is_none")]
41    pub txn_activity_year: Option<String>,
42    /// Number of transactions in the previous 6 months.
43    #[serde(skip_serializing_if = "Option::is_none")]
44    pub txn_activity_day: Option<String>,
45    /// Date that the shipping address was first used (YYYYMMDD).
46    #[serde(skip_serializing_if = "Option::is_none")]
47    pub ship_address_usage: Option<String>,
48    /// Indicator for when the shipping address was first used (01–04).
49    #[serde(skip_serializing_if = "Option::is_none")]
50    pub ship_address_usage_ind: Option<ShippingAddressUsage>,
51    /// Name on account vs shipping name match indicator.
52    #[serde(skip_serializing_if = "Option::is_none")]
53    pub ship_name_indicator: Option<String>,
54    #[serde(skip_serializing_if = "Option::is_none")]
55    pub suspicious_acc_activity: Option<super::coded::SuspiciousAccActivity>,
56}
57
58#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
59pub enum ShippingAddressUsage {
60    #[serde(rename = "01")]
61    ThisTransaction,
62    #[serde(rename = "02")]
63    LessThan30Days,
64    #[serde(rename = "03")]
65    ThirtyTo60Days,
66    #[serde(rename = "04")]
67    MoreThan60Days,
68}
69
70/// BIN range for card identification.
71#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
72pub struct CardRange {
73    pub start_acct_range: String,
74    pub end_acct_range: String,
75}