cardinal-proxy 0.2.41

Pingora-based HTTP proxy implementation for the Cardinal gateway
Documentation
use crate::pingora::{BError, Error};
use crate::req::ReqCtx;
use crate::HealthCheckStatus;
use bytes::Bytes;
use cardinal_base::context::CardinalContext;
use cardinal_plugins::request_context::RequestContext;
use pingora::proxy::Session;
use std::sync::Arc;
use std::time::Duration;

#[async_trait::async_trait]
pub trait CardinalContextProvider: Send + Sync {
    fn ctx(&self) -> ReqCtx {
        ReqCtx::default()
    }

    fn resolve(&self, session: &Session, ctx: &mut ReqCtx) -> Option<Arc<CardinalContext>>;
    fn health_check(&self, _session: &Session) -> HealthCheckStatus {
        HealthCheckStatus::None
    }

    fn logging(&self, _session: &mut Session, _e: Option<&Error>, _ctx: &mut ReqCtx) {}

    async fn request_body_filter(
        &self,
        _session: &mut Session,
        _body: &mut Option<Bytes>,
        _end_of_stream: bool,
        _ctx: &mut ReqCtx,
    ) -> crate::pingora::Result<()> {
        Ok(())
    }

    fn response_body_filter(
        &self,
        _session: &mut Session,
        _body: &mut Option<Bytes>,
        _end_of_stream: bool,
        _ctx: &mut ReqCtx,
    ) -> crate::pingora::Result<Option<Duration>> {
        Ok(None)
    }

    async fn early_request_filter(
        &self,
        _session: &mut Session,
        _ctx: &mut ReqCtx,
    ) -> Result<(), BError>
    where
        Self: Send + Sync,
    {
        Ok(())
    }

    async fn request_context_initialized(
        &self,
        _session: &mut Session,
        _req_ctx: &mut RequestContext,
    ) {
    }
}