summaryrefslogtreecommitdiff
path: root/src/http/response.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/http/response.rs')
-rw-r--r--src/http/response.rs42
1 files changed, 42 insertions, 0 deletions
diff --git a/src/http/response.rs b/src/http/response.rs
new file mode 100644
index 0000000..850f41e
--- /dev/null
+++ b/src/http/response.rs
@@ -0,0 +1,42 @@
+use super::{code::Code, header::{HeaderMap, Header}};
+
+#[derive(Debug, Clone)]
+pub struct Response {
+ pub status: Code,
+ pub headers: HeaderMap,
+ pub body: Option<String>
+}
+
+impl Response {
+
+ pub fn new() -> Self {
+
+ let mut headers = HeaderMap::new();
+ headers.put(Header::new("Connection", "close"));
+
+ let date = chrono::offset::Utc::now();
+ headers.put(Header::new("Date", &date.to_rfc2822()));
+
+ headers.put(Header::new("Server", "bashttp"));
+
+ return Self {
+ status: Code::Success,
+ headers,
+ body: None
+ }
+ }
+
+ pub fn deserialize(&self) -> String {
+ let mut string = String::new();
+
+ string += &format!("HTTP/1.1 {}\n", self.status.clone() as u16);
+ string += &self.headers.deserialize();
+
+ if let Some(body) = &self.body {
+ string += "\n";
+ string += body;
+ }
+
+ string
+ }
+}