mod headers;
pub mod http1;
pub mod http2;
#[derive(Debug, Default, PartialEq)]
pub(crate) struct RequestLine(http::Method, http::Uri);
#[derive(Debug, Default)]
pub(crate) struct MessageHead<S> {
version: http::Version,
subject: S,
headers: http::HeaderMap,
extensions: http::Extensions,
}
type RequestHead = MessageHead<RequestLine>;
type ResponseHead = MessageHead<http::StatusCode>;
#[derive(Debug)]
pub(crate) enum BodyLength {
Known(u64),
Unknown,
}
pub(crate) enum Dispatched {
Shutdown,
Upgrade(crate::upgrade::Pending),
}
impl MessageHead<http::StatusCode> {
fn into_response<B>(self, body: B) -> http::Response<B> {
let mut res = http::Response::new(body);
*res.status_mut() = self.subject;
*res.headers_mut() = self.headers;
*res.version_mut() = self.version;
*res.extensions_mut() = self.extensions;
res
}
}