spacegate_model/
route_match.rs1use serde::{Deserialize, Serialize};
2#[derive(Debug, Serialize, Deserialize, Clone)]
4#[serde(tag = "kind", rename_all = "PascalCase")]
5#[cfg_attr(feature = "typegen", derive(ts_rs::TS), ts(export))]
6pub enum SgHttpPathMatch {
7 Exact {
9 value: String,
10 #[serde(skip_serializing_if = "Option::is_none")]
11 replace: Option<String>,
12 },
13 Prefix {
16 value: String,
17 #[serde(skip_serializing_if = "Option::is_none")]
18 replace: Option<String>,
19 },
20 RegExp {
22 value: String,
23 #[serde(skip_serializing_if = "Option::is_none")]
24 replace: Option<String>,
25 },
26}
27
28#[derive(Debug, Serialize, Deserialize, Clone)]
29#[serde(tag = "kind", rename_all = "snake_case")]
30#[cfg_attr(feature = "typegen", derive(ts_rs::TS), ts(export))]
31pub enum SgHttpHeaderMatch {
32 Exact {
34 name: String,
35 value: String,
36 #[serde(skip_serializing_if = "Option::is_none")]
37 replace: Option<String>,
38 },
39 RegExp {
41 name: String,
42 re: String,
43 #[serde(skip_serializing_if = "Option::is_none")]
44 replace: Option<String>,
45 },
46}
47
48#[derive(Debug, Serialize, Deserialize, Clone)]
49#[serde(tag = "kind", content = "value", rename_all = "snake_case")]
50#[cfg_attr(feature = "typegen", derive(ts_rs::TS), ts(export))]
51pub enum SgHttpQueryMatch {
52 Exact { key: String, value: String },
54 Regular { key: String, re: String },
56}
57
58#[derive(Default, Debug, Clone, Serialize, Deserialize)]
59#[cfg_attr(feature = "typegen", derive(ts_rs::TS), ts(export))]
60#[serde(transparent)]
61
62pub struct SgHttpMethodMatch(pub String);
63
64#[derive(Default, Debug, Clone, Serialize, Deserialize)]
67#[cfg_attr(feature = "typegen", derive(ts_rs::TS), ts(export))]
68#[serde(default)]
69pub struct SgHttpRouteMatch {
70 #[serde(skip_serializing_if = "Option::is_none")]
71 pub path: Option<SgHttpPathMatch>,
74 #[serde(skip_serializing_if = "Option::is_none")]
75 pub header: Option<Vec<SgHttpHeaderMatch>>,
78 #[serde(skip_serializing_if = "Option::is_none")]
79 pub query: Option<Vec<SgHttpQueryMatch>>,
82 #[serde(skip_serializing_if = "Option::is_none")]
83 pub method: Option<Vec<SgHttpMethodMatch>>,
86}