mod headers;
#[cfg(feature = "http1")]
pub(crate) mod h1;
#[cfg(feature = "http2")]
pub(crate) mod h2;
#[cfg(feature = "http1")]
pub(crate) use self::h1::{Conn, dispatch};
use crate::client::core::upgrade;
#[derive(Debug, Default)]
pub(crate) struct MessageHead<S> {
pub(crate) version: http::Version,
pub(crate) subject: S,
pub(crate) headers: http::HeaderMap,
extensions: http::Extensions,
}
pub(crate) type RequestHead = MessageHead<RequestLine>;
#[derive(Debug, Default, PartialEq)]
pub(crate) struct RequestLine(pub(crate) http::Method, pub(crate) http::Uri);
pub(crate) type ResponseHead = MessageHead<http::StatusCode>;
#[derive(Debug)]
pub(crate) enum BodyLength {
Known(u64),
Unknown,
}
pub(crate) enum Dispatched {
Shutdown,
Upgrade(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
}
}