1use super::geo::Geo;
10use serde_utils;
11
12#[derive(Serialize, Deserialize, Debug, Clone, PartialEq)]
13pub struct Device {
14 #[serde(skip_serializing_if = "Option::is_none")]
15 pub ua: Option<String>,
16 #[serde(skip_serializing_if = "Option::is_none")]
17 pub geo: Option<Geo>,
18 #[serde(skip_serializing_if = "Option::is_none")]
19 pub dnt: Option<bool>,
20 #[serde(skip_serializing_if = "Option::is_none")]
21 pub lmt: Option<bool>,
22 #[serde(skip_serializing_if = "Option::is_none")]
23 pub ip: Option<String>,
24 #[serde(skip_serializing_if = "Option::is_none")]
25 pub ipv6: Option<String>,
26 #[serde(rename = "devicetype", skip_serializing_if = "Option::is_none")]
27 pub device_type: Option<u32>,
28 #[serde(skip_serializing_if = "Option::is_none")]
29 pub make: Option<String>,
30 #[serde(skip_serializing_if = "Option::is_none")]
31 pub model: Option<String>,
32 #[serde(skip_serializing_if = "Option::is_none")]
33 pub os: Option<String>,
34 #[serde(skip_serializing_if = "Option::is_none")]
35 pub osv: Option<String>,
36 #[serde(skip_serializing_if = "Option::is_none")]
37 pub hwv: Option<String>,
38 #[serde(skip_serializing_if = "Option::is_none")]
39 pub h: Option<u64>,
40 #[serde(skip_serializing_if = "Option::is_none")]
41 pub w: Option<u64>,
42 #[serde(skip_serializing_if = "Option::is_none")]
43 pub ppi: Option<u64>,
44 #[serde(skip_serializing_if = "Option::is_none")]
45 pub pxratio: Option<f64>,
46 #[serde(
47 default,
48 skip_serializing_if = "Option::is_none",
49 serialize_with = "serde_utils::mbool_to_u8",
50 deserialize_with = "serde_utils::u8_to_mbool"
51 )]
52 pub js: Option<bool>,
53 #[serde(
54 default,
55 skip_serializing_if = "Option::is_none",
56 serialize_with = "serde_utils::mbool_to_u8",
57 deserialize_with = "serde_utils::u8_to_mbool"
58 )]
59 pub geofetch: Option<bool>,
60 #[serde(skip_serializing_if = "Option::is_none")]
61 pub flashver: Option<String>,
62 #[serde(skip_serializing_if = "Option::is_none")]
63 pub language: Option<String>,
64 #[serde(skip_serializing_if = "Option::is_none")]
65 pub carrier: Option<String>,
66 #[serde(skip_serializing_if = "Option::is_none")]
67 pub mccmnc: Option<String>,
68 #[serde(rename = "connectiontype", skip_serializing_if = "Option::is_none")]
69 pub connection_type: Option<u32>,
70 #[serde(skip_serializing_if = "Option::is_none")]
71 pub ifa: Option<String>,
72 #[serde(skip_serializing_if = "Option::is_none")]
73 pub didsha1: Option<String>,
74 #[serde(skip_serializing_if = "Option::is_none")]
75 pub didmd5: Option<String>,
76 #[serde(skip_serializing_if = "Option::is_none")]
77 pub dpidsha1: Option<String>,
78 #[serde(skip_serializing_if = "Option::is_none")]
79 pub dpidmd5: Option<String>,
80 #[serde(skip_serializing_if = "Option::is_none")]
81 pub macsha1: Option<String>,
82 #[serde(skip_serializing_if = "Option::is_none")]
83 pub macmd5: Option<String>,
84 #[serde(skip_serializing_if = "Option::is_none")]
85 pub ext: Option<serde_utils::Ext>,
86}