gato_core/kernel/
request.rs1use std::collections::HashMap;
2use serde_json::Value;
3
4pub struct RequestBuilder {
5 request: Request
6}
7
8impl RequestBuilder {
9
10 pub fn new() -> Self {
11 return RequestBuilder {
12 request: Request::new()
13 };
14 }
15
16 pub fn add_method(&mut self, method: String) {
17 self.request.method = method;
18 }
19
20 pub fn add_uri(&mut self, uri: String) {
21 self.request.uri = uri;
22 }
23
24 pub fn add_param(&mut self, name: String, value: String) {
25 self.request.params.insert(name, value);
26 }
27
28 pub fn add_params(&mut self, params: HashMap<String, String>) {
29 self.request.params = params;
30 }
31
32 pub fn add_querystring(&mut self, querystring: HashMap<String, String>) {
33 self.request.querystring = querystring;
34 }
35
36 pub fn add_header(&mut self, name: String, value: String) {
37 self.request.headers.insert(name, value);
38 }
39
40 pub fn add_headers(&mut self, headers: HashMap<String, String>) {
41 self.request.headers = headers;
42 }
43
44 pub fn add_body(&mut self, body: String) {
45 self.request.body = body;
46 }
47
48 pub fn get_request(&self) -> Request {
49 return self.request.clone();
50 }
51
52}
53
54pub struct Request {
55 method: String,
56 uri: String,
57 headers: HashMap<String, String>,
58 params: HashMap<String, String>,
59 querystring: HashMap<String, String>,
60 body: String
61}
62
63impl Request {
64
65 fn new() -> Self {
66 return Request {
67 method: String::new(),
68 uri: String::new(),
69 body: String::new(),
70 headers: HashMap::new(),
71 querystring: HashMap::new(),
72 params: HashMap::new()
73 };
74 }
75
76 fn clone(&self) -> Self {
77 return Request {
78 method: self.method.clone(),
79 uri: self.uri.clone(),
80 body: self.body.clone(),
81 headers: self.headers.clone(),
82 querystring: self.querystring.clone(),
83 params: self.params.clone()
84 };
85 }
86
87 pub fn get_uri(&self) -> String {
88 return self.uri.clone();
89 }
90
91 pub fn get_method(&self) -> String {
92 return self.method.clone();
93 }
94
95 pub fn get(&self, field: &str) -> Value {
97 let mut json = self.json();
98 let fields = field.split(".");
99 for field in fields {
100 json = json[field].clone();
101 }
102 return json;
103 }
104
105 pub fn json(&self) -> Value {
106 return if self.body != "" {
107 serde_json::from_str(self.body.as_str()).unwrap()
108 } else {
109 Value::Null
110 };
111 }
112
113 pub fn get_query(&self, name: &str) -> Option<String> {
114 if self.querystring.contains_key(name) {
115 return Some(self.querystring.get(&name.to_string()).unwrap().clone());
116 }
117 return None;
118 }
119
120 pub fn get_querystring(&self) -> HashMap<String, String> {
121 return self.querystring.clone();
122 }
123
124 pub fn get_param(&self, name: &str) -> Option<String> {
125 if self.params.contains_key(name) {
126 return Some(self.params.get(&name.to_string()).unwrap().clone());
127 }
128 return None;
129 }
130
131 pub fn get_params(&self) -> HashMap<String, String> {
132 return self.params.clone();
133 }
134
135 pub fn get_headers(&self) -> HashMap<String, String> {
136 return self.headers.clone();
137 }
138
139 pub fn get_header(&self, header: String) -> String {
140 return self.headers[&header].clone();
141 }
142
143}
144
145#[macro_export]
146macro_rules! get_param {
147 ($mand_2:expr, $opt:expr) => {
148 ($mand_2.get_param($opt).unwrap_or("".to_owned()))
149 };
150 ($mand_2:expr, $($opt:expr),*) => {
151 ($(
152 $mand_2.get_param($opt).unwrap_or("".to_owned()),
153 )*)
154 };
155}
156
157#[macro_export]
158macro_rules! get_query {
159 ($mand_2:expr, $opt:expr) => {
160 ($mand_2.get_query($opt).unwrap_or("".to_owned()))
161 };
162 ($mand_2:expr, $($opt:expr),*) => {
163 ($(
164 $mand_2.get_query($opt).unwrap_or("".to_owned()),
165 )*)
166 };
167}
168
169#[macro_export]
170macro_rules! get_body {
171 ($mand_2:expr, $opt:expr) => {
172 ($mand_2.get($opt).as_str().unwrap_or("").to_string())
173 };
174 ($mand_2:expr, $($opt:expr),*) => {
175 ($(
176 $mand_2.get($opt).as_str().unwrap_or("").to_string(),
177 )*)
178 };
179}