Skip to main content

systemprompt_api/services/middleware/context/extractors/
traits.rs

1use 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}