cardinal_proxy/
context_provider.rs1use 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}