diff --git a/Cargo.lock b/Cargo.lock index 021131146..cca347c60 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2069,9 +2069,9 @@ dependencies = [ "rstest", "rstest_reuse", "serde", - "serde_yaml", "snafu 0.9.2", "syn 3.0.6", + "yaml_serde", ] [[package]] @@ -2250,6 +2250,12 @@ version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b6d2cec3eae94f9f509c767b45932f1ada8350c4bdb85af2fcab4a3c14807981" +[[package]] +name = "libyaml-rs" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2e126dda6f34391ab7b444f9922055facc83c07a910da3eb16f1e4d9c45dc777" + [[package]] name = "libz-sys" version = "1.1.29" @@ -3615,19 +3621,6 @@ dependencies = [ "serde", ] -[[package]] -name = "serde_yaml" -version = "0.9.34+deprecated" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a8b1a1a2ebf674015cc02edccce75287f1a0130d394307b36743c2f5d504b47" -dependencies = [ - "indexmap", - "itoa", - "ryu", - "serde", - "unsafe-libyaml", -] - [[package]] name = "sha1" version = "0.10.7" @@ -3869,7 +3862,6 @@ dependencies = [ "semver", "serde", "serde_json", - "serde_yaml", "sha2", "snafu 0.9.2", "stackable-certs", @@ -3887,6 +3879,7 @@ dependencies = [ "uuid", "winnow", "xml", + "yaml_serde", ] [[package]] @@ -3911,10 +3904,10 @@ dependencies = [ "schemars", "semver", "serde", - "serde_yaml", "snafu 0.9.2", "strum", "time", + "yaml_serde", ] [[package]] @@ -3952,9 +3945,9 @@ dependencies = [ "schemars", "serde", "serde_json", - "serde_yaml", "snafu 0.9.2", "stackable-versioned-macros", + "yaml_serde", ] [[package]] @@ -3977,12 +3970,12 @@ dependencies = [ "schemars", "serde", "serde_json", - "serde_yaml", "snafu 0.9.2", "stackable-versioned", "syn 3.0.6", "tracing", "trybuild", + "yaml_serde", ] [[package]] @@ -4166,7 +4159,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "32497e9a4c7b38532efcdebeef879707aa9f794296a4f0244f6f69e9bc8574bd" dependencies = [ "fastrand", - "getrandom 0.3.4", + "getrandom 0.4.3", "once_cell", "rustix", "windows-sys 0.61.2", @@ -4724,12 +4717,6 @@ version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" -[[package]] -name = "unsafe-libyaml" -version = "0.2.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "673aac59facbab8a9007c7f6108d11f63b603f7cabff99fabf650fea5c32b861" - [[package]] name = "untrusted" version = "0.9.0" @@ -5202,6 +5189,19 @@ dependencies = [ "strum", ] +[[package]] +name = "yaml_serde" +version = "0.10.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33b729a08a9a6be689bbad3e2bf8015926db54b6622cc89c3a5f7dc174b9e918" +dependencies = [ + "indexmap", + "itoa", + "libyaml-rs", + "ryu", + "serde", +] + [[package]] name = "yoke" version = "0.8.3" diff --git a/Cargo.toml b/Cargo.toml index 4ef690159..a903cd7d6 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -78,7 +78,7 @@ schemars = { version = "1.2.2", features = ["url2"] } semver = "1.0.28" serde = { version = "1.0.229", features = ["derive"] } serde_json = "1.0.151" -serde_yaml = "0.9.34" # This is the last available version, see https://github.com/dtolnay/serde-yaml/releases/tag/0.9.34 for details +yaml_serde = "0.10.7" # Pinned to the old RustCrypto generation, see the const-oid comment above. sha2 0.11 uses # digest 0.11 and signature 3.0, which rsa 0.9 does not support. sha2 = { version = "0.10.9", features = ["oid"] } diff --git a/crates/k8s-version/CHANGELOG.md b/crates/k8s-version/CHANGELOG.md index 641f569a6..f7833b2aa 100644 --- a/crates/k8s-version/CHANGELOG.md +++ b/crates/k8s-version/CHANGELOG.md @@ -4,6 +4,12 @@ All notable changes to this project will be documented in this file. ## [Unreleased] +### Changed + +- Replace serde_yaml with yaml_serde ([#1298]). + +[#1298]: https://github.com/stackabletech/operator-rs/pull/1298 + ## [0.1.3] - 2025-05-19 ### Added diff --git a/crates/k8s-version/Cargo.toml b/crates/k8s-version/Cargo.toml index b031882d1..f57234f0b 100644 --- a/crates/k8s-version/Cargo.toml +++ b/crates/k8s-version/Cargo.toml @@ -21,7 +21,7 @@ rstest.workspace = true rstest_reuse.workspace = true quote.workspace = true proc-macro2.workspace = true -serde_yaml.workspace = true +yaml_serde.workspace = true syn.workspace = true [lints] diff --git a/crates/k8s-version/src/api_version/serde.rs b/crates/k8s-version/src/api_version/serde.rs index 2ef14822b..3055f7b2a 100644 --- a/crates/k8s-version/src/api_version/serde.rs +++ b/crates/k8s-version/src/api_version/serde.rs @@ -47,7 +47,7 @@ mod tests { #[test] fn deserialize() { let _: ApiVersion = - serde_yaml::from_str("extensions.k8s.io/v1alpha1").expect("api version is valid"); + yaml_serde::from_str("extensions.k8s.io/v1alpha1").expect("api version is valid"); } #[test] @@ -56,7 +56,7 @@ mod tests { ApiVersion::from_str("extensions.k8s.io/v1alpha1").expect("api version is valid"); assert_eq!( "extensions.k8s.io/v1alpha1\n", - serde_yaml::to_string(&api_version).expect("api version must serialize") + yaml_serde::to_string(&api_version).expect("api version must serialize") ); } } diff --git a/crates/k8s-version/src/group.rs b/crates/k8s-version/src/group.rs index d4bf9f8ec..82e91e43c 100644 --- a/crates/k8s-version/src/group.rs +++ b/crates/k8s-version/src/group.rs @@ -72,7 +72,7 @@ mod tests { #[test] fn deserialize() { - let _: Group = serde_yaml::from_str("extensions.k8s.io").expect("group is valid"); + let _: Group = yaml_serde::from_str("extensions.k8s.io").expect("group is valid"); } #[test] @@ -80,7 +80,7 @@ mod tests { let group = Group("extensions.k8s.io".into()); assert_eq!( "extensions.k8s.io\n", - serde_yaml::to_string(&group).expect("group must serialize") + yaml_serde::to_string(&group).expect("group must serialize") ); } } diff --git a/crates/k8s-version/src/level/serde.rs b/crates/k8s-version/src/level/serde.rs index 4d1fd8075..64e6e2cec 100644 --- a/crates/k8s-version/src/level/serde.rs +++ b/crates/k8s-version/src/level/serde.rs @@ -46,7 +46,7 @@ mod tests { #[test] fn deserialize() { - let _: Level = serde_yaml::from_str("alpha1").expect("level is valid"); + let _: Level = yaml_serde::from_str("alpha1").expect("level is valid"); } #[test] @@ -54,7 +54,7 @@ mod tests { let api_version = Level::from_str("alpha1").expect("level is valid"); assert_eq!( "alpha1\n", - serde_yaml::to_string(&api_version).expect("level must serialize") + yaml_serde::to_string(&api_version).expect("level must serialize") ); } } diff --git a/crates/k8s-version/src/version/serde.rs b/crates/k8s-version/src/version/serde.rs index c0f3b3c6c..7f381850b 100644 --- a/crates/k8s-version/src/version/serde.rs +++ b/crates/k8s-version/src/version/serde.rs @@ -46,7 +46,7 @@ mod tests { #[test] fn deserialize() { - let _: Version = serde_yaml::from_str("v1alpha1").expect("version is valid"); + let _: Version = yaml_serde::from_str("v1alpha1").expect("version is valid"); } #[test] @@ -54,7 +54,7 @@ mod tests { let api_version = Version::from_str("v1alpha1").expect("version is valid"); assert_eq!( "v1alpha1\n", - serde_yaml::to_string(&api_version).expect("version must serialize") + yaml_serde::to_string(&api_version).expect("version must serialize") ); } } diff --git a/crates/stackable-operator/CHANGELOG.md b/crates/stackable-operator/CHANGELOG.md index 8a1f4a8b6..477e62b5b 100644 --- a/crates/stackable-operator/CHANGELOG.md +++ b/crates/stackable-operator/CHANGELOG.md @@ -4,6 +4,12 @@ All notable changes to this project will be documented in this file. ## [Unreleased] +### Changed + +- Replace serde_yaml with yaml_serde ([#1298]). + +[#1298]: https://github.com/stackabletech/operator-rs/pull/1298 + ## [0.120.0] - 2026-10-12 ### Added diff --git a/crates/stackable-operator/Cargo.toml b/crates/stackable-operator/Cargo.toml index d59f542a7..bf87506e5 100644 --- a/crates/stackable-operator/Cargo.toml +++ b/crates/stackable-operator/Cargo.toml @@ -50,7 +50,7 @@ regex.workspace = true schemars.workspace = true semver = { workspace = true, features = ["serde"] } serde_json.workspace = true -serde_yaml.workspace = true +yaml_serde.workspace = true serde.workspace = true sha2.workspace = true snafu.workspace = true diff --git a/crates/stackable-operator/src/builder/pdb.rs b/crates/stackable-operator/src/builder/pdb.rs index 5e2fb1d2c..a157c91e7 100644 --- a/crates/stackable-operator/src/builder/pdb.rs +++ b/crates/stackable-operator/src/builder/pdb.rs @@ -260,7 +260,7 @@ mod tests { )] #[kube(group = "test", version = "v1", kind = "TrinoCluster", namespaced)] pub struct TrinoClusterSpec {} - let trino: TrinoCluster = serde_yaml::from_str( + let trino: TrinoCluster = yaml_serde::from_str( " apiVersion: test/v1 kind: TrinoCluster diff --git a/crates/stackable-operator/src/builder/pod/mod.rs b/crates/stackable-operator/src/builder/pod/mod.rs index 9bac56b7d..303682c4d 100644 --- a/crates/stackable-operator/src/builder/pod/mod.rs +++ b/crates/stackable-operator/src/builder/pod/mod.rs @@ -391,7 +391,7 @@ impl PodBuilder { /// storageClassName: listeners.stackable.tech /// name: listener /// ", - /// serde_yaml::to_string(&pod).unwrap() + /// yaml_serde::to_string(&pod).unwrap() /// ) /// ``` pub fn add_listener_volume_by_listener_class( @@ -481,7 +481,7 @@ impl PodBuilder { /// storageClassName: listeners.stackable.tech /// name: listener /// ", - /// serde_yaml::to_string(&pod).unwrap() + /// yaml_serde::to_string(&pod).unwrap() /// ) /// ``` pub fn add_listener_volume_by_listener_name( diff --git a/crates/stackable-operator/src/commons/affinity.rs b/crates/stackable-operator/src/commons/affinity.rs index 903e7241f..82812f23f 100644 --- a/crates/stackable-operator/src/commons/affinity.rs +++ b/crates/stackable-operator/src/commons/affinity.rs @@ -59,7 +59,7 @@ pub struct StackableAffinity { // We can not mark it as [`Atomic`], as [`crate::config::fragment::FromFragment`] is already implemented for // [`BTreeMap`]. // -// We `#[serde(flatten)]` the contained [`BTreeMap`], so `serde_yaml` can deserialize everything as +// We `#[serde(flatten)]` the contained [`BTreeMap`], so `yaml_serde` can deserialize everything as // expected. #[derive(Clone, Debug, Eq, Deserialize, JsonSchema, PartialEq, Serialize)] #[serde(rename_all = "camelCase")] @@ -176,7 +176,7 @@ mod tests { disktype: ssd "; let mut role_affinity: StackableAffinityFragment = - serde_yaml::from_str(role_input).expect("illegal test input"); + yaml_serde::from_str(role_input).expect("illegal test input"); role_affinity.merge(&default_affinity); let merged_affinity: StackableAffinity = fragment::validate(role_affinity).unwrap(); @@ -277,7 +277,7 @@ mod tests { topologyKey: topology.kubernetes.io/zone "; let mut role_affinity: StackableAffinityFragment = - serde_yaml::from_str(role_input).expect("illegal test input"); + yaml_serde::from_str(role_input).expect("illegal test input"); role_affinity.merge(&default_affinity); let merged_affinity: StackableAffinity = fragment::validate(role_affinity).unwrap(); diff --git a/crates/stackable-operator/src/commons/cache.rs b/crates/stackable-operator/src/commons/cache.rs index 24ba198dc..cb12ceb29 100644 --- a/crates/stackable-operator/src/commons/cache.rs +++ b/crates/stackable-operator/src/commons/cache.rs @@ -97,7 +97,7 @@ mod tests { #[test] fn test_deserialization() { - let my_cache: MyCache = serde_yaml::from_str("entryTimeToLive: 13h\n").unwrap(); + let my_cache: MyCache = yaml_serde::from_str("entryTimeToLive: 13h\n").unwrap(); assert_eq!( my_cache.entry_time_to_live, diff --git a/crates/stackable-operator/src/commons/opa.rs b/crates/stackable-operator/src/commons/opa.rs index c8c4caed4..1dc5c9322 100644 --- a/crates/stackable-operator/src/commons/opa.rs +++ b/crates/stackable-operator/src/commons/opa.rs @@ -27,7 +27,7 @@ //! opa: Option, //! } //! -//! let cluster: TestCluster = serde_yaml::from_str( +//! let cluster: TestCluster = yaml_serde::from_str( //! " //! apiVersion: test.stackable.tech/v1alpha1 //! kind: TestCluster @@ -353,7 +353,7 @@ mod tests { } fn build_test_cluster() -> TestCluster { - serde_yaml::from_str(&format!( + yaml_serde::from_str(&format!( " apiVersion: test/v1 kind: TestCluster diff --git a/crates/stackable-operator/src/commons/product_image_selection.rs b/crates/stackable-operator/src/commons/product_image_selection.rs index cd9089711..bfba2f44a 100644 --- a/crates/stackable-operator/src/commons/product_image_selection.rs +++ b/crates/stackable-operator/src/commons/product_image_selection.rs @@ -760,7 +760,7 @@ mod tests { #[case] input: String, #[case] expected: ResolvedProductImage, ) { - let product_image: ProductImage = serde_yaml::from_str(&input).expect("Illegal test input"); + let product_image: ProductImage = yaml_serde::from_str(&input).expect("Illegal test input"); let operator_version = operator_version.parse().expect("invalid operator version"); let resolved_product_image = product_image .resolve(&image_name, &image_repository, &operator_version) @@ -787,7 +787,7 @@ mod tests { "data did not match any variant of untagged enum ProductImageSelection" )] fn resolved_image_fail(#[case] input: String, #[case] expected: String) { - let err = serde_yaml::from_str::(&input).expect_err("Must be error"); + let err = yaml_serde::from_str::(&input).expect_err("Must be error"); assert_eq!(err.to_string(), expected); } diff --git a/crates/stackable-operator/src/commons/rbac.rs b/crates/stackable-operator/src/commons/rbac.rs index 3369261cc..5c3bae2a4 100644 --- a/crates/stackable-operator/src/commons/rbac.rs +++ b/crates/stackable-operator/src/commons/rbac.rs @@ -122,7 +122,7 @@ mod tests { } fn build_test_resource() -> TestCluster { - serde_yaml::from_str(&format!( + yaml_serde::from_str(&format!( " apiVersion: test/v1 kind: TestCluster diff --git a/crates/stackable-operator/src/commons/resources.rs b/crates/stackable-operator/src/commons/resources.rs index f03babeee..4b027addc 100644 --- a/crates/stackable-operator/src/commons/resources.rs +++ b/crates/stackable-operator/src/commons/resources.rs @@ -654,14 +654,14 @@ mod tests { #[case] expected: String, ) { let input_pvcconfig_fragment: PvcConfigFragment = - serde_yaml::from_str(&input).expect("illegal test input"); + yaml_serde::from_str(&input).expect("illegal test input"); let input_pvcconfig = fragment::validate::(input_pvcconfig_fragment) .expect("test input failed validation"); let result = input_pvcconfig.build_pvc(&name, access_modes); let expected_volumeclaim: PersistentVolumeClaim = - serde_yaml::from_str(&expected).expect("illegal expected output"); + yaml_serde::from_str(&expected).expect("illegal expected output"); assert_eq!(result, expected_volumeclaim); } @@ -705,13 +705,13 @@ mod tests { )] fn into_resourcelimits(#[case] input: String, #[case] expected: String) { let input_resources_fragment: ResourcesFragment = - serde_yaml::from_str(&input).expect("illegal test input"); + yaml_serde::from_str(&input).expect("illegal test input"); let input_resources: Resources = fragment::validate(input_resources_fragment).expect("test input failed validation"); let result: ResourceRequirements = input_resources.into(); let expected_requirements: ResourceRequirements = - serde_yaml::from_str(&expected).expect("illegal expected output"); + yaml_serde::from_str(&expected).expect("illegal expected output"); assert_eq!(result, expected_requirements); } diff --git a/crates/stackable-operator/src/cpu.rs b/crates/stackable-operator/src/cpu.rs index 5d6bfc508..6b5113728 100644 --- a/crates/stackable-operator/src/cpu.rs +++ b/crates/stackable-operator/src/cpu.rs @@ -286,7 +286,7 @@ mod tests { } let cpu = Cpu { cpu }; - let output = serde_yaml::to_string(&cpu).unwrap(); + let output = yaml_serde::to_string(&cpu).unwrap(); assert_eq!(output, expected); } @@ -305,7 +305,7 @@ mod tests { cpu: CpuQuantity, } - let cpu: Cpu = serde_yaml::from_str(input).unwrap(); + let cpu: Cpu = yaml_serde::from_str(input).unwrap(); assert_eq!(cpu.cpu, expected); } } diff --git a/crates/stackable-operator/src/crd/authentication/ldap/v1alpha1_impl.rs b/crates/stackable-operator/src/crd/authentication/ldap/v1alpha1_impl.rs index 60afed979..b2ca607b7 100644 --- a/crates/stackable-operator/src/crd/authentication/ldap/v1alpha1_impl.rs +++ b/crates/stackable-operator/src/crd/authentication/ldap/v1alpha1_impl.rs @@ -177,7 +177,7 @@ mod tests { #[test] fn minimal() { - let ldap = serde_yaml::from_str::( + let ldap = yaml_serde::from_str::( " hostname: my.ldap.server ", @@ -191,7 +191,7 @@ mod tests { #[test] fn with_bind_credentials() { - let _ldap = serde_yaml::from_str::( + let _ldap = yaml_serde::from_str::( " hostname: my.ldap.server port: 389 diff --git a/crates/stackable-operator/src/crd/authentication/oidc/v1alpha1_impl.rs b/crates/stackable-operator/src/crd/authentication/oidc/v1alpha1_impl.rs index c9d24bab4..53acbb2d7 100644 --- a/crates/stackable-operator/src/crd/authentication/oidc/v1alpha1_impl.rs +++ b/crates/stackable-operator/src/crd/authentication/oidc/v1alpha1_impl.rs @@ -191,7 +191,7 @@ mod test { #[test] fn minimal() { - let oidc = serde_yaml::from_str::( + let oidc = yaml_serde::from_str::( " hostname: my.keycloak.server scopes: [openid] @@ -203,7 +203,7 @@ mod test { #[test] fn full() { - let oidc = serde_yaml::from_str::( + let oidc = yaml_serde::from_str::( " hostname: my.keycloak.server rootPath: / @@ -217,7 +217,7 @@ mod test { #[test] fn http_endpoint_url() { - let oidc = serde_yaml::from_str::( + let oidc = yaml_serde::from_str::( " hostname: my.keycloak.server rootPath: my-root-path @@ -236,7 +236,7 @@ mod test { #[test] fn https_endpoint_url() { - let oidc = serde_yaml::from_str::( + let oidc = yaml_serde::from_str::( " hostname: my.keycloak.server tls: @@ -258,7 +258,7 @@ mod test { #[test] fn ipv6_endpoint_url() { - let oidc = serde_yaml::from_str::( + let oidc = yaml_serde::from_str::( " hostname: 2606:2800:220:1:248:1893:25c8:1946 rootPath: my-root-path @@ -285,7 +285,7 @@ mod test { "http://my.keycloak.server:1234/realms/my/realm/with/slashes" )] fn root_path_endpoint_url(#[case] root_path: String, #[case] expected_endpoint_url: &str) { - let oidc = serde_yaml::from_str::(&format!( + let oidc = yaml_serde::from_str::(&format!( " hostname: my.keycloak.server port: 1234 @@ -318,7 +318,7 @@ mod test { "https://my.keycloak.server/realms/my/realm/with/slashes/.well-known/openid-configuration" )] fn root_path_well_known_url(#[case] root_path: String, #[case] expected_well_known_url: &str) { - let oidc = serde_yaml::from_str::(&format!( + let oidc = yaml_serde::from_str::(&format!( " hostname: my.keycloak.server rootPath: {root_path} diff --git a/crates/stackable-operator/src/crd/git_sync/v1alpha1_impl.rs b/crates/stackable-operator/src/crd/git_sync/v1alpha1_impl.rs index 20cfc7e5f..5b462c135 100644 --- a/crates/stackable-operator/src/crd/git_sync/v1alpha1_impl.rs +++ b/crates/stackable-operator/src/crd/git_sync/v1alpha1_impl.rs @@ -546,7 +546,7 @@ volumeMounts: - mountPath: /mnt/extra-volume name: extra-volume "#, - serde_yaml::to_string(&git_sync_resources.git_sync_containers.first()).unwrap() + yaml_serde::to_string(&git_sync_resources.git_sync_containers.first()).unwrap() ); assert_eq!( @@ -620,7 +620,7 @@ volumeMounts: - mountPath: /mnt/extra-volume name: extra-volume "#, - serde_yaml::to_string(&git_sync_resources.git_sync_containers.get(1)).unwrap() + yaml_serde::to_string(&git_sync_resources.git_sync_containers.get(1)).unwrap() ); assert_eq!( @@ -689,7 +689,7 @@ volumeMounts: - mountPath: /mnt/extra-volume name: extra-volume "#, - serde_yaml::to_string(&git_sync_resources.git_sync_containers.get(2)).unwrap() + yaml_serde::to_string(&git_sync_resources.git_sync_containers.get(2)).unwrap() ); assert_eq!(3, git_sync_resources.git_sync_init_containers.len()); @@ -728,7 +728,7 @@ volumeMounts: - mountPath: /mnt/extra-volume name: extra-volume ", - serde_yaml::to_string(&git_sync_resources.git_sync_init_containers.first()).unwrap() + yaml_serde::to_string(&git_sync_resources.git_sync_init_containers.first()).unwrap() ); assert_eq!( @@ -770,7 +770,7 @@ volumeMounts: - mountPath: /mnt/extra-volume name: extra-volume ", - serde_yaml::to_string(&git_sync_resources.git_sync_init_containers.get(1)).unwrap() + yaml_serde::to_string(&git_sync_resources.git_sync_init_containers.get(1)).unwrap() ); assert_eq!( @@ -807,7 +807,7 @@ volumeMounts: - mountPath: /mnt/extra-volume name: extra-volume ", - serde_yaml::to_string(&git_sync_resources.git_sync_init_containers.get(2)).unwrap() + yaml_serde::to_string(&git_sync_resources.git_sync_init_containers.get(2)).unwrap() ); assert_eq!(3, git_sync_resources.git_content_volumes.len()); @@ -816,21 +816,21 @@ volumeMounts: "emptyDir: {} name: content-from-git-0 ", - serde_yaml::to_string(&git_sync_resources.git_content_volumes.first()).unwrap() + yaml_serde::to_string(&git_sync_resources.git_content_volumes.first()).unwrap() ); assert_eq!( "emptyDir: {} name: content-from-git-1 ", - serde_yaml::to_string(&git_sync_resources.git_content_volumes.get(1)).unwrap() + yaml_serde::to_string(&git_sync_resources.git_content_volumes.get(1)).unwrap() ); assert_eq!( "emptyDir: {} name: content-from-git-2 ", - serde_yaml::to_string(&git_sync_resources.git_content_volumes.get(2)).unwrap() + yaml_serde::to_string(&git_sync_resources.git_content_volumes.get(2)).unwrap() ); assert_eq!(3, git_sync_resources.git_content_volume_mounts.len()); @@ -839,21 +839,21 @@ name: content-from-git-2 "mountPath: /stackable/app/git-0 name: content-from-git-0 ", - serde_yaml::to_string(&git_sync_resources.git_content_volume_mounts.first()).unwrap() + yaml_serde::to_string(&git_sync_resources.git_content_volume_mounts.first()).unwrap() ); assert_eq!( "mountPath: /stackable/app/git-1 name: content-from-git-1 ", - serde_yaml::to_string(&git_sync_resources.git_content_volume_mounts.get(1)).unwrap() + yaml_serde::to_string(&git_sync_resources.git_content_volume_mounts.get(1)).unwrap() ); assert_eq!( "mountPath: /stackable/app/git-2 name: content-from-git-2 ", - serde_yaml::to_string(&git_sync_resources.git_content_volume_mounts.get(2)).unwrap() + yaml_serde::to_string(&git_sync_resources.git_content_volume_mounts.get(2)).unwrap() ); assert_eq!(3, git_sync_resources.git_content_folders.len()); diff --git a/crates/stackable-operator/src/crd/git_sync/v1alpha2_impl.rs b/crates/stackable-operator/src/crd/git_sync/v1alpha2_impl.rs index eba308bfb..48865abfa 100644 --- a/crates/stackable-operator/src/crd/git_sync/v1alpha2_impl.rs +++ b/crates/stackable-operator/src/crd/git_sync/v1alpha2_impl.rs @@ -677,7 +677,7 @@ volumeMounts: - mountPath: /mnt/extra-volume name: extra-volume "#, - serde_yaml::to_string(&git_sync_resources.git_sync_containers.first()).unwrap() + yaml_serde::to_string(&git_sync_resources.git_sync_containers.first()).unwrap() ); assert_eq!( @@ -751,7 +751,7 @@ volumeMounts: - mountPath: /mnt/extra-volume name: extra-volume "#, - serde_yaml::to_string(&git_sync_resources.git_sync_containers.get(1)).unwrap() + yaml_serde::to_string(&git_sync_resources.git_sync_containers.get(1)).unwrap() ); assert_eq!( @@ -820,7 +820,7 @@ volumeMounts: - mountPath: /mnt/extra-volume name: extra-volume "#, - serde_yaml::to_string(&git_sync_resources.git_sync_containers.get(2)).unwrap() + yaml_serde::to_string(&git_sync_resources.git_sync_containers.get(2)).unwrap() ); assert_eq!(3, git_sync_resources.git_sync_init_containers.len()); @@ -859,7 +859,7 @@ volumeMounts: - mountPath: /mnt/extra-volume name: extra-volume ", - serde_yaml::to_string(&git_sync_resources.git_sync_init_containers.first()).unwrap() + yaml_serde::to_string(&git_sync_resources.git_sync_init_containers.first()).unwrap() ); assert_eq!( @@ -901,7 +901,7 @@ volumeMounts: - mountPath: /mnt/extra-volume name: extra-volume ", - serde_yaml::to_string(&git_sync_resources.git_sync_init_containers.get(1)).unwrap() + yaml_serde::to_string(&git_sync_resources.git_sync_init_containers.get(1)).unwrap() ); assert_eq!( @@ -938,7 +938,7 @@ volumeMounts: - mountPath: /mnt/extra-volume name: extra-volume ", - serde_yaml::to_string(&git_sync_resources.git_sync_init_containers.get(2)).unwrap() + yaml_serde::to_string(&git_sync_resources.git_sync_init_containers.get(2)).unwrap() ); assert_eq!(3, git_sync_resources.git_content_volumes.len()); @@ -947,21 +947,21 @@ volumeMounts: "emptyDir: {} name: content-from-git-0 ", - serde_yaml::to_string(&git_sync_resources.git_content_volumes.first()).unwrap() + yaml_serde::to_string(&git_sync_resources.git_content_volumes.first()).unwrap() ); assert_eq!( "emptyDir: {} name: content-from-git-1 ", - serde_yaml::to_string(&git_sync_resources.git_content_volumes.get(1)).unwrap() + yaml_serde::to_string(&git_sync_resources.git_content_volumes.get(1)).unwrap() ); assert_eq!( "emptyDir: {} name: content-from-git-2 ", - serde_yaml::to_string(&git_sync_resources.git_content_volumes.get(2)).unwrap() + yaml_serde::to_string(&git_sync_resources.git_content_volumes.get(2)).unwrap() ); assert_eq!(3, git_sync_resources.git_content_volume_mounts.len()); @@ -970,21 +970,21 @@ name: content-from-git-2 "mountPath: /stackable/app/git-0 name: content-from-git-0 ", - serde_yaml::to_string(&git_sync_resources.git_content_volume_mounts.first()).unwrap() + yaml_serde::to_string(&git_sync_resources.git_content_volume_mounts.first()).unwrap() ); assert_eq!( "mountPath: /stackable/app/git-1 name: content-from-git-1 ", - serde_yaml::to_string(&git_sync_resources.git_content_volume_mounts.get(1)).unwrap() + yaml_serde::to_string(&git_sync_resources.git_content_volume_mounts.get(1)).unwrap() ); assert_eq!( "mountPath: /stackable/app/git-2 name: content-from-git-2 ", - serde_yaml::to_string(&git_sync_resources.git_content_volume_mounts.get(2)).unwrap() + yaml_serde::to_string(&git_sync_resources.git_content_volume_mounts.get(2)).unwrap() ); assert_eq!(3, git_sync_resources.git_content_folders.len()); @@ -1136,7 +1136,7 @@ volumeMounts: - mountPath: /stackable/gitssh-0 name: ssh-keys-info-0 "#, - serde_yaml::to_string(&git_sync_resources.git_sync_containers.first()).unwrap() + yaml_serde::to_string(&git_sync_resources.git_sync_containers.first()).unwrap() ); assert_eq!(1, git_sync_resources.git_sync_init_containers.len()); @@ -1179,7 +1179,7 @@ volumeMounts: - mountPath: /stackable/gitssh-0 name: ssh-keys-info-0 ", - serde_yaml::to_string(&git_sync_resources.git_sync_init_containers.first()).unwrap() + yaml_serde::to_string(&git_sync_resources.git_sync_init_containers.first()).unwrap() ); assert_eq!(1, git_sync_resources.git_content_volumes.len()); @@ -1188,7 +1188,7 @@ volumeMounts: "emptyDir: {} name: content-from-git-0 ", - serde_yaml::to_string(&git_sync_resources.git_content_volumes.first()).unwrap() + yaml_serde::to_string(&git_sync_resources.git_content_volumes.first()).unwrap() ); assert_eq!(1, git_sync_resources.git_content_volume_mounts.len()); @@ -1197,7 +1197,7 @@ name: content-from-git-0 "mountPath: /stackable/app/git-0 name: content-from-git-0 ", - serde_yaml::to_string(&git_sync_resources.git_content_volume_mounts.first()).unwrap() + yaml_serde::to_string(&git_sync_resources.git_content_volume_mounts.first()).unwrap() ); assert_eq!(1, git_sync_resources.git_content_folders.len()); @@ -1218,7 +1218,7 @@ secret: optional: false secretName: git-sync-ssh ", - serde_yaml::to_string(&git_sync_resources.git_ssh_volumes.first()).unwrap() + yaml_serde::to_string(&git_sync_resources.git_ssh_volumes.first()).unwrap() ); } @@ -1342,7 +1342,7 @@ volumeMounts: - mountPath: /stackable/gitca-0 name: ca-cert-0 "#, - serde_yaml::to_string(&git_sync_resources.git_sync_containers.first()).unwrap() + yaml_serde::to_string(&git_sync_resources.git_sync_containers.first()).unwrap() ); assert_eq!(1, git_sync_resources.git_sync_init_containers.len()); @@ -1381,7 +1381,7 @@ volumeMounts: - mountPath: /stackable/gitca-0 name: ca-cert-0 ", - serde_yaml::to_string(&git_sync_resources.git_sync_init_containers.first()).unwrap() + yaml_serde::to_string(&git_sync_resources.git_sync_init_containers.first()).unwrap() ); assert_eq!(1, git_sync_resources.git_content_volumes.len()); @@ -1390,7 +1390,7 @@ volumeMounts: "emptyDir: {} name: content-from-git-0 ", - serde_yaml::to_string(&git_sync_resources.git_content_volumes.first()).unwrap() + yaml_serde::to_string(&git_sync_resources.git_content_volumes.first()).unwrap() ); assert_eq!(1, git_sync_resources.git_content_volume_mounts.len()); @@ -1399,7 +1399,7 @@ name: content-from-git-0 "mountPath: /stackable/app/git-0 name: content-from-git-0 ", - serde_yaml::to_string(&git_sync_resources.git_content_volume_mounts.first()).unwrap() + yaml_serde::to_string(&git_sync_resources.git_content_volume_mounts.first()).unwrap() ); assert_eq!(1, git_sync_resources.git_content_folders.len()); @@ -1430,7 +1430,7 @@ name: content-from-git-0 storageClassName: secrets.stackable.tech name: ca-cert-0 ", - serde_yaml::to_string(&git_sync_resources.git_ca_cert_volumes.first()).unwrap() + yaml_serde::to_string(&git_sync_resources.git_ca_cert_volumes.first()).unwrap() ); } diff --git a/crates/stackable-operator/src/crd/listener/listeners/v1alpha1_impl.rs b/crates/stackable-operator/src/crd/listener/listeners/v1alpha1_impl.rs index 756403292..09ff0dffb 100644 --- a/crates/stackable-operator/src/crd/listener/listeners/v1alpha1_impl.rs +++ b/crates/stackable-operator/src/crd/listener/listeners/v1alpha1_impl.rs @@ -97,7 +97,7 @@ mod tests { #[test] fn deep_merge_listener() { - let mut base: ListenerSpec = serde_yaml::from_str(indoc! {" + let mut base: ListenerSpec = yaml_serde::from_str(indoc! {" className: my-listener-class extraPodSelectorLabels: foo: bar @@ -112,7 +112,7 @@ mod tests { "}) .expect("test YAML is valid"); - let merge: ListenerSpec = serde_yaml::from_str(indoc! {" + let merge: ListenerSpec = yaml_serde::from_str(indoc! {" className: custom-listener-class extraPodSelectorLabels: foo: overridden @@ -125,7 +125,7 @@ mod tests { .expect("test YAML is valid"); base.merge_from(merge); - let expected: ListenerSpec = serde_yaml::from_str(indoc! {" + let expected: ListenerSpec = yaml_serde::from_str(indoc! {" className: custom-listener-class extraPodSelectorLabels: foo: overridden diff --git a/crates/stackable-operator/src/database_connections/databases/postgresql.rs b/crates/stackable-operator/src/database_connections/databases/postgresql.rs index d0bc6bbb2..3fc96b6be 100644 --- a/crates/stackable-operator/src/database_connections/databases/postgresql.rs +++ b/crates/stackable-operator/src/database_connections/databases/postgresql.rs @@ -170,7 +170,7 @@ mod tests { #[test] fn test_minimal_example() { - let postgres_connection: PostgresqlConnection = serde_yaml::from_str( + let postgres_connection: PostgresqlConnection = yaml_serde::from_str( " host: airflow-postgresql database: airflow @@ -218,7 +218,7 @@ mod tests { #[test] fn test_parameters() { - let postgres_connection: PostgresqlConnection = serde_yaml::from_str( + let postgres_connection: PostgresqlConnection = yaml_serde::from_str( " host: my-airflow.default.svc.cluster.local database: my_database diff --git a/crates/stackable-operator/src/database_connections/databases/redis.rs b/crates/stackable-operator/src/database_connections/databases/redis.rs index be6507e97..9be069bcc 100644 --- a/crates/stackable-operator/src/database_connections/databases/redis.rs +++ b/crates/stackable-operator/src/database_connections/databases/redis.rs @@ -87,7 +87,7 @@ mod tests { #[test] fn test_minimal_example() { - let redis_connection: RedisConnection = serde_yaml::from_str( + let redis_connection: RedisConnection = yaml_serde::from_str( " host: my-redis port: 42 diff --git a/crates/stackable-operator/src/deep_merger/mod.rs b/crates/stackable-operator/src/deep_merger/mod.rs index 3863bcb02..0ef8f2b5f 100644 --- a/crates/stackable-operator/src/deep_merger/mod.rs +++ b/crates/stackable-operator/src/deep_merger/mod.rs @@ -93,9 +93,9 @@ mod tests { use super::*; - /// Using [`serde_yaml`] to generate the test data + /// Using [`yaml_serde`] to generate the test data fn generate_service_account() -> ServiceAccount { - serde_yaml::from_str(indoc! {" + yaml_serde::from_str(indoc! {" apiVersion: v1 kind: ServiceAccount metadata: @@ -172,7 +172,7 @@ mod tests { fn service_account_merged() { let mut sa = generate_service_account(); - let object_overrides: ObjectOverrides = serde_yaml::from_str(indoc! {" + let object_overrides: ObjectOverrides = yaml_serde::from_str(indoc! {" - apiVersion: v1 kind: ServiceAccount metadata: @@ -194,7 +194,7 @@ mod tests { #[test] fn service_account_not_merged_as_different_name() { let mut sa = generate_service_account(); - let object_overrides: ObjectOverrides = serde_yaml::from_str(indoc! {" + let object_overrides: ObjectOverrides = yaml_serde::from_str(indoc! {" - apiVersion: v1 kind: ServiceAccount metadata: @@ -216,7 +216,7 @@ mod tests { #[test] fn service_account_not_merged_as_different_namespace() { let mut sa = generate_service_account(); - let object_overrides: ObjectOverrides = serde_yaml::from_str(indoc! {" + let object_overrides: ObjectOverrides = yaml_serde::from_str(indoc! {" - apiVersion: v1 kind: ServiceAccount metadata: @@ -238,7 +238,7 @@ mod tests { #[test] fn service_account_not_merged_as_namespace_missing() { let mut sa = generate_service_account(); - let object_overrides: ObjectOverrides = serde_yaml::from_str(indoc! {" + let object_overrides: ObjectOverrides = yaml_serde::from_str(indoc! {" - apiVersion: v1 kind: ServiceAccount metadata: @@ -261,7 +261,7 @@ mod tests { #[test] fn unmatched_overrides_are_reported() { let mut sa = generate_service_account(); - let object_overrides: ObjectOverrides = serde_yaml::from_str(indoc! {" + let object_overrides: ObjectOverrides = yaml_serde::from_str(indoc! {" - apiVersion: v1 kind: ServiceAccount metadata: @@ -295,7 +295,7 @@ mod tests { #[test] fn service_account_not_merged_as_different_api_version() { let mut sa = generate_service_account(); - let object_overrides: ObjectOverrides = serde_yaml::from_str(indoc! {" + let object_overrides: ObjectOverrides = yaml_serde::from_str(indoc! {" - apiVersion: v42 # apiVersion mismatch kind: ServiceAccount metadata: @@ -317,7 +317,7 @@ mod tests { #[test] fn statefulset_merged_multiple_merges() { let mut sts = generate_stateful_set(); - let object_overrides: ObjectOverrides = serde_yaml::from_str(indoc! {" + let object_overrides: ObjectOverrides = yaml_serde::from_str(indoc! {" - apiVersion: v1 kind: ServiceAccount metadata: @@ -384,7 +384,7 @@ mod tests { #[test] fn configmap_merged() { - let mut cm: ConfigMap = serde_yaml::from_str(indoc! {" + let mut cm: ConfigMap = yaml_serde::from_str(indoc! {" apiVersion: v1 kind: ConfigMap metadata: @@ -398,7 +398,7 @@ mod tests { =info "}) .expect("test YAML is valid"); - let object_overrides: ObjectOverrides = serde_yaml::from_str(indoc! {" + let object_overrides: ObjectOverrides = yaml_serde::from_str(indoc! {" - apiVersion: v1 kind: ConfigMap metadata: @@ -442,7 +442,7 @@ mod tests { #[test] fn secret_merged() { - let mut secret: Secret = serde_yaml::from_str(indoc! {" + let mut secret: Secret = yaml_serde::from_str(indoc! {" apiVersion: v1 kind: Secret metadata: @@ -453,7 +453,7 @@ mod tests { raw: YmFyCg== # echo bar | base64 "}) .expect("test YAML is valid"); - let object_overrides: ObjectOverrides = serde_yaml::from_str(indoc! {" + let object_overrides: ObjectOverrides = yaml_serde::from_str(indoc! {" - apiVersion: v1 kind: Secret metadata: @@ -489,7 +489,7 @@ mod tests { #[test] fn cluster_scoped_object_merged() { - let mut storage_class: StorageClass = serde_yaml::from_str(indoc! {" + let mut storage_class: StorageClass = yaml_serde::from_str(indoc! {" apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: @@ -501,7 +501,7 @@ mod tests { provisioner: csi-driver.example-vendor.example "}) .expect("test YAML is valid"); - let object_overrides: ObjectOverrides = serde_yaml::from_str(indoc! {" + let object_overrides: ObjectOverrides = yaml_serde::from_str(indoc! {" - apiVersion: v1 kind: ServiceAccount - apiVersion: storage.k8s.io/v1 diff --git a/crates/stackable-operator/src/helm/mod.rs b/crates/stackable-operator/src/helm/mod.rs index 6bf975cdf..0e303361c 100644 --- a/crates/stackable-operator/src/helm/mod.rs +++ b/crates/stackable-operator/src/helm/mod.rs @@ -25,7 +25,7 @@ pub struct DynamicValues { /// All other keys and values. #[serde(flatten)] - pub data: serde_yaml::Value, + pub data: yaml_serde::Value, } impl DynamicValues { @@ -85,14 +85,14 @@ mod tests { #[rstest] fn deserialize(#[files("fixtures/helm/input-*.yaml")] path: PathBuf) { let contents = std::fs::read_to_string(path).unwrap(); - let values: DynamicValues = serde_yaml::from_str(&contents).unwrap(); + let values: DynamicValues = yaml_serde::from_str(&contents).unwrap(); assert_eq!(values.labels().len(), 2); } #[rstest] fn serialize(#[files("fixtures/helm/input-required.yaml")] input: PathBuf) { let contents = std::fs::read_to_string(input).unwrap(); - let mut values: DynamicValues = serde_yaml::from_str(&contents).unwrap(); + let mut values: DynamicValues = yaml_serde::from_str(&contents).unwrap(); values .labels_mut() diff --git a/crates/stackable-operator/src/memory.rs b/crates/stackable-operator/src/memory.rs index 49d198a9a..53cfb94b5 100644 --- a/crates/stackable-operator/src/memory.rs +++ b/crates/stackable-operator/src/memory.rs @@ -687,7 +687,7 @@ mod tests { } let memory = Memory { memory }; - let output = serde_yaml::to_string(&memory).unwrap(); + let output = yaml_serde::to_string(&memory).unwrap(); assert_eq!(output, expected); } @@ -703,7 +703,7 @@ mod tests { memory: MemoryQuantity, } - let memory: Memory = serde_yaml::from_str(input).unwrap(); + let memory: Memory = yaml_serde::from_str(input).unwrap(); assert_eq!(memory.memory, expected); } } diff --git a/crates/stackable-operator/src/role_utils.rs b/crates/stackable-operator/src/role_utils.rs index 13b692e06..c8893c79f 100644 --- a/crates/stackable-operator/src/role_utils.rs +++ b/crates/stackable-operator/src/role_utils.rs @@ -561,7 +561,7 @@ mod tests { ); let entire_role: Role<(), EmptyConfigOverrides, GenericRoleConfig, JavaCommonConfig> = - serde_yaml::from_str(" + yaml_serde::from_str(" # Let's say we want to set some additional HTTP Proxy and IPv4 settings # And we don't like the garbage collector for some reason... jvmArgumentOverrides: @@ -623,7 +623,7 @@ mod tests { JvmArgumentOverrides::new_with_only_additions(["-Xms1m".to_owned()].into()); let entire_role: Role<(), EmptyConfigOverrides, GenericRoleConfig, JavaCommonConfig> = - serde_yaml::from_str( + yaml_serde::from_str( " jvmArgumentOverrides: add: diff --git a/crates/stackable-operator/src/test_utils.rs b/crates/stackable-operator/src/test_utils.rs index 7c98a45ea..506add952 100644 --- a/crates/stackable-operator/src/test_utils.rs +++ b/crates/stackable-operator/src/test_utils.rs @@ -1,17 +1,17 @@ -/// Please use only in tests, as we have non-ideal error handling in case serde_yaml produced +/// Please use only in tests, as we have non-ideal error handling in case yaml_serde produced /// non-utf8 output. -pub fn serialize_to_yaml_with_singleton_map(input: &S) -> Result +pub fn serialize_to_yaml_with_singleton_map(input: &S) -> Result where S: serde::Serialize, { use serde::ser::Error as _; let mut buffer = Vec::new(); - let mut serializer = serde_yaml::Serializer::new(&mut buffer); - serde_yaml::with::singleton_map_recursive::serialize(input, &mut serializer)?; + let mut serializer = yaml_serde::Serializer::new(&mut buffer); + yaml_serde::with::singleton_map_recursive::serialize(input, &mut serializer)?; String::from_utf8(buffer).map_err(|err| { - serde_yaml::Error::custom(format!( - "For *some* reason, serde_yaml produced non-utf8 output: {err}" + yaml_serde::Error::custom(format!( + "For *some* reason, yaml_serde produced non-utf8 output: {err}" )) }) } diff --git a/crates/stackable-operator/src/utils/crds.rs b/crates/stackable-operator/src/utils/crds.rs index fa0f8a30d..18d6c08cf 100644 --- a/crates/stackable-operator/src/utils/crds.rs +++ b/crates/stackable-operator/src/utils/crds.rs @@ -52,7 +52,7 @@ mod tests { effect: "NoSchedule" "#; - serde_yaml::from_str::(input).expect("Failed to parse valid podOverride"); + yaml_serde::from_str::(input).expect("Failed to parse valid podOverride"); } #[test] @@ -64,7 +64,7 @@ mod tests { my-custom-label: super-important-label "; - serde_yaml::from_str::(input).expect("Failed to parse valid podOverride"); + yaml_serde::from_str::(input).expect("Failed to parse valid podOverride"); } #[test] @@ -80,7 +80,7 @@ mod tests { - "/dev/null" "#; - serde_yaml::from_str::(input).expect("Failed to parse valid podOverride"); + yaml_serde::from_str::(input).expect("Failed to parse valid podOverride"); } #[test] @@ -104,7 +104,7 @@ mod tests { claimName: nifi-jar "#; - serde_yaml::from_str::(input).expect("Failed to parse valid podOverride"); + yaml_serde::from_str::(input).expect("Failed to parse valid podOverride"); } #[test] @@ -118,6 +118,6 @@ mod tests { // FIXME: Ideally we would require the names of the containers to be set. We had users using podOverrides // without setting the name of the container and wondering why it didn't work. - serde_yaml::from_str::(input).expect("Failed to parse valid podOverride"); + yaml_serde::from_str::(input).expect("Failed to parse valid podOverride"); } } diff --git a/crates/stackable-operator/src/utils/mod.rs b/crates/stackable-operator/src/utils/mod.rs index dc94641db..2c2b606a9 100644 --- a/crates/stackable-operator/src/utils/mod.rs +++ b/crates/stackable-operator/src/utils/mod.rs @@ -30,10 +30,10 @@ pub(crate) fn format_full_controller_name(operator: &str, controller: &str) -> S format!("{operator}_{controller}") } -pub fn yaml_from_str_singleton_map<'a, D>(input: &'a str) -> Result +pub fn yaml_from_str_singleton_map<'a, D>(input: &'a str) -> Result where D: serde::Deserialize<'a>, { - let deserializer = serde_yaml::Deserializer::from_str(input); - serde_yaml::with::singleton_map_recursive::deserialize(deserializer) + let deserializer = yaml_serde::Deserializer::from_str(input); + yaml_serde::with::singleton_map_recursive::deserialize(deserializer) } diff --git a/crates/stackable-operator/src/v2/jvm_argument_overrides.rs b/crates/stackable-operator/src/v2/jvm_argument_overrides.rs index 821a9d7e9..34f57e6d1 100644 --- a/crates/stackable-operator/src/v2/jvm_argument_overrides.rs +++ b/crates/stackable-operator/src/v2/jvm_argument_overrides.rs @@ -162,7 +162,7 @@ mod tests { EmptyConfigOverrides, GenericRoleConfig, JavaCommonConfig, - > = serde_yaml::from_str( + > = yaml_serde::from_str( " # Let's say we want to set some additional HTTP Proxy and IPv4 settings # And we don't like the garbage collector for some reason... @@ -227,7 +227,7 @@ mod tests { EmptyConfigOverrides, GenericRoleConfig, JavaCommonConfig, - > = serde_yaml::from_str( + > = yaml_serde::from_str( " jvmArgumentOverrides: add: diff --git a/crates/stackable-shared/CHANGELOG.md b/crates/stackable-shared/CHANGELOG.md index 37cef226e..22f8b62c4 100644 --- a/crates/stackable-shared/CHANGELOG.md +++ b/crates/stackable-shared/CHANGELOG.md @@ -4,6 +4,12 @@ All notable changes to this project will be documented in this file. ## [Unreleased] +### Changed + +- Replace serde_yaml with yaml_serde ([#1298]). + +[#1298]: https://github.com/stackabletech/operator-rs/pull/1298 + ## [0.1.2] - 2026-07-06 Note: There are only dependency bumps in this release. diff --git a/crates/stackable-shared/Cargo.toml b/crates/stackable-shared/Cargo.toml index 03c36413f..ad4f94c24 100644 --- a/crates/stackable-shared/Cargo.toml +++ b/crates/stackable-shared/Cargo.toml @@ -20,7 +20,7 @@ kube.workspace = true schemars.workspace = true semver.workspace = true serde.workspace = true -serde_yaml.workspace = true +yaml_serde.workspace = true snafu.workspace = true strum.workspace = true time = { workspace = true, optional = true } diff --git a/crates/stackable-shared/src/time/duration.rs b/crates/stackable-shared/src/time/duration.rs index d0683c765..0cdae9920 100644 --- a/crates/stackable-shared/src/time/duration.rs +++ b/crates/stackable-shared/src/time/duration.rs @@ -515,7 +515,7 @@ mod test { dur: Duration, } - let s: S = serde_yaml::from_str("dur: 15d2m2s").expect("valid duration must deserialize"); + let s: S = yaml_serde::from_str("dur: 15d2m2s").expect("valid duration must deserialize"); assert_eq!(s.dur.as_secs(), 1_296_122); } @@ -533,7 +533,7 @@ mod test { }; assert_eq!( - serde_yaml::to_string(&s).expect("valid duration must serialize"), + yaml_serde::to_string(&s).expect("valid duration must serialize"), "dur: 15d2m2s\n" ); } diff --git a/crates/stackable-shared/src/yaml.rs b/crates/stackable-shared/src/yaml.rs index 4199cec62..8c9c571c4 100644 --- a/crates/stackable-shared/src/yaml.rs +++ b/crates/stackable-shared/src/yaml.rs @@ -13,7 +13,7 @@ type Result = std::result::Result; #[derive(Debug, Snafu)] pub enum Error { #[snafu(display("failed to serialize YAML"))] - SerializeYaml { source: serde_yaml::Error }, + SerializeYaml { source: yaml_serde::Error }, #[snafu(display("failed to write YAML document separator"))] WriteDocumentSeparator { source: std::io::Error }, @@ -150,10 +150,10 @@ where .context(WriteDocumentSeparatorSnafu)?; } - let mut serializer = serde_yaml::Serializer::new(writer); + let mut serializer = yaml_serde::Serializer::new(writer); if options.singleton_map { - serde_yaml::with::singleton_map_recursive::serialize(value, &mut serializer) + yaml_serde::with::singleton_map_recursive::serialize(value, &mut serializer) .context(SerializeYamlSnafu)?; } else { value diff --git a/crates/stackable-versioned-macros/Cargo.toml b/crates/stackable-versioned-macros/Cargo.toml index 77ee94393..5c2c10f67 100644 --- a/crates/stackable-versioned-macros/Cargo.toml +++ b/crates/stackable-versioned-macros/Cargo.toml @@ -19,7 +19,7 @@ development = [ "k8s-openapi", "kube", "schemars", - "serde_yaml", + "yaml_serde", "stackable-versioned", "tracing", ] @@ -51,7 +51,7 @@ rstest.workspace = true schemars.workspace = true serde.workspace = true serde_json.workspace = true -serde_yaml.workspace = true +yaml_serde.workspace = true snafu.workspace = true tracing.workspace = true trybuild.workspace = true diff --git a/crates/stackable-versioned-macros/src/attrs/module.rs b/crates/stackable-versioned-macros/src/attrs/module.rs index 7327d55ee..01a425b7b 100644 --- a/crates/stackable-versioned-macros/src/attrs/module.rs +++ b/crates/stackable-versioned-macros/src/attrs/module.rs @@ -118,8 +118,8 @@ pub struct CrateArguments { #[darling(default = default_serde_json)] pub serde_json: Override, - #[darling(default = default_serde_yaml)] - pub serde_yaml: Override, + #[darling(default = default_yaml_serde)] + pub yaml_serde: Override, #[darling(default = default_versioned)] pub versioned: Override, @@ -135,7 +135,7 @@ impl Default for CrateArguments { schemars: default_schemars(), serde: default_serde(), serde_json: default_serde_json(), - serde_yaml: default_serde_yaml(), + yaml_serde: default_yaml_serde(), versioned: default_versioned(), } } @@ -189,8 +189,8 @@ fn default_serde_json() -> Override { Override::Default(parse_quote! { ::serde_json }) } -fn default_serde_yaml() -> Override { - Override::Default(parse_quote! { ::serde_yaml }) +fn default_yaml_serde() -> Override { + Override::Default(parse_quote! { ::yaml_serde }) } fn default_versioned() -> Override { diff --git a/crates/stackable-versioned-macros/src/codegen/container/struct/conversion.rs b/crates/stackable-versioned-macros/src/codegen/container/struct/conversion.rs index 92bb09c52..9c838ef65 100644 --- a/crates/stackable-versioned-macros/src/codegen/container/struct/conversion.rs +++ b/crates/stackable-versioned-macros/src/codegen/container/struct/conversion.rs @@ -263,7 +263,7 @@ impl Struct { let match_arms: TokenStream = self .fields .iter() - .filter_map(|f| f.generate_for_status_removal(direction, next_version)) + .filter_map(|f| f.generate_for_status_removal(direction, next_version, mod_gen_ctx)) .collect(); match direction { diff --git a/crates/stackable-versioned-macros/src/codegen/item/field.rs b/crates/stackable-versioned-macros/src/codegen/item/field.rs index 2b35f984c..38c2010a7 100644 --- a/crates/stackable-versioned-macros/src/codegen/item/field.rs +++ b/crates/stackable-versioned-macros/src/codegen/item/field.rs @@ -315,7 +315,7 @@ impl VersionedField { Direction::Downgrade => { let next_change = changes.get_expect(&next_version.inner); - let serde_yaml_path = &*mod_gen_ctx.crates.serde_yaml; + let yaml_serde_path = &*mod_gen_ctx.crates.yaml_serde; let versioned_path = &*mod_gen_ctx.crates.versioned; match next_change { @@ -327,7 +327,7 @@ impl VersionedField { Some(quote! { upgrades.push(#versioned_path::ChangedValue { json_path: #json_path_ident, - value: #serde_yaml_path::to_value(&#from_struct_ident.#ident).unwrap(), + value: #yaml_serde_path::to_value(&#from_struct_ident.#ident).unwrap(), }); }) } @@ -343,11 +343,14 @@ impl VersionedField { &self, direction: Direction, next_version: &VersionDefinition, + mod_gen_ctx: ModuleGenerationContext<'_>, ) -> Option { // If there are no changes for this field, there is also no need to generate a match arm // for applying a tracked value. let changes = self.changes.as_ref()?; + let yaml_serde_path = &*mod_gen_ctx.crates.yaml_serde; + match direction { Direction::Upgrade => { let next_change = changes.get_expect(&next_version.inner); @@ -360,7 +363,7 @@ impl VersionedField { Some(quote! { json_path if json_path == #json_path_ident => { - spec.#ident = serde_yaml::from_value(value).unwrap(); + spec.#ident = #yaml_serde_path::from_value(value).unwrap(); }, }) } diff --git a/crates/stackable-versioned-macros/src/lib.rs b/crates/stackable-versioned-macros/src/lib.rs index 6813c61d2..200e07308 100644 --- a/crates/stackable-versioned-macros/src/lib.rs +++ b/crates/stackable-versioned-macros/src/lib.rs @@ -751,7 +751,7 @@ mod utils; /// /// # fn main() { /// let merged_crd = Foo::merged_crd(FooVersion::V1Beta1).unwrap(); -/// println!("{yaml}", yaml = serde_yaml::to_string(&merged_crd).unwrap()); +/// println!("{yaml}", yaml = yaml_serde::to_string(&merged_crd).unwrap()); /// # } /// ``` /// diff --git a/crates/stackable-versioned-macros/tests/snapshots/stackable_versioned_macros__snapshots__pass@conversion_tracking.rs.snap b/crates/stackable-versioned-macros/tests/snapshots/stackable_versioned_macros__snapshots__pass@conversion_tracking.rs.snap index 4462b74b3..bfd6a7486 100644 --- a/crates/stackable-versioned-macros/tests/snapshots/stackable_versioned_macros__snapshots__pass@conversion_tracking.rs.snap +++ b/crates/stackable-versioned-macros/tests/snapshots/stackable_versioned_macros__snapshots__pass@conversion_tracking.rs.snap @@ -68,7 +68,7 @@ where for ::stackable_versioned::ChangedValue { json_path, value } in upgrades { match json_path { json_path if json_path == __sv_bah_path => { - spec.bah = serde_yaml::from_value(value).unwrap(); + spec.bah = ::yaml_serde::from_value(value).unwrap(); } _ => unreachable!(), } @@ -97,7 +97,7 @@ where upgrades .push(::stackable_versioned::ChangedValue { json_path: __sv_bah_path, - value: ::serde_yaml::to_value(&__sv_foospec.bah).unwrap(), + value: ::yaml_serde::to_value(&__sv_foospec.bah).unwrap(), }); let mut spec = Self { baz: __sv_foospec.baz.into(), diff --git a/crates/stackable-versioned-macros/tests/snapshots/stackable_versioned_macros__snapshots__pass@conversion_tracking_hints.rs.snap b/crates/stackable-versioned-macros/tests/snapshots/stackable_versioned_macros__snapshots__pass@conversion_tracking_hints.rs.snap index 96a70d907..3dbe2f76c 100644 --- a/crates/stackable-versioned-macros/tests/snapshots/stackable_versioned_macros__snapshots__pass@conversion_tracking_hints.rs.snap +++ b/crates/stackable-versioned-macros/tests/snapshots/stackable_versioned_macros__snapshots__pass@conversion_tracking_hints.rs.snap @@ -64,7 +64,7 @@ where for ::stackable_versioned::ChangedValue { json_path, value } in upgrades { match json_path { json_path if json_path == __sv_baz_baz_path => { - spec.baz_baz = serde_yaml::from_value(value).unwrap(); + spec.baz_baz = ::yaml_serde::from_value(value).unwrap(); } _ => unreachable!(), } @@ -89,7 +89,7 @@ where upgrades .push(::stackable_versioned::ChangedValue { json_path: __sv_baz_baz_path, - value: ::serde_yaml::to_value(&__sv_bar.baz_baz).unwrap(), + value: ::yaml_serde::to_value(&__sv_bar.baz_baz).unwrap(), }); let mut spec = Self { bar_bar: __sv_bar.bar_bar.into(), diff --git a/crates/stackable-versioned-macros/tests/snapshots/stackable_versioned_macros__snapshots__pass@docs.rs.snap b/crates/stackable-versioned-macros/tests/snapshots/stackable_versioned_macros__snapshots__pass@docs.rs.snap index e79b8d287..0fa80fc34 100644 --- a/crates/stackable-versioned-macros/tests/snapshots/stackable_versioned_macros__snapshots__pass@docs.rs.snap +++ b/crates/stackable-versioned-macros/tests/snapshots/stackable_versioned_macros__snapshots__pass@docs.rs.snap @@ -51,7 +51,7 @@ where for ::stackable_versioned::ChangedValue { json_path, value } in upgrades { match json_path { json_path if json_path == __sv_baz_path => { - spec.baz = serde_yaml::from_value(value).unwrap(); + spec.baz = ::yaml_serde::from_value(value).unwrap(); } _ => unreachable!(), } @@ -77,7 +77,7 @@ where upgrades .push(::stackable_versioned::ChangedValue { json_path: __sv_baz_path, - value: ::serde_yaml::to_value(&__sv_foo.baz).unwrap(), + value: ::yaml_serde::to_value(&__sv_foo.baz).unwrap(), }); let mut spec = Self { foo: __sv_foo.foo.into(), diff --git a/crates/stackable-versioned/CHANGELOG.md b/crates/stackable-versioned/CHANGELOG.md index 4dba782cd..f73d58487 100644 --- a/crates/stackable-versioned/CHANGELOG.md +++ b/crates/stackable-versioned/CHANGELOG.md @@ -4,6 +4,15 @@ All notable changes to this project will be documented in this file. ## [Unreleased] +### Changed + +- BREAKING: Replace serde_yaml with yaml_serde ([#1298]). + The `#[versioned(crates(serde_yaml))]` argument got renamed to `yaml_serde`. Users of this argument need to at least + adjust the name. They can keep using `serde_yaml` (with an import alias), or switch to `yaml_serde`, which is a + drop-in replacement. + +[#1298]: https://github.com/stackabletech/operator-rs/pull/1298 + ## [0.12.0] - 2026-10-12 ### Added diff --git a/crates/stackable-versioned/Cargo.toml b/crates/stackable-versioned/Cargo.toml index 5118e5d9d..fccda1a66 100644 --- a/crates/stackable-versioned/Cargo.toml +++ b/crates/stackable-versioned/Cargo.toml @@ -17,7 +17,7 @@ kube.workspace = true schemars.workspace = true serde.workspace = true serde_json.workspace = true -serde_yaml.workspace = true +yaml_serde.workspace = true snafu.workspace = true [dev-dependencies] diff --git a/crates/stackable-versioned/src/lib.rs b/crates/stackable-versioned/src/lib.rs index 6aa4bddc3..ed9ee1689 100644 --- a/crates/stackable-versioned/src/lib.rs +++ b/crates/stackable-versioned/src/lib.rs @@ -114,7 +114,7 @@ pub struct ChangedValue { /// The value to be used when upgrading or downgrading the custom resource. #[schemars(schema_with = "raw_object_schema")] - pub value: serde_yaml::Value, + pub value: yaml_serde::Value, } // TODO (@Techassi): Think about where this should live. Basically this already exists in diff --git a/deny.toml b/deny.toml index cc96f58e1..8ec7e4528 100644 --- a/deny.toml +++ b/deny.toml @@ -38,19 +38,6 @@ ignore = [ # # This can only be removed again if we decide to use a different crate. "RUSTSEC-2024-0436", - - # https://rustsec.org/advisories/RUSTSEC-2024-0449 - # The https://github.com/dtolnay/unsafe-libyaml repository was archived by - # its owner on 2024-03-25 and is read-only. The last release is 0.2.11 - # (March 2024). - # - # `unsafe-libyaml` is a machine translation of libyaml's C code into unsafe - # Rust (c2rust). Bugs found in it will not be fixed upstream. It is used by - # `serde_yaml` (itself deprecated) and by forks such as `serde_yaml_ng`. - # - # This can only be removed again once we decide which alternative YAML crate we want to migrate - # to. Currently, we favor `serde-saphyr`. - "RUSTSEC-2024-0449", ] [bans]