#[allow(unused_macros)]
macro_rules! define_inner_service_accessors {
() => {
pub fn get_ref(&self) -> &S {
&self.inner
}
pub fn get_mut(&mut self) -> &mut S {
&mut self.inner
}
pub fn into_inner(self) -> S {
self.inner
}
};
}
#[allow(unused_macros)]
macro_rules! opaque_body {
($(#[$m:meta])* pub type $name:ident = $actual:ty;) => {
opaque_body! {
$(#[$m])* pub type $name<> = $actual;
}
};
($(#[$m:meta])* pub type $name:ident<$($param:ident),*> = $actual:ty;) => {
pin_project_lite::pin_project! {
$(#[$m])*
pub struct $name<$($param),*> {
#[pin]
pub(crate) inner: $actual
}
}
impl<$($param),*> $name<$($param),*> {
pub(crate) fn new(inner: $actual) -> Self {
Self { inner }
}
}
impl<$($param),*> http_body::Body for $name<$($param),*> {
type Data = <$actual as http_body::Body>::Data;
type Error = <$actual as http_body::Body>::Error;
#[inline]
fn poll_data(
self: std::pin::Pin<&mut Self>,
cx: &mut std::task::Context<'_>,
) -> std::task::Poll<Option<Result<Self::Data, Self::Error>>> {
self.project().inner.poll_data(cx)
}
#[inline]
fn poll_trailers(
self: std::pin::Pin<&mut Self>,
cx: &mut std::task::Context<'_>,
) -> std::task::Poll<Result<Option<http::HeaderMap>, Self::Error>> {
self.project().inner.poll_trailers(cx)
}
#[inline]
fn is_end_stream(&self) -> bool {
http_body::Body::is_end_stream(&self.inner)
}
#[inline]
fn size_hint(&self) -> http_body::SizeHint {
http_body::Body::size_hint(&self.inner)
}
}
};
}