use dashmap::DashMap; use serde::{Deserialize, Serialize}; use std::collections::HashMap; use std::sync::atomic::AtomicUsize; use std::sync::Arc; pub type UpstreamsDashMap = DashMap, DashMap, (Vec>, AtomicUsize)>>; pub type UpstreamsIdMap = DashMap>; pub type Headers = DashMap, DashMap, Vec<(String, Arc)>>>; // pub type UpstreamsSerDde = Option>; // pub type UpstreamsSerDe = HashMap; #[derive(Clone, Debug, Default)] pub struct Extraparams { pub to_https: Option, pub sticky_sessions: Option, pub authentication: Option>, pub rate_limit: Option, } #[derive(Debug, Default, Clone, Serialize, Deserialize)] pub struct GlobalServiceMapping { pub upstream: String, pub hostname: String, pub path: Option, pub to_https: Option, pub sticky_sessions: Option, pub rate_limit: Option, pub client_headers: Option>, pub server_headers: 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 to_https: Option, pub sticky_sessions: 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, Clone)] pub struct Auth { #[serde(rename = "type")] pub auth_type: String, #[serde(rename = "data")] pub auth_cred: 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, pub redirect_to: Option, pub authorization: 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: Option, 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 proxy_port: Option, pub local_server: Option<(String, u16)>, pub proxy_configs: Option, pub proxy_tls_grade: Option, pub file_server_address: Option, pub file_server_folder: Option, pub runuser: Option, pub rungroup: Option, pub log_file: Option, } #[derive(Debug, Default, Clone, PartialEq, Eq, Hash)] pub struct InnerAuth { pub auth_type: Arc, pub auth_cred: Arc, } #[derive(Debug, Clone, PartialEq, Eq, Hash)] pub struct InnerMap { pub address: Arc, pub port: u16, pub is_ssl: bool, pub is_http2: bool, pub to_https: bool, pub rate_limit: Option, pub healthcheck: Option, pub redirect_to: Option>, pub authorization: Option>, } #[allow(dead_code)] impl InnerMap { pub fn new() -> Self { Self { address: Arc::from("127.0.0.1"), port: Default::default(), is_ssl: Default::default(), is_http2: Default::default(), to_https: Default::default(), rate_limit: Default::default(), healthcheck: Default::default(), redirect_to: Default::default(), authorization: Default::default(), } } } #[derive(Debug, Default, Serialize, Deserialize)] pub struct InnerMapForJson { 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, } #[derive(Debug, Default, Serialize, Deserialize)] pub struct UpstreamSnapshotForJson { pub backends: Vec, pub requests: usize, }