httpresponse: add constructor for HttpResponseBuilder

This adds a constructor for `HttpResponseBuilder`, parametrized on
status code. It allows to directly build a response builder in a
conditional way. The usecase is for consumers where the response status
code is not statically known but received as an external parameter
instead.
This commit is contained in:
Luca Bruno 2019-02-13 10:36:26 +00:00
parent cc7f6b5eef
commit ac02f1a4e3
No known key found for this signature in database
GPG Key ID: A9834A2252078E4E
1 changed files with 16 additions and 2 deletions

View File

@ -48,10 +48,10 @@ impl HttpResponse {
self.0.as_mut() self.0.as_mut()
} }
/// Create http response builder with specific status. /// Create a new HTTP response builder with specific status.
#[inline] #[inline]
pub fn build(status: StatusCode) -> HttpResponseBuilder { pub fn build(status: StatusCode) -> HttpResponseBuilder {
HttpResponsePool::get(status) HttpResponseBuilder::new(status)
} }
/// Create http response builder /// Create http response builder
@ -346,6 +346,12 @@ pub struct HttpResponseBuilder {
} }
impl HttpResponseBuilder { impl HttpResponseBuilder {
/// Create a new HTTP response builder with specific status.
#[inline]
pub fn new(status: StatusCode) -> HttpResponseBuilder {
HttpResponsePool::get(status)
}
/// Set HTTP status code of this response. /// Set HTTP status code of this response.
#[inline] #[inline]
pub fn status(&mut self, status: StatusCode) -> &mut Self { pub fn status(&mut self, status: StatusCode) -> &mut Self {
@ -1177,6 +1183,14 @@ mod tests {
assert_eq!((v.name(), v.value()), ("cookie3", "val300")); assert_eq!((v.name(), v.value()), ("cookie3", "val300"));
} }
#[test]
fn test_builder_new() {
let resp = HttpResponseBuilder::new(StatusCode::BAD_REQUEST)
.finish();
assert_eq!(resp.status(), StatusCode::BAD_REQUEST);
}
#[test] #[test]
fn test_basic_builder() { fn test_basic_builder() {
let resp = HttpResponse::Ok() let resp = HttpResponse::Ok()