systemprompt_api/services/middleware/context/extractors/
traits.rs1use async_trait::async_trait;
2use axum::body::Body;
3use axum::extract::Request;
4use axum::http::HeaderMap;
5use systemprompt_models::execution::{ContextExtractionError, RequestContext};
6
7#[async_trait]
8pub trait ContextExtractor: Send + Sync {
9 async fn extract_from_headers(
10 &self,
11 headers: &HeaderMap,
12 ) -> Result<RequestContext, ContextExtractionError>;
13
14 async fn extract_from_request(
15 &self,
16 request: Request<Body>,
17 ) -> Result<(RequestContext, Request<Body>), ContextExtractionError> {
18 let headers = request.headers().clone();
19 let context = self.extract_from_headers(&headers).await?;
20 Ok((context, request))
21 }
22
23 async fn extract_user_only(
24 &self,
25 headers: &HeaderMap,
26 ) -> Result<RequestContext, ContextExtractionError> {
27 self.extract_from_headers(headers).await
28 }
29}