Skip to main content

relay_core_script/
engine_trait.rs

1use async_trait::async_trait;
2use relay_core_api::flow::{Flow, WebSocketMessage};
3use relay_core_lib::interceptor::{
4    BoxError, HttpBody, RequestAction, ResponseAction, WebSocketMessageAction,
5};
6
7#[async_trait]
8pub trait ScriptEngineTrait: Send + Sync {
9    async fn load_script(&mut self, script: &str) -> Result<(), BoxError>;
10
11    async fn on_request_headers(&self, _flow: &mut Flow) -> Result<Option<Flow>, BoxError> {
12        Ok(None)
13    }
14
15    async fn on_request(&self, flow: &mut Flow, body: HttpBody) -> Result<RequestAction, BoxError>;
16
17    async fn on_response_headers(&self, _flow: &mut Flow) -> Result<Option<Flow>, BoxError> {
18        Ok(None)
19    }
20
21    async fn on_response(
22        &self,
23        flow: &mut Flow,
24        body: HttpBody,
25    ) -> Result<ResponseAction, BoxError>;
26
27    async fn on_websocket_message(
28        &self,
29        _flow: &mut Flow,
30        _message: &mut WebSocketMessage,
31    ) -> Result<WebSocketMessageAction, BoxError> {
32        Ok(WebSocketMessageAction::Continue(_message.clone()))
33    }
34}