1use std::collections::HashMap;
4
5use serde::{Deserialize, Serialize};
6use serde_json::Value;
7
8#[derive(Debug, Clone, Serialize, Deserialize)]
11#[serde(rename_all = "UPPERCASE")]
12pub enum HttpMethod {
13 Get,
14 Post,
15 Put,
16 Patch,
17 Delete,
18}
19
20#[derive(Debug, Clone, Serialize, Deserialize)]
26#[serde(tag = "type", rename_all = "lowercase")]
27pub enum HttpAuthConfig {
28 Hmac {
29 secret_key: String,
30 },
31 Bearer {
32 token_key: String,
33 },
34 #[serde(rename = "api_key")]
35 ApiKey {
36 header: String,
37 value_key: String,
38 },
39}
40
41#[derive(Debug, Clone, Serialize, Deserialize)]
43pub struct HttpInvocationConfig {
44 pub url: String,
46 #[serde(default = "default_http_method")]
48 pub method: HttpMethod,
49 #[serde(skip_serializing_if = "Option::is_none")]
51 pub timeout_ms: Option<u64>,
52 #[serde(default)]
54 pub headers: HashMap<String, String>,
55 #[serde(skip_serializing_if = "Option::is_none")]
57 pub auth: Option<HttpAuthConfig>,
58}
59
60fn default_http_method() -> HttpMethod {
61 HttpMethod::Post
62}
63
64#[derive(Debug, Clone, Serialize, Deserialize)]
66pub struct HttpRequest<T = Value> {
67 #[serde(default)]
69 pub query_params: HashMap<String, String>,
70 #[serde(default)]
72 pub path_params: HashMap<String, String>,
73 #[serde(default)]
75 pub headers: HashMap<String, String>,
76 #[serde(default)]
78 pub path: String,
79 #[serde(default)]
81 pub method: String,
82 #[serde(default)]
84 pub body: T,
85}
86
87#[derive(Debug, Clone, Serialize, Deserialize)]
89pub struct HttpResponse<T = Value> {
90 pub status_code: u16,
92 #[serde(default)]
94 pub headers: HashMap<String, String>,
95 pub body: T,
97}