use std::future::Future;
pub trait HeadersHandler {
fn headers(&self) -> Vec<(String, String)>;
fn header(&self, name: &str) -> Option<String>;
fn add_header(&self, name: &str, value: &str);
fn set_header(&self, name: &str, value: &str);
fn set_headers(&self, headers: Vec<(&str, &str)>);
fn remove_header(&self, name: &str);
}
#[derive(Clone, PartialEq, Eq, Debug, thiserror::Error)]
pub enum BodyError {
#[error("Body not sent")]
BodyNotSent,
#[error("Exceeded body size: {0}")]
ExceededBodySize(usize),
}
pub trait BodyHandler {
fn body(&self) -> Vec<u8>;
fn set_body(&self, body: &[u8]) -> Result<(), BodyError>;
}
pub trait IntoBodyState {
type BodyState: BodyState;
type BodyStateFuture: Future<Output = Self::BodyState>;
#[must_use]
fn into_body_state(self) -> Self::BodyStateFuture;
}
pub trait EntityState: IntoBodyState {
type HeadersState: HeadersState;
type HeadersStateFuture: Future<Output = Self::HeadersState>;
#[must_use]
fn into_headers_state(self) -> Self::HeadersStateFuture;
}
pub trait HeadersState: IntoBodyState {
fn handler(&self) -> &dyn HeadersHandler;
fn contains_body(&self) -> bool;
}
pub trait BodyState {
fn handler(&self) -> &dyn BodyHandler;
fn contains_body(&self) -> bool;
}