use super::*;
use crate::protocols::http::bridge::grpc_web::GrpcWebCtx;
use std::ops::{Deref, DerefMut};
#[derive(Default)]
pub struct GrpcWebBridge(GrpcWebCtx);
impl Deref for GrpcWebBridge {
type Target = GrpcWebCtx;
fn deref(&self) -> &Self::Target {
&self.0
}
}
impl DerefMut for GrpcWebBridge {
fn deref_mut(&mut self) -> &mut Self::Target {
&mut self.0
}
}
#[async_trait]
impl HttpModule for GrpcWebBridge {
fn as_any(&self) -> &dyn std::any::Any {
self
}
fn as_any_mut(&mut self) -> &mut dyn std::any::Any {
self
}
async fn request_header_filter(&mut self, req: &mut RequestHeader) -> Result<()> {
self.0.request_header_filter(req);
Ok(())
}
async fn response_header_filter(
&mut self,
resp: &mut ResponseHeader,
_end_of_stream: bool,
) -> Result<()> {
self.0.response_header_filter(resp);
Ok(())
}
fn response_trailer_filter(
&mut self,
trailers: &mut Option<Box<HeaderMap>>,
) -> Result<Option<Bytes>> {
if let Some(trailers) = trailers {
return self.0.response_trailer_filter(trailers);
}
Ok(None)
}
}
pub struct GrpcWeb;
impl HttpModuleBuilder for GrpcWeb {
fn init(&self) -> Module {
Box::new(GrpcWebBridge::default())
}
}