zen_engine/nodes/function/
http_handler.rs

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