use std::{collections::HashMap, fs}; use serde::{Deserialize, Serialize}; #[derive(Debug, Serialize, Deserialize)] pub struct ProxyConfig { pub prometheus: Option, pub groups: Vec, } impl ProxyConfig { pub fn load(file_name: &str) -> Result { let file_content = match fs::read_to_string(file_name) { Ok(file_content) => file_content, Err(e) => return Err(format!("read file: {} failed: {}", file_name, e)), }; let proxy_config: ProxyConfig = match serde_json::from_str(&file_content) { Ok(proxy_config) => proxy_config, Err(e) => return Err(format!("parse file: {} failed: {}", file_name, e)), }; Ok(proxy_config) } } #[derive(Debug, Serialize, Deserialize)] pub struct ProxyGroup { pub port: u16, pub lookup_dns: Option, pub dns_domains: Option>, pub tls: Option, pub proxy_map: Option>, } #[derive(Debug, Serialize, Deserialize)] pub struct ProxyItem { pub address: String, pub tls: Option, pub sni: Option, } #[derive(Debug, Serialize, Deserialize)] pub struct ProxyTls { pub issuer_cert: String, pub issuer_key: String, }