ordinary_config/http/
mod.rs1mod cache;
6mod cors;
7mod csp;
8
9use crate::{MiddlewareConfig, ProxyConfig, Redirects};
10pub use cache::*;
11pub use cors::*;
12pub use csp::*;
13use serde::{Deserialize, Serialize};
14use std::fmt::Formatter;
15
16#[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))]
17#[cfg_attr(feature = "docs", derive(schemars::JsonSchema))]
18#[derive(Deserialize, Serialize, Debug, Clone, Default)]
19pub struct HttpConfig {
20 #[serde(skip_serializing_if = "Option::is_none")]
22 #[serde(default)]
23 pub routes: Option<Vec<HttpRoute>>,
24
25 #[serde(skip_serializing_if = "Option::is_none")]
27 #[serde(default)]
28 pub redirects: Option<Redirects>,
29
30 #[serde(skip_serializing_if = "Option::is_none")]
32 #[serde(default)]
33 pub proxies: Option<Vec<ProxyConfig>>,
34
35 #[serde(skip_serializing_if = "Option::is_none")]
38 #[serde(default)]
39 pub middlewares: Option<Vec<MiddlewareConfig>>,
40
41 #[serde(skip_serializing_if = "Option::is_none")]
43 #[serde(default)]
44 pub default_route_config: Option<HttpRouteConfig>,
45}
46
47#[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))]
48#[cfg_attr(feature = "docs", derive(schemars::JsonSchema))]
49#[derive(Deserialize, Serialize, Debug, Clone)]
50pub struct HttpRoute {
51 pub function: String,
53 pub path: String,
55 pub method: HttpMethod,
57 #[serde(skip_serializing_if = "Option::is_none")]
58 #[serde(default)]
59 pub config: Option<HttpRouteConfig>,
60 #[serde(skip_serializing_if = "Option::is_none")]
61 #[serde(default)]
62 pub middlewares: Option<Vec<String>>,
63}
64
65#[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))]
66#[cfg_attr(feature = "docs", derive(schemars::JsonSchema))]
67#[derive(Deserialize, Serialize, Debug, Clone, Default)]
68pub struct HttpRouteConfig {
69 #[serde(skip_serializing_if = "Option::is_none")]
79 #[serde(default)]
80 pub csp: Option<HttpCsp>,
81 #[serde(skip_serializing_if = "Option::is_none")]
82 #[serde(default)]
83 pub cors: Option<HttpCors>,
84 #[serde(skip_serializing_if = "Option::is_none")]
85 #[serde(default)]
86 pub cache: Option<HttpCache>,
87 #[serde(skip_serializing_if = "Option::is_none")]
91 #[serde(default)]
92 pub timeout: Option<u16>,
93}
94
95#[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))]
96#[cfg_attr(feature = "docs", derive(schemars::JsonSchema))]
97#[derive(Deserialize, Serialize, Debug, Clone)]
98pub enum HttpMethod {
99 PUT,
100 POST,
101 PATCH,
102 QUERY,
103 GET,
104 DELETE,
105 Other(String),
106}
107
108impl std::fmt::Display for HttpMethod {
109 fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
110 match self {
111 Self::GET => write!(f, "GET"),
112
113 _ => Ok(()),
114 }
115 }
116}