Skip to main content

emv_3ds/types/
device.rs

1use serde::{Deserialize, Serialize};
2
3/// Browser environment data collected by the 3DS Method or JS snippet.
4#[derive(Debug, Clone, Serialize, Deserialize)]
5#[serde(rename_all = "camelCase")]
6pub struct BrowserInfo {
7    /// Whether Java is enabled.
8    pub browser_java_enabled: bool,
9    /// Whether JavaScript is enabled.
10    #[serde(skip_serializing_if = "Option::is_none")]
11    pub browser_java_script_enabled: Option<bool>,
12    /// Value representing the browser language (IETF BCP47, e.g. "en-GB").
13    pub browser_language: String,
14    /// Colour depth of the browser screen (1, 4, 8, 15, 16, 24, 32, 48).
15    pub browser_color_depth: String,
16    /// Screen height in pixels.
17    pub browser_screen_height: String,
18    /// Screen width in pixels.
19    pub browser_screen_width: String,
20    /// Time-zone offset in minutes (e.g. -60 for UTC+1).
21    pub browser_tz: String,
22    /// HTTP Accept header sent by the browser.
23    pub browser_accept_header: String,
24    /// User-agent string of the browser.
25    pub browser_user_agent: String,
26    /// IP address of the browser (v4 or v6).
27    #[serde(skip_serializing_if = "Option::is_none")]
28    pub browser_ip: Option<String>,
29}
30
31/// SDK-collected device data (app channel).
32#[derive(Debug, Clone, Serialize, Deserialize)]
33#[serde(rename_all = "camelCase")]
34pub struct SdkInfo {
35    /// Unique ID for the app install (UUIDv4).
36    pub sdk_app_id: String,
37    /// Ephemeral public key generated by the SDK for this transaction.
38    pub sdk_ephem_pub_key: serde_json::Value,
39    /// Reference number for the 3DS SDK.
40    pub sdk_reference_number: String,
41    /// Unique transaction identifier generated by the SDK (UUIDv4).
42    pub sdk_trans_id: String,
43    /// JWE-encrypted device data blob.
44    pub sdk_enc_data: String,
45    /// Maximum timeout in minutes for SDK challenge.
46    #[serde(skip_serializing_if = "Option::is_none")]
47    pub sdk_max_timeout: Option<u8>,
48}
49
50/// SDK UI rendering capabilities.
51#[derive(Debug, Clone, Serialize, Deserialize)]
52#[serde(rename_all = "camelCase")]
53pub struct DeviceRenderOptions {
54    /// SDK interface types supported.
55    pub sdk_interface: SdkInterface,
56    /// UI types supported.
57    pub sdk_ui_type: Vec<UiType>,
58}
59
60#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
61pub enum SdkInterface {
62    #[serde(rename = "01")]
63    Native,
64    #[serde(rename = "02")]
65    Html,
66    #[serde(rename = "03")]
67    Both,
68}
69
70#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
71pub enum UiType {
72    #[serde(rename = "01")]
73    Text,
74    #[serde(rename = "02")]
75    SingleSelect,
76    #[serde(rename = "03")]
77    MultiSelect,
78    #[serde(rename = "04")]
79    Oob,
80    #[serde(rename = "05")]
81    HtmlOther,
82}