From 1615f0d075c31787011771c25b86984d36d6f19e Mon Sep 17 00:00:00 2001 From: _ <_@_> Date: Fri, 30 Oct 2020 17:01:37 -0500 Subject: [PATCH] :construction: checkpoint --- src/bin/server.rs | 7 +++++++ src/http_serde.rs | 34 +++++++++++++++++++++++++++++++++- 2 files changed, 40 insertions(+), 1 deletion(-) diff --git a/src/bin/server.rs b/src/bin/server.rs index b5f55f9..39c4862 100644 --- a/src/bin/server.rs +++ b/src/bin/server.rs @@ -79,6 +79,13 @@ impl <'a> ResponseHandle <'a> { println! ("Err: {:?}", e); } } + + async fn respond_2 ( + self, + r: http_serde::Response + ) { + self.respond (r.parts, r.body).await + } } async fn serve_dir ( diff --git a/src/http_serde.rs b/src/http_serde.rs index 7a52fd4..9197be7 100644 --- a/src/http_serde.rs +++ b/src/http_serde.rs @@ -5,6 +5,9 @@ use std::{ use serde::{Deserialize, Serialize}; +// Hyper doesn't seem to make it easy to de/ser requests +// and responses and stuff like that, so I do it by hand here. + pub enum Error { Unsupported, InvalidHeaderName, @@ -57,6 +60,12 @@ pub enum StatusCode { PartialContent, } +impl Default for StatusCode { + fn default () -> Self { + Self::Ok + } +} + impl From for hyper::StatusCode { fn from (x: StatusCode) -> Self { match x { @@ -67,7 +76,7 @@ impl From for hyper::StatusCode { } } -#[derive (Deserialize, Serialize)] +#[derive (Default, Deserialize, Serialize)] pub struct ResponseParts { pub status_code: StatusCode, @@ -77,3 +86,26 @@ pub struct ResponseParts { pub headers: HashMap >, } + +#[derive (Default)] +pub struct Response { + pub parts: ResponseParts, + pub body: Option , +} + +impl Response { + pub fn status_code (&mut self, c: StatusCode) -> &mut Self { + self.parts.status_code = c; + self + } + + pub fn header (&mut self, k: String, v: Vec ) -> &mut Self { + self.parts.headers.insert (k, v); + self + } + + pub fn body (&mut self, b: reqwest::Body) -> &mut Self { + self.body = Some (b); + self + } +}