zen_engine/nodes/function/
http_handler.rs1use ahash::HashMap;
2use serde::{Deserialize, Serialize};
3use serde_json::Value;
4use std::fmt::Debug;
5use std::future::Future;
6use std::pin::Pin;
7use std::sync::Arc;
8
9pub trait HttpHandler: Debug + Send + Sync {
10 fn handle(
11 &self,
12 request: HttpHandlerRequest,
13 ) -> Pin<Box<dyn Future<Output = Result<HttpHandlerResponse, String>> + Send + '_>>;
14}
15
16#[derive(Debug, Clone, Serialize, Deserialize)]
17#[serde(rename_all = "camelCase")]
18pub struct HttpHandlerRequest {
19 pub method: String,
20 pub url: String,
21 #[serde(default)]
22 pub body: Option<Value>,
23 #[serde(default)]
24 pub headers: HashMap<String, String>,
25 #[serde(default)]
26 pub params: HashMap<String, String>,
27 #[serde(default)]
28 pub auth: Option<Value>,
29}
30
31#[derive(Debug, Clone, Serialize, Deserialize)]
32#[serde(rename_all = "camelCase")]
33pub struct HttpHandlerResponse {
34 pub status: u16,
35 pub headers: Value,
36 pub data: Value,
37}
38
39pub type DynamicHttpHandler = Option<Arc<dyn HttpHandler + Send + Sync>>;