cardinal_proxy/
context_provider.rs

1use crate::pingora::{BError, Error};
2use crate::req::ReqCtx;
3use crate::HealthCheckStatus;
4use cardinal_base::context::CardinalContext;
5use pingora::proxy::Session;
6use std::sync::Arc;
7
8#[async_trait::async_trait]
9pub trait CardinalContextProvider: Send + Sync {
10    fn ctx(&self) -> ReqCtx {
11        ReqCtx::default()
12    }
13
14    fn resolve(&self, session: &Session, ctx: &mut ReqCtx) -> Option<Arc<CardinalContext>>;
15    fn health_check(&self, _session: &Session) -> HealthCheckStatus {
16        HealthCheckStatus::None
17    }
18
19    fn logging(&self, _session: &mut Session, _e: Option<&Error>, _ctx: &mut ReqCtx) {}
20
21    async fn early_request_filter(
22        &self,
23        _session: &mut Session,
24        _ctx: &mut ReqCtx,
25    ) -> Result<(), BError>
26    where
27        Self: Send + Sync,
28    {
29        Ok(())
30    }
31}