diff --git a/Cargo.lock b/Cargo.lock index 04cda8a..b8cd0e9 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -144,6 +144,7 @@ dependencies = [ "mimalloc", "moka", "notify", + "noyalib", "pingora", "pingora-core", "pingora-http", @@ -158,7 +159,6 @@ dependencies = [ "sd-notify", "serde", "serde_json", - "serde_yml", "sha2 0.11.0", "signal-hook", "subtle", @@ -472,27 +472,27 @@ dependencies = [ [[package]] name = "cf-rustracing" -version = "1.3.0" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6565523d8145e63e0cf1b397a5f1bd4e90d5652a7dffb2de8cec460ff23ef6b1" +checksum = "93f85c3824e4191621dec0551e3cef3d511f329da9a8990bf3e450a85651d97e" dependencies = [ "backtrace", - "rand 0.10.1", + "rand 0.8.6", "tokio", "trackable", ] [[package]] name = "cf-rustracing-jaeger" -version = "1.3.0" +version = "1.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "16c0e4d8cce27f6a6eaff58d2b66f063a18b8ed0d6ef0947ae7a263afa3b7c08" +checksum = "a6a5f80d44c257c3300a7f45ada676c211e64bbbac591bbec19344a8f61fbcab" dependencies = [ "cf-rustracing", "hostname", "local-ip-address", "percent-encoding", - "rand 0.10.1", + "rand 0.9.4", "thrift_codec", "tokio", "trackable", @@ -1925,16 +1925,6 @@ dependencies = [ "cc", ] -[[package]] -name = "libyml" -version = "0.0.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3302702afa434ffa30847a83305f0a69d6abd74293b6554c18ec85c7ef30c980" -dependencies = [ - "anyhow", - "version_check", -] - [[package]] name = "libz-ng-sys" version = "1.1.28" @@ -2219,6 +2209,22 @@ dependencies = [ "bitflags 2.11.1", ] +[[package]] +name = "noyalib" +version = "0.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aaecb583890b00deddd413f1c9522cc3537e893cd3845dec578ed6c85de653f7" +dependencies = [ + "indexmap 2.14.0", + "itoa", + "memchr", + "rustc-hash", + "ryu", + "serde", + "serde_ignored", + "smallvec", +] + [[package]] name = "num-bigint" version = "0.4.6" @@ -2508,9 +2514,9 @@ checksum = "a89322df9ebe1c1578d689c92318e070967d1042b512afbe49518723f4e6d5cd" [[package]] name = "pingora" -version = "0.8.0" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "844a13b16e556293f4ea96dc5ac0923ac6f36855a9dfc13b640d0da183f6b5b7" +checksum = "54a75f2ff8e122aa80ab202dc865294fe59cd856c2a5dab2d3df6e122c93b941" dependencies = [ "pingora-cache", "pingora-core", @@ -2522,9 +2528,9 @@ dependencies = [ [[package]] name = "pingora-cache" -version = "0.8.0" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c59d8c4c939a3a193a3da0e061aa7acf7432431f92ee62a26f5a9e5167a0ade2" +checksum = "527735ac204efb9fa3884bfd9224d016c5735fabe1d394ebed145b40e7545b99" dependencies = [ "ahash", "async-trait", @@ -2559,9 +2565,9 @@ dependencies = [ [[package]] name = "pingora-core" -version = "0.8.0" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08973c4853cef4c682f7a592907e81a32dcad69476c4846e5de079f16448b177" +checksum = "6a7ffe2f5acf9f94fd255cfd1438866bc9124f8f0c7d42562bd3f853df2094b7" dependencies = [ "ahash", "async-trait", @@ -2611,15 +2617,15 @@ dependencies = [ [[package]] name = "pingora-error" -version = "0.8.0" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9fa97a500e7e5c27a7b8609b9294c8922c9656322285268bfad9520f12feb38" +checksum = "b23f7bc013de67e44ed902a82843f6157460b89d11da882bcc6f09f8ae380af1" [[package]] name = "pingora-header-serde" -version = "0.8.0" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2705feb8b50d4e734e0c7d3879aa040e655a45656276323ff530e254585dd816" +checksum = "828c0e53e74160cbfe8e67dd3a811eb6a253c36acbaf7a39a01d9aacfb9ac139" dependencies = [ "bytes", "http", @@ -2633,9 +2639,9 @@ dependencies = [ [[package]] name = "pingora-http" -version = "0.8.0" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fbb52d4651b687fab6abf669539cfd97b7cd94b301fde8f57c63354f9c9cc5e2" +checksum = "d553d310a15ec88107b9388a02885f798efc57764d8e9bdaaf32a76722927a10" dependencies = [ "bytes", "http", @@ -2644,27 +2650,27 @@ dependencies = [ [[package]] name = "pingora-ketama" -version = "0.8.0" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0286fb5a0359dca1e2e137dfe14ca4d94f676635a5eae4616bb3d8d4ce06d120" +checksum = "3e2a2e43a14f1d291fba7905542c7c1d1f89528f470b3cd48b6806e702ea772f" dependencies = [ "crc32fast", ] [[package]] name = "pingora-limits" -version = "0.8.0" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7568624fc0e2f11fa32d27053ac862048b40bad98140b07a11d82f1b4989700" +checksum = "4bafc633ceb95dc8b39a0d1b52d105758ae0913d360ef3a3365a6f6494d0fe17" dependencies = [ "ahash", ] [[package]] name = "pingora-load-balancing" -version = "0.8.0" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2606e9e22e72927a69772cefe56b0d41d251c3ffdfcd548a6020fe157fb79ad" +checksum = "361b69af0234d2e4d10234e2efd106bb3b8147c575d52f45604a46aaf26def7a" dependencies = [ "arc-swap", "async-trait", @@ -2684,9 +2690,9 @@ dependencies = [ [[package]] name = "pingora-lru" -version = "0.8.0" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91bb5030596a3d442c0866ac68afe29c14ba558e77c726dcdf7016b0dbb359d9" +checksum = "6705a26ad89d241a989a5395641931ba37076f5ab5fbd19ee92402414a43af32" dependencies = [ "arrayvec", "hashbrown 0.17.0", @@ -2696,9 +2702,9 @@ dependencies = [ [[package]] name = "pingora-openssl" -version = "0.8.0" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1cb7f135948a5c5a28a634e40fabd40c2588c757372f8a358bfca634a56514a6" +checksum = "5f288cacd77196168db0f6ae80817bc4844a8dd1448b75bb2da935eb6d9c3118" dependencies = [ "foreign-types", "libc", @@ -2709,9 +2715,9 @@ dependencies = [ [[package]] name = "pingora-pool" -version = "0.8.0" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67f034be36772f318370d058913db43dbd22c3763ad974c995ba2e4afb2bb52a" +checksum = "feb1237893b15a9cf6b371bee8d7e2e1c10742e4be6eb00ed38cfe87fd1363f8" dependencies = [ "crossbeam-queue", "log", @@ -2724,9 +2730,9 @@ dependencies = [ [[package]] name = "pingora-proxy" -version = "0.8.0" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e1e070a98a70d0d05f2fdcfb706237e06a043b2fbc9261e8772a3459cc2175e" +checksum = "8a92ee756ecf6ecb6419864da651cad6cecd933b6d420a26877031efa16bef57" dependencies = [ "async-trait", "bytes", @@ -2747,9 +2753,9 @@ dependencies = [ [[package]] name = "pingora-runtime" -version = "0.8.0" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e371315b1c44c2e5a8788fdc61577527b785e121e6ff49144755f40d86511430" +checksum = "41815a13691a3e7d9ad0e34767d4140284132e31b95a4481f5e73ab6f407f834" dependencies = [ "once_cell", "rand 0.8.6", @@ -2759,9 +2765,9 @@ dependencies = [ [[package]] name = "pingora-timeout" -version = "0.8.0" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a853fee5ce510a7f5db2561f99c752724112ed13fc3820e70d462d278d704ea" +checksum = "8e3e321452eaa461e0b6c5aaa35b7e42527ee89df33710279f37fae7f066b68e" dependencies = [ "once_cell", "parking_lot", @@ -3508,6 +3514,16 @@ dependencies = [ "syn 2.0.117", ] +[[package]] +name = "serde_ignored" +version = "0.1.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "115dffd5f3853e06e746965a20dcbae6ee747ae30b543d91b0e089668bb07798" +dependencies = [ + "serde", + "serde_core", +] + [[package]] name = "serde_json" version = "1.0.150" @@ -3557,21 +3573,6 @@ dependencies = [ "unsafe-libyaml", ] -[[package]] -name = "serde_yml" -version = "0.0.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59e2dd588bf1597a252c3b920e0143eb99b0f76e4e082f4c92ce34fbc9e71ddd" -dependencies = [ - "indexmap 2.14.0", - "itoa", - "libyml", - "memchr", - "ryu", - "serde", - "version_check", -] - [[package]] name = "sfv" version = "0.10.4" diff --git a/Cargo.toml b/Cargo.toml index 8367a66..5f37e21 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -29,7 +29,7 @@ futures = "0.3.32" notify = "9.0.0-rc.4" axum = { version = "0.8.9" } reqwest = { version = "0.13.4", features = ["json", "stream", "blocking"] } -serde_yml = "0.0.12" +noyalib = { version = "0.0.7", features = ["compat-serde-yaml"] } rand = "0.10.1" base64 = "0.22.1" jsonwebtoken = { version = "10.4.0", default-features = false, features = ["use_pem", "rust_crypto"] } diff --git a/src/utils/parceyaml.rs b/src/utils/parceyaml.rs index 601cea8..bcab3d9 100644 --- a/src/utils/parceyaml.rs +++ b/src/utils/parceyaml.rs @@ -108,7 +108,7 @@ pub async fn load_configuration(d: &str, kind: &str) -> (Option, } }; - let mut parsed: Config = match serde_yml::from_str(&yaml_data) { + let mut parsed: Config = match noyalib::from_str(&yaml_data) { Ok(cfg) => cfg, Err(e) => { error!("Failed to parse upstreams file: {}", e); @@ -118,7 +118,7 @@ pub async fn load_configuration(d: &str, kind: &str) -> (Option, if let Some(ref mut upstreams) = parsed.upstreams { for uconf in conf_files { - let p: HashMap = match serde_yml::from_str(&uconf) { + let p: HashMap = match noyalib::from_str(&uconf) { Ok(ucfg) => ucfg, Err(e) => { error!("Failed to parse upstreams file: {}", e); @@ -264,19 +264,13 @@ async fn populate_file_upstreams(config: &mut Configuration, parsed: &Config) { } pub fn parce_main_config(path: &str) -> AppConfig { let data = fs::read_to_string(path).unwrap(); - let reply = DashMap::new(); - let cfg: HashMap = serde_yml::from_str(&data).expect("Failed to parse main config file"); - let mut cfo: AppConfig = serde_yml::from_str(&data).expect("Failed to parse main config file"); - + let mut cfo: AppConfig = noyalib::from_str(&data).expect("Failed to parse main config file"); if let Ok(jwt_key) = env::var("JWT_KEY") { cfo.master_key = Some(jwt_key); }; log_builder(&cfo, &cfo.log_file); cfo.hc_method = cfo.hc_method.to_uppercase(); - for (k, v) in cfg { - reply.insert(k.to_string(), v.to_string()); - } if let Some((ip, port_str)) = cfo.config_address.split_once(':') { if let Ok(port) = port_str.parse::() { cfo.local_server = Option::from((ip.to_string(), port)); diff --git a/src/web/webserver.rs b/src/web/webserver.rs index 51445ae..a537fe2 100644 --- a/src/web/webserver.rs +++ b/src/web/webserver.rs @@ -102,7 +102,7 @@ async fn conf(State(st): State, Query(params): Query(strcontent); + let parsed = noyalib::from_str::(strcontent); match parsed { Ok(_) => { if let Some(_) = params.get("save") { @@ -228,8 +228,7 @@ async fn status(State(st): State, Query(params): Query TcpListener { - let addr = SocketAddr::from_str(address) - .unwrap_or_else(|e| panic!("{}: Invalid address format: {:?}", name, e)); + let addr = SocketAddr::from_str(address).unwrap_or_else(|e| panic!("{}: Invalid address format: {:?}", name, e)); let t = Duration::from_secs(2); //if addr.ip() == IpAddr::V4(Ipv4Addr::UNSPECIFIED) {