use foundation_netio::shared::http::SimpleHeaders;
use crate::shared::context::{Peer, Spec};
pub struct Request<T> {
pub msg: T,
spec: Spec,
peer: Peer,
headers: SimpleHeaders,
}
impl<T> Request<T> {
#[must_use]
pub fn new(msg: T) -> Self {
Self {
msg,
spec: Spec::empty(false),
peer: Peer::empty(),
headers: SimpleHeaders::new(),
}
}
#[must_use]
pub fn with_parts(msg: T, spec: Spec, peer: Peer, headers: SimpleHeaders) -> Self {
Self {
msg,
spec,
peer,
headers,
}
}
#[must_use]
pub fn spec(&self) -> &Spec {
&self.spec
}
#[must_use]
pub fn peer(&self) -> &Peer {
&self.peer
}
#[must_use]
pub fn headers(&self) -> &SimpleHeaders {
&self.headers
}
pub fn headers_mut(&mut self) -> &mut SimpleHeaders {
&mut self.headers
}
#[must_use]
pub fn into_message(self) -> T {
self.msg
}
}
impl<T: core::fmt::Debug> core::fmt::Debug for Request<T> {
fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
f.debug_struct("Request")
.field("msg", &self.msg)
.field("spec", &self.spec)
.field("peer", &self.peer)
.finish_non_exhaustive()
}
}
pub struct Response<T> {
pub msg: T,
headers: SimpleHeaders,
trailers: SimpleHeaders,
}
impl<T> Response<T> {
#[must_use]
pub fn new(msg: T) -> Self {
Self {
msg,
headers: SimpleHeaders::new(),
trailers: SimpleHeaders::new(),
}
}
#[must_use]
pub fn headers(&self) -> &SimpleHeaders {
&self.headers
}
pub fn headers_mut(&mut self) -> &mut SimpleHeaders {
&mut self.headers
}
#[must_use]
pub fn trailers(&self) -> &SimpleHeaders {
&self.trailers
}
pub fn trailers_mut(&mut self) -> &mut SimpleHeaders {
&mut self.trailers
}
#[must_use]
pub fn into_parts(self) -> (T, SimpleHeaders, SimpleHeaders) {
(self.msg, self.headers, self.trailers)
}
}
impl<T: core::fmt::Debug> core::fmt::Debug for Response<T> {
fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
f.debug_struct("Response")
.field("msg", &self.msg)
.field("headers", &self.headers.len())
.field("trailers", &self.trailers.len())
.finish()
}
}