Skip to main content

har/
raw.rs

1use serde::Deserialize;
2
3#[derive(Debug, Deserialize)]
4pub struct RawDoc {
5    pub log: RawLog,
6}
7
8#[derive(Debug, Deserialize)]
9pub struct RawLog {
10    #[serde(default)]
11    pub version: String,
12    #[serde(default)]
13    pub creator: RawCreator,
14    #[serde(default)]
15    pub browser: Option<RawCreator>,
16    #[serde(default)]
17    pub entries: Vec<RawEntry>,
18}
19
20#[derive(Debug, Default, Deserialize)]
21pub struct RawCreator {
22    #[serde(default)]
23    pub name: String,
24    #[serde(default)]
25    pub version: String,
26}
27
28#[derive(Debug, Deserialize)]
29pub struct RawEntry {
30    #[serde(rename = "startedDateTime", default)]
31    pub started_date_time: String,
32    #[serde(default)]
33    pub time: f64,
34    pub request: RawRequest,
35    pub response: RawResponse,
36    #[serde(default)]
37    pub timings: RawTimings,
38    #[serde(rename = "serverIPAddress", default)]
39    pub server_ip_address: Option<String>,
40}
41
42#[derive(Debug, Deserialize)]
43pub struct RawRequest {
44    #[serde(default)]
45    pub method: String,
46    #[serde(default)]
47    pub url: String,
48    #[serde(rename = "httpVersion", default)]
49    pub http_version: String,
50    #[serde(default)]
51    pub headers: Vec<RawNameValue>,
52    #[serde(rename = "queryString", default)]
53    pub query_string: Vec<RawNameValue>,
54    #[serde(rename = "postData", default)]
55    pub post_data: Option<RawPostData>,
56    #[serde(rename = "bodySize", default)]
57    pub body_size: i64,
58}
59
60#[derive(Debug, Deserialize)]
61pub struct RawResponse {
62    #[serde(default)]
63    pub status: i64,
64    #[serde(rename = "statusText", default)]
65    pub status_text: String,
66    #[serde(rename = "httpVersion", default)]
67    pub http_version: String,
68    #[serde(default)]
69    pub headers: Vec<RawNameValue>,
70    #[serde(default)]
71    pub content: RawContent,
72    #[serde(rename = "redirectURL", default)]
73    pub redirect_url: Option<String>,
74    #[serde(rename = "headersSize", default)]
75    pub headers_size: i64,
76    #[serde(rename = "bodySize", default)]
77    pub body_size: i64,
78}
79
80impl RawResponse {
81    pub fn http_version_or_request(&self, req_version: &str) -> String {
82        if self.http_version.is_empty() {
83            req_version.to_string()
84        } else {
85            self.http_version.clone()
86        }
87    }
88}
89
90#[derive(Debug, Default, Deserialize)]
91pub struct RawContent {
92    #[serde(default)]
93    pub size: i64,
94    #[serde(rename = "mimeType", default)]
95    pub mime_type: Option<String>,
96    #[serde(default)]
97    pub text: Option<String>,
98}
99
100#[derive(Debug, Default, Deserialize)]
101pub struct RawPostData {
102    #[serde(rename = "mimeType", default)]
103    pub mime_type: String,
104    #[serde(default)]
105    pub text: Option<String>,
106}
107
108#[derive(Debug, Default, Deserialize)]
109pub struct RawTimings {
110    #[serde(default)]
111    pub blocked: Option<f64>,
112    #[serde(default)]
113    pub dns: Option<f64>,
114    #[serde(default)]
115    pub connect: Option<f64>,
116    #[serde(default)]
117    pub send: f64,
118    #[serde(default)]
119    pub wait: f64,
120    #[serde(default)]
121    pub receive: f64,
122    #[serde(default)]
123    pub ssl: Option<f64>,
124}
125
126#[derive(Debug, Deserialize)]
127pub struct RawNameValue {
128    #[serde(default)]
129    pub name: String,
130    #[serde(default)]
131    pub value: String,
132}