use std::ops::ControlFlow;
use super::{http_error::HttpError, response_body::ResponseBody};
use crate::{
prelude::*,
state::{context::HttpRequestContext, request_state::RequestState},
};
pub type Response = hyper::Response<ResponseBody>;
pub trait ResponseBuilderExt {
fn builder() -> http::response::Builder {
hyper::Response::builder()
}
}
impl ResponseBuilderExt for Response {}
pub trait ContextReturnResponseExt {
#[must_use = "Must be returned to be effective"]
fn next(&mut self, response: Response) -> Result<ControlFlow<()>, HttpError>;
#[must_use = "Must be returned to be effective"]
fn next_no_response(&self) -> Result<ControlFlow<()>, HttpError> {
Ok(ControlFlow::Continue(()))
}
#[must_use = "Must be returned to be effective"]
fn stop(&mut self, response: Response) -> Result<ControlFlow<()>, HttpError>;
#[must_use = "Must be returned to be effective"]
fn stop_no_response(&self) -> Result<ControlFlow<()>, HttpError> {
Ok(ControlFlow::Break(()))
}
}
impl ContextReturnResponseExt for HttpRequestContext {
fn next(&mut self, response: Response) -> Result<ControlFlow<()>, HttpError> {
RequestState::get_mut_from_ctx(self).insert(response);
Ok(ControlFlow::Continue(()))
}
fn stop(&mut self, response: Response) -> Result<ControlFlow<()>, HttpError> {
RequestState::get_mut_from_ctx(self).insert(response);
Ok(ControlFlow::Break(()))
}
}