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}