use crate::gateway::plugin::ConfiguredPlugin;
use serde::{Deserialize, Serialize};
use std::collections::BTreeMap;
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct Route {
pub name: String,
pub host: String,
pub path: String,
pub match_paths: Vec<String>,
pub service: String,
pub methods: Vec<String>,
#[serde(alias = "header_condition", alias = "header-condition")]
pub header: BTreeMap<String, String>,
#[serde(alias = "query_condition", alias = "query-condition")]
pub query: BTreeMap<String, String>,
#[serde(default = "Vec::default", alias = "pre_filters", alias = "pre-filters")]
pub pre_filters: Vec<ConfiguredPlugin>,
#[serde(
default = "Vec::default",
alias = "post_filters",
alias = "post-filters"
)]
pub post_filters: Vec<ConfiguredPlugin>,
#[serde(default = "bool::default", alias = "is_auth", alias = "is-auth")]
pub is_auth: bool,
pub auth_white_list: Vec<String>,
}
impl Route {
pub fn get_service(&self) -> &String {
&self.service
}
pub fn to_match_keys(&self) -> Vec<String> {
self.match_paths
.iter()
.map(|p| {
if self.host == "*" {
format!("{{host}}{}", p)
} else {
format!("{}{}", self.host, p)
}
})
.collect()
}
}