use serde::{Deserialize, Serialize};
#[derive(Debug, Serialize, Deserialize, Clone)]
#[serde(tag = "kind", rename_all = "PascalCase")]
#[cfg_attr(feature = "typegen", derive(ts_rs::TS), ts(export))]
pub enum SgHttpPathMatch {
Exact {
value: String,
#[serde(skip_serializing_if = "Option::is_none")]
replace: Option<String>,
},
Prefix {
value: String,
#[serde(skip_serializing_if = "Option::is_none")]
replace: Option<String>,
},
RegExp {
value: String,
#[serde(skip_serializing_if = "Option::is_none")]
replace: Option<String>,
},
}
#[derive(Debug, Serialize, Deserialize, Clone)]
#[serde(tag = "kind", rename_all = "snake_case")]
#[cfg_attr(feature = "typegen", derive(ts_rs::TS), ts(export))]
pub enum SgHttpHeaderMatch {
Exact {
name: String,
value: String,
#[serde(skip_serializing_if = "Option::is_none")]
replace: Option<String>,
},
RegExp {
name: String,
re: String,
#[serde(skip_serializing_if = "Option::is_none")]
replace: Option<String>,
},
}
#[derive(Debug, Serialize, Deserialize, Clone)]
#[serde(tag = "kind", content = "value", rename_all = "snake_case")]
#[cfg_attr(feature = "typegen", derive(ts_rs::TS), ts(export))]
pub enum SgHttpQueryMatch {
Exact { key: String, value: String },
Regular { key: String, re: String },
}
#[derive(Default, Debug, Clone, Serialize, Deserialize)]
#[cfg_attr(feature = "typegen", derive(ts_rs::TS), ts(export))]
#[serde(transparent)]
pub struct SgHttpMethodMatch(pub String);
#[derive(Default, Debug, Clone, Serialize, Deserialize)]
#[cfg_attr(feature = "typegen", derive(ts_rs::TS), ts(export))]
#[serde(default)]
pub struct SgHttpRouteMatch {
#[serde(skip_serializing_if = "Option::is_none")]
pub path: Option<SgHttpPathMatch>,
#[serde(skip_serializing_if = "Option::is_none")]
pub header: Option<Vec<SgHttpHeaderMatch>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub query: Option<Vec<SgHttpQueryMatch>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub method: Option<Vec<SgHttpMethodMatch>>,
}