cardinal_proxy/
context_provider.rs

1use crate::pingora::{BError, Error};
2use crate::req::ReqCtx;
3use crate::HealthCheckStatus;
4use bytes::Bytes;
5use cardinal_base::context::CardinalContext;
6use cardinal_plugins::request_context::RequestContext;
7use pingora::proxy::Session;
8use std::sync::Arc;
9use std::time::Duration;
10
11#[async_trait::async_trait]
12pub trait CardinalContextProvider: Send + Sync {
13    fn ctx(&self) -> ReqCtx {
14        ReqCtx::default()
15    }
16
17    fn resolve(&self, session: &Session, ctx: &mut ReqCtx) -> Option<Arc<CardinalContext>>;
18    fn health_check(&self, _session: &Session) -> HealthCheckStatus {
19        HealthCheckStatus::None
20    }
21
22    fn logging(&self, _session: &mut Session, _e: Option<&Error>, _ctx: &mut ReqCtx) {}
23
24    async fn request_body_filter(
25        &self,
26        _session: &mut Session,
27        _body: &mut Option<Bytes>,
28        _end_of_stream: bool,
29        _ctx: &mut ReqCtx,
30    ) -> crate::pingora::Result<()> {
31        Ok(())
32    }
33
34    fn response_body_filter(
35        &self,
36        _session: &mut Session,
37        _body: &mut Option<Bytes>,
38        _end_of_stream: bool,
39        _ctx: &mut ReqCtx,
40    ) -> crate::pingora::Result<Option<Duration>> {
41        Ok(None)
42    }
43
44    async fn early_request_filter(
45        &self,
46        _session: &mut Session,
47        _ctx: &mut ReqCtx,
48    ) -> Result<(), BError>
49    where
50        Self: Send + Sync,
51    {
52        Ok(())
53    }
54
55    async fn request_context_initialized(
56        &self,
57        _session: &mut Session,
58        _req_ctx: &mut RequestContext,
59    ) {
60    }
61}