use dashmap::DashMap; use serde::{Deserialize, Serialize}; use std::collections::HashMap; use std::sync::atomic::AtomicUsize; pub type UpstreamsDashMap = DashMap, AtomicUsize)>>; pub type UpstreamsIdMap = DashMap; pub type Headers = DashMap>>; #[derive(Debug, Default, Clone, Serialize, Deserialize)] pub struct ServiceMapping { pub upstream: String, pub hostname: String, pub path: Option, pub to_https: Option, pub rate_limit: Option, pub client_headers: Option>, pub server_headers: Option>, } // pub type Services = DashMap)>>; #[derive(Clone, Debug, Default)] pub struct Extraparams { pub sticky_sessions: bool, pub to_https: Option, pub authentication: DashMap>, pub rate_limit: Option, } #[derive(Clone, Default, Debug, Serialize, Deserialize)] pub struct Kubernetes { pub servers: Option>, pub services: Option>, pub tokenpath: Option, } #[derive(Clone, Default, Debug, Serialize, Deserialize)] pub struct Consul { pub servers: Option>, pub services: Option>, pub token: Option, } #[derive(Debug, Default, Serialize, Deserialize)] pub struct Config { pub provider: String, pub sticky_sessions: bool, pub to_https: Option, #[serde(default)] pub upstreams: Option>, #[serde(default)] pub globals: Option>>, #[serde(default)] pub client_headers: Option>, #[serde(default)] pub server_headers: Option>, #[serde(default)] pub authorization: Option>, #[serde(default)] pub consul: Option, #[serde(default)] pub kubernetes: Option, #[serde(default)] pub rate_limit: Option, } #[derive(Debug, Default, Serialize, Deserialize)] pub struct HostConfig { pub paths: HashMap, pub rate_limit: Option, } #[derive(Debug, Default, Serialize, Deserialize)] pub struct PathConfig { pub servers: Vec, pub to_https: Option, pub client_headers: Option>, pub server_headers: Option>, pub rate_limit: Option, pub healthcheck: Option, } #[derive(Debug, Default)] pub struct Configuration { pub upstreams: UpstreamsDashMap, pub client_headers: Headers, pub server_headers: Headers, pub consul: Option, pub kubernetes: Option, pub typecfg: String, pub extraparams: Extraparams, } #[derive(Debug, Default, Serialize, Deserialize)] pub struct AppConfig { pub hc_interval: u16, pub hc_method: String, pub upstreams_conf: String, pub log_level: String, pub master_key: String, pub config_address: String, pub proxy_address_http: String, pub config_api_enabled: bool, pub config_tls_address: Option, pub config_tls_certificate: Option, pub config_tls_key_file: Option, pub proxy_address_tls: Option, pub proxy_port_tls: Option, pub local_server: Option<(String, u16)>, pub proxy_certificates: Option, pub proxy_tls_grade: Option, pub file_server_address: Option, pub file_server_folder: Option, pub runuser: Option, pub rungroup: Option, } #[derive(Debug, Clone, PartialEq, Eq, Hash)] pub struct InnerMap { pub address: String, pub port: u16, pub is_ssl: bool, pub is_http2: bool, pub to_https: bool, pub rate_limit: Option, pub healthcheck: Option, } #[allow(dead_code)] impl InnerMap { pub fn new() -> Self { Self { address: Default::default(), port: Default::default(), is_ssl: Default::default(), is_http2: Default::default(), to_https: Default::default(), rate_limit: Default::default(), healthcheck: Default::default(), } } }