From 558fb7bade1aa650086debb962dcf65e08136fab Mon Sep 17 00:00:00 2001 From: mbecker20 Date: Fri, 8 Aug 2025 22:33:21 -0700 Subject: [PATCH] config support yaml --- Cargo.lock | 11 ++++++----- Cargo.toml | 2 +- bin/core/Cargo.toml | 2 +- bin/core/src/stack/services.rs | 2 +- bin/periphery/Cargo.toml | 2 +- bin/periphery/src/api/compose.rs | 2 +- lib/config/Cargo.toml | 1 + lib/config/src/error.rs | 6 ++++++ lib/config/src/lib.rs | 8 ++++++++ 9 files changed, 26 insertions(+), 10 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index d0ad0ca9f..1238161ed 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1075,6 +1075,7 @@ dependencies = [ "indexmap 2.10.0", "serde", "serde_json", + "serde_yaml_ng", "thiserror 2.0.12", "toml", "wildcard", @@ -2688,7 +2689,7 @@ dependencies = [ "rustls 0.23.31", "serde", "serde_json", - "serde_yaml", + "serde_yaml_ng", "serror", "sha2", "slack_client_rs", @@ -2742,7 +2743,7 @@ dependencies = [ "rustls 0.23.31", "serde", "serde_json", - "serde_yaml", + "serde_yaml_ng", "serror", "sysinfo", "tokio", @@ -4627,10 +4628,10 @@ dependencies = [ ] [[package]] -name = "serde_yaml" -version = "0.9.34+deprecated" +name = "serde_yaml_ng" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a8b1a1a2ebf674015cc02edccce75287f1a0130d394307b36743c2f5d504b47" +checksum = "7b4db627b98b36d4203a7b458cf3573730f2bb591b28871d916dfa9efabfd41f" dependencies = [ "indexmap 2.10.0", "itoa", diff --git a/Cargo.toml b/Cargo.toml index 6be52f0e8..d96c8261d 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -68,8 +68,8 @@ ipnetwork = { version = "0.21.1", features = ["serde"] } indexmap = { version = "2.10.0", features = ["serde"] } serde = { version = "1.0.219", features = ["derive"] } strum = { version = "0.27.2", features = ["derive"] } +serde_yaml_ng = "0.10.0" serde_json = "1.0.142" -serde_yaml = "0.9.34-deprecated" serde_qs = "0.15.0" toml = "0.9.5" diff --git a/bin/core/Cargo.toml b/bin/core/Cargo.toml index 0626c6dfb..2f960ccf0 100644 --- a/bin/core/Cargo.toml +++ b/bin/core/Cargo.toml @@ -50,7 +50,7 @@ tokio-util.workspace = true axum-extra.workspace = true tower-http.workspace = true serde_json.workspace = true -serde_yaml.workspace = true +serde_yaml_ng.workspace = true typeshare.workspace = true chrono-tz.workspace = true indexmap.workspace = true diff --git a/bin/core/src/stack/services.rs b/bin/core/src/stack/services.rs index 4ebd93df4..5019e9779 100644 --- a/bin/core/src/stack/services.rs +++ b/bin/core/src/stack/services.rs @@ -29,7 +29,7 @@ pub fn extract_services_into_res( compose_contents: &str, res: &mut Vec, ) -> anyhow::Result<()> { - let compose = serde_yaml::from_str::(compose_contents) + let compose = serde_yaml_ng::from_str::(compose_contents) .context("failed to parse service names from compose contents")?; let mut services = Vec::with_capacity(compose.services.capacity()); diff --git a/bin/periphery/Cargo.toml b/bin/periphery/Cargo.toml index 7f7efc460..07984d0c5 100644 --- a/bin/periphery/Cargo.toml +++ b/bin/periphery/Cargo.toml @@ -39,7 +39,7 @@ tokio-stream.workspace = true portable-pty.workspace = true axum-server.workspace = true serde_json.workspace = true -serde_yaml.workspace = true +serde_yaml_ng.workspace = true tokio-util.workspace = true arc-swap.workspace = true futures.workspace = true diff --git a/bin/periphery/src/api/compose.rs b/bin/periphery/src/api/compose.rs index 0b55cc591..dba988e12 100644 --- a/bin/periphery/src/api/compose.rs +++ b/bin/periphery/src/api/compose.rs @@ -562,7 +562,7 @@ impl Resolve for ComposeUp { return Ok(res); } let compose = - serde_yaml::from_str::(&config_log.stdout) + serde_yaml_ng::from_str::(&config_log.stdout) .context("Failed to parse compose contents")?; // Record sanitized compose config output res.compose_config = Some(config_log.stdout); diff --git a/lib/config/Cargo.toml b/lib/config/Cargo.toml index fb7b6ff8d..61d33ed87 100644 --- a/lib/config/Cargo.toml +++ b/lib/config/Cargo.toml @@ -9,6 +9,7 @@ homepage.workspace = true [dependencies] serde_json.workspace = true +serde_yaml_ng.workspace = true thiserror.workspace = true indexmap.workspace = true wildcard.workspace = true diff --git a/lib/config/src/error.rs b/lib/config/src/error.rs index 5e8881dcb..276345811 100644 --- a/lib/config/src/error.rs +++ b/lib/config/src/error.rs @@ -27,6 +27,12 @@ pub enum Error { #[error("Failed to parse toml file at {path} | {e:?}")] ParseToml { e: toml::de::Error, path: PathBuf }, + #[error("Failed to parse yaml file at {path} | {e:?}")] + ParseYaml { + e: serde_yaml_ng::Error, + path: PathBuf, + }, + #[error("Failed to parse json file at {path} | {e:?}")] ParseJson { e: serde_json::Error, path: PathBuf }, diff --git a/lib/config/src/lib.rs b/lib/config/src/lib.rs index 86b06df2d..f02a69680 100644 --- a/lib/config/src/lib.rs +++ b/lib/config/src/lib.rs @@ -270,6 +270,14 @@ pub fn parse_config_file( path: file.to_path_buf(), })? } + Some("yaml") | Some("yml") => { + serde_yaml_ng::from_reader(file_handle).map_err(|e| { + Error::ParseYaml { + e, + path: file.to_path_buf(), + } + })? + } Some("json") => { serde_json::from_reader(file_handle).map_err(|e| { Error::ParseJson {