add custom reponse builder

pull/158/head
austaras 4 years ago
parent a7daafdfc8
commit 9095d8349d
  1. 22
      src/handshake/server.rs

@ -7,6 +7,7 @@ use std::{
}; };
use http::{HeaderMap, Request as HttpRequest, Response as HttpResponse, StatusCode}; use http::{HeaderMap, Request as HttpRequest, Response as HttpResponse, StatusCode};
use http::response::Builder;
use httparse::Status; use httparse::Status;
use log::*; use log::*;
@ -30,8 +31,7 @@ pub type Response = HttpResponse<()>;
/// Server error response type. /// Server error response type.
pub type ErrorResponse = HttpResponse<Option<String>>; pub type ErrorResponse = HttpResponse<Option<String>>;
/// Create a response for the request. fn create_parts<T>(request: &HttpRequest<T>) -> Result<Builder> {
pub fn create_response(request: &Request) -> Result<Response> {
if request.method() != http::Method::GET { if request.method() != http::Method::GET {
return Err(Error::Protocol("Method is not GET".into())); return Err(Error::Protocol("Method is not GET".into()));
} }
@ -75,8 +75,24 @@ pub fn create_response(request: &Request) -> Result<Response> {
.header("Connection", "Upgrade") .header("Connection", "Upgrade")
.header("Upgrade", "websocket") .header("Upgrade", "websocket")
.header("Sec-WebSocket-Accept", convert_key(key.as_bytes())?); .header("Sec-WebSocket-Accept", convert_key(key.as_bytes())?);
Ok(builder)
}
Ok(builder.body(())?) /// Create a response for the request.
pub fn create_response(request: &Request) -> Result<Response> {
match create_parts(&request) {
Ok(builder) => Ok(builder.body(())?),
Err(e) => Err(e)
}
}
/// Create a response for the request, with a custom body builder
pub fn create_response_t<T>(request: &HttpRequest<T>, empty: impl FnOnce() -> T) -> Result<HttpResponse<T>> {
match create_parts(&request) {
Ok(builder) => Ok(builder.body(empty())?),
Err(e) => Err(e)
}
} }
// Assumes that this is a valid response // Assumes that this is a valid response

Loading…
Cancel
Save