From 475dc72f5eb090b56ee69f22b97f8db2a7270926 Mon Sep 17 00:00:00 2001 From: Techassi Date: Thu, 26 Jun 2025 11:18:56 +0200 Subject: [PATCH 1/6] fix(stackable-versioned): Generate correct match arms for as_str function --- .../src/codegen/container/struct/k8s.rs | 2 +- ...rsioned_macros__snapshot_tests__k8s@basic.rs.snap | 6 +++--- ...__snapshot_tests__k8s@conversion_tracking.rs.snap | 6 +++--- ...cros__snapshot_tests__k8s@crate_overrides.rs.snap | 6 +++--- ...sioned_macros__snapshot_tests__k8s@module.rs.snap | 12 ++++++------ ...cros__snapshot_tests__k8s@module_preserve.rs.snap | 12 ++++++------ ..._macros__snapshot_tests__k8s@renamed_kind.rs.snap | 6 +++--- ...ed_macros__snapshot_tests__k8s@shortnames.rs.snap | 2 +- 8 files changed, 26 insertions(+), 26 deletions(-) diff --git a/crates/stackable-versioned-macros/src/codegen/container/struct/k8s.rs b/crates/stackable-versioned-macros/src/codegen/container/struct/k8s.rs index c9fa59e3a..f24e211b3 100644 --- a/crates/stackable-versioned-macros/src/codegen/container/struct/k8s.rs +++ b/crates/stackable-versioned-macros/src/codegen/container/struct/k8s.rs @@ -280,7 +280,7 @@ impl Struct { impl #enum_ident { pub fn as_version_str(&self) -> &str { match self { - #(#variant_idents => #variant_strings),* + #(#enum_ident::#variant_idents => #variant_strings),* } } diff --git a/crates/stackable-versioned-macros/tests/snapshots/stackable_versioned_macros__snapshot_tests__k8s@basic.rs.snap b/crates/stackable-versioned-macros/tests/snapshots/stackable_versioned_macros__snapshot_tests__k8s@basic.rs.snap index fc3a3f401..fa947d2ef 100644 --- a/crates/stackable-versioned-macros/tests/snapshots/stackable_versioned_macros__snapshot_tests__k8s@basic.rs.snap +++ b/crates/stackable-versioned-macros/tests/snapshots/stackable_versioned_macros__snapshot_tests__k8s@basic.rs.snap @@ -388,9 +388,9 @@ impl ::std::fmt::Display for FooVersion { impl FooVersion { pub fn as_version_str(&self) -> &str { match self { - V1Alpha1 => "v1alpha1", - V1Beta1 => "v1beta1", - V1 => "v1", + FooVersion::V1Alpha1 => "v1alpha1", + FooVersion::V1Beta1 => "v1beta1", + FooVersion::V1 => "v1", } } pub fn as_api_version_str(&self) -> &str { diff --git a/crates/stackable-versioned-macros/tests/snapshots/stackable_versioned_macros__snapshot_tests__k8s@conversion_tracking.rs.snap b/crates/stackable-versioned-macros/tests/snapshots/stackable_versioned_macros__snapshot_tests__k8s@conversion_tracking.rs.snap index dc0969972..8b079c43a 100644 --- a/crates/stackable-versioned-macros/tests/snapshots/stackable_versioned_macros__snapshot_tests__k8s@conversion_tracking.rs.snap +++ b/crates/stackable-versioned-macros/tests/snapshots/stackable_versioned_macros__snapshot_tests__k8s@conversion_tracking.rs.snap @@ -358,9 +358,9 @@ impl ::std::fmt::Display for FooVersion { impl FooVersion { pub fn as_version_str(&self) -> &str { match self { - V1Alpha1 => "v1alpha1", - V1Beta1 => "v1beta1", - V1 => "v1", + FooVersion::V1Alpha1 => "v1alpha1", + FooVersion::V1Beta1 => "v1beta1", + FooVersion::V1 => "v1", } } pub fn as_api_version_str(&self) -> &str { diff --git a/crates/stackable-versioned-macros/tests/snapshots/stackable_versioned_macros__snapshot_tests__k8s@crate_overrides.rs.snap b/crates/stackable-versioned-macros/tests/snapshots/stackable_versioned_macros__snapshot_tests__k8s@crate_overrides.rs.snap index 4a5d94073..290bbb809 100644 --- a/crates/stackable-versioned-macros/tests/snapshots/stackable_versioned_macros__snapshot_tests__k8s@crate_overrides.rs.snap +++ b/crates/stackable-versioned-macros/tests/snapshots/stackable_versioned_macros__snapshot_tests__k8s@crate_overrides.rs.snap @@ -373,9 +373,9 @@ impl ::std::fmt::Display for FooVersion { impl FooVersion { pub fn as_version_str(&self) -> &str { match self { - V1Alpha1 => "v1alpha1", - V1Beta1 => "v1beta1", - V1 => "v1", + FooVersion::V1Alpha1 => "v1alpha1", + FooVersion::V1Beta1 => "v1beta1", + FooVersion::V1 => "v1", } } pub fn as_api_version_str(&self) -> &str { diff --git a/crates/stackable-versioned-macros/tests/snapshots/stackable_versioned_macros__snapshot_tests__k8s@module.rs.snap b/crates/stackable-versioned-macros/tests/snapshots/stackable_versioned_macros__snapshot_tests__k8s@module.rs.snap index 9c3d2a6df..26b78cc83 100644 --- a/crates/stackable-versioned-macros/tests/snapshots/stackable_versioned_macros__snapshot_tests__k8s@module.rs.snap +++ b/crates/stackable-versioned-macros/tests/snapshots/stackable_versioned_macros__snapshot_tests__k8s@module.rs.snap @@ -545,9 +545,9 @@ impl ::std::fmt::Display for FooVersion { impl FooVersion { pub fn as_version_str(&self) -> &str { match self { - V1Alpha1 => "v1alpha1", - V1 => "v1", - V2Alpha1 => "v2alpha1", + FooVersion::V1Alpha1 => "v1alpha1", + FooVersion::V1 => "v1", + FooVersion::V2Alpha1 => "v2alpha1", } } pub fn as_api_version_str(&self) -> &str { @@ -842,9 +842,9 @@ impl ::std::fmt::Display for BarVersion { impl BarVersion { pub fn as_version_str(&self) -> &str { match self { - V1Alpha1 => "v1alpha1", - V1 => "v1", - V2Alpha1 => "v2alpha1", + BarVersion::V1Alpha1 => "v1alpha1", + BarVersion::V1 => "v1", + BarVersion::V2Alpha1 => "v2alpha1", } } pub fn as_api_version_str(&self) -> &str { diff --git a/crates/stackable-versioned-macros/tests/snapshots/stackable_versioned_macros__snapshot_tests__k8s@module_preserve.rs.snap b/crates/stackable-versioned-macros/tests/snapshots/stackable_versioned_macros__snapshot_tests__k8s@module_preserve.rs.snap index 6208b1042..cb886a3f1 100644 --- a/crates/stackable-versioned-macros/tests/snapshots/stackable_versioned_macros__snapshot_tests__k8s@module_preserve.rs.snap +++ b/crates/stackable-versioned-macros/tests/snapshots/stackable_versioned_macros__snapshot_tests__k8s@module_preserve.rs.snap @@ -523,9 +523,9 @@ pub(crate) mod versioned { impl FooVersion { pub fn as_version_str(&self) -> &str { match self { - V1Alpha1 => "v1alpha1", - V1 => "v1", - V2Alpha1 => "v2alpha1", + FooVersion::V1Alpha1 => "v1alpha1", + FooVersion::V1 => "v1", + FooVersion::V2Alpha1 => "v2alpha1", } } pub fn as_api_version_str(&self) -> &str { @@ -815,9 +815,9 @@ pub(crate) mod versioned { impl BarVersion { pub fn as_version_str(&self) -> &str { match self { - V1Alpha1 => "v1alpha1", - V1 => "v1", - V2Alpha1 => "v2alpha1", + BarVersion::V1Alpha1 => "v1alpha1", + BarVersion::V1 => "v1", + BarVersion::V2Alpha1 => "v2alpha1", } } pub fn as_api_version_str(&self) -> &str { diff --git a/crates/stackable-versioned-macros/tests/snapshots/stackable_versioned_macros__snapshot_tests__k8s@renamed_kind.rs.snap b/crates/stackable-versioned-macros/tests/snapshots/stackable_versioned_macros__snapshot_tests__k8s@renamed_kind.rs.snap index e71e3bfd2..34e229c9e 100644 --- a/crates/stackable-versioned-macros/tests/snapshots/stackable_versioned_macros__snapshot_tests__k8s@renamed_kind.rs.snap +++ b/crates/stackable-versioned-macros/tests/snapshots/stackable_versioned_macros__snapshot_tests__k8s@renamed_kind.rs.snap @@ -358,9 +358,9 @@ impl ::std::fmt::Display for FooBarVersion { impl FooBarVersion { pub fn as_version_str(&self) -> &str { match self { - V1Alpha1 => "v1alpha1", - V1Beta1 => "v1beta1", - V1 => "v1", + FooBarVersion::V1Alpha1 => "v1alpha1", + FooBarVersion::V1Beta1 => "v1beta1", + FooBarVersion::V1 => "v1", } } pub fn as_api_version_str(&self) -> &str { diff --git a/crates/stackable-versioned-macros/tests/snapshots/stackable_versioned_macros__snapshot_tests__k8s@shortnames.rs.snap b/crates/stackable-versioned-macros/tests/snapshots/stackable_versioned_macros__snapshot_tests__k8s@shortnames.rs.snap index 111436af9..9e82226d3 100644 --- a/crates/stackable-versioned-macros/tests/snapshots/stackable_versioned_macros__snapshot_tests__k8s@shortnames.rs.snap +++ b/crates/stackable-versioned-macros/tests/snapshots/stackable_versioned_macros__snapshot_tests__k8s@shortnames.rs.snap @@ -189,7 +189,7 @@ impl ::std::fmt::Display for FooVersion { impl FooVersion { pub fn as_version_str(&self) -> &str { match self { - V1Alpha1 => "v1alpha1", + FooVersion::V1Alpha1 => "v1alpha1", } } pub fn as_api_version_str(&self) -> &str { From 8943ff731e06e554479ae537da8d53eaf8cd9456 Mon Sep 17 00:00:00 2001 From: Techassi Date: Thu, 26 Jun 2025 11:32:07 +0200 Subject: [PATCH 2/6] fix(stackable-versioned): Fully qualify variants in other match arms --- .../src/codegen/container/struct/k8s.rs | 4 ++-- ..._macros__snapshot_tests__k8s@basic.rs.snap | 12 +++++----- ...hot_tests__k8s@conversion_tracking.rs.snap | 12 +++++----- ...napshot_tests__k8s@crate_overrides.rs.snap | 12 +++++----- ...macros__snapshot_tests__k8s@module.rs.snap | 24 +++++++++---------- ...napshot_tests__k8s@module_preserve.rs.snap | 24 +++++++++---------- ...__snapshot_tests__k8s@renamed_kind.rs.snap | 12 +++++----- ...os__snapshot_tests__k8s@shortnames.rs.snap | 4 ++-- 8 files changed, 52 insertions(+), 52 deletions(-) diff --git a/crates/stackable-versioned-macros/src/codegen/container/struct/k8s.rs b/crates/stackable-versioned-macros/src/codegen/container/struct/k8s.rs index f24e211b3..7023cca0c 100644 --- a/crates/stackable-versioned-macros/src/codegen/container/struct/k8s.rs +++ b/crates/stackable-versioned-macros/src/codegen/container/struct/k8s.rs @@ -286,13 +286,13 @@ impl Struct { pub fn as_api_version_str(&self) -> &str { match self { - #(#variant_idents => #api_versions),* + #(#enum_ident::#variant_idents => #api_versions),* } } pub fn from_api_version(api_version: &str) -> Result { match api_version { - #(#api_versions => Ok(Self::#variant_idents)),*, + #(#api_versions => Ok(#enum_ident::#variant_idents)),*, _ => Err(#unknown_desired_api_version_error { api_version: api_version.to_owned(), }), diff --git a/crates/stackable-versioned-macros/tests/snapshots/stackable_versioned_macros__snapshot_tests__k8s@basic.rs.snap b/crates/stackable-versioned-macros/tests/snapshots/stackable_versioned_macros__snapshot_tests__k8s@basic.rs.snap index fa947d2ef..cad771f3f 100644 --- a/crates/stackable-versioned-macros/tests/snapshots/stackable_versioned_macros__snapshot_tests__k8s@basic.rs.snap +++ b/crates/stackable-versioned-macros/tests/snapshots/stackable_versioned_macros__snapshot_tests__k8s@basic.rs.snap @@ -395,18 +395,18 @@ impl FooVersion { } pub fn as_api_version_str(&self) -> &str { match self { - V1Alpha1 => "stackable.tech/v1alpha1", - V1Beta1 => "stackable.tech/v1beta1", - V1 => "stackable.tech/v1", + FooVersion::V1Alpha1 => "stackable.tech/v1alpha1", + FooVersion::V1Beta1 => "stackable.tech/v1beta1", + FooVersion::V1 => "stackable.tech/v1", } } pub fn from_api_version( api_version: &str, ) -> Result { match api_version { - "stackable.tech/v1alpha1" => Ok(Self::V1Alpha1), - "stackable.tech/v1beta1" => Ok(Self::V1Beta1), - "stackable.tech/v1" => Ok(Self::V1), + "stackable.tech/v1alpha1" => Ok(FooVersion::V1Alpha1), + "stackable.tech/v1beta1" => Ok(FooVersion::V1Beta1), + "stackable.tech/v1" => Ok(FooVersion::V1), _ => { Err(::stackable_versioned::UnknownDesiredApiVersionError { api_version: api_version.to_owned(), diff --git a/crates/stackable-versioned-macros/tests/snapshots/stackable_versioned_macros__snapshot_tests__k8s@conversion_tracking.rs.snap b/crates/stackable-versioned-macros/tests/snapshots/stackable_versioned_macros__snapshot_tests__k8s@conversion_tracking.rs.snap index 8b079c43a..9a7ee26d5 100644 --- a/crates/stackable-versioned-macros/tests/snapshots/stackable_versioned_macros__snapshot_tests__k8s@conversion_tracking.rs.snap +++ b/crates/stackable-versioned-macros/tests/snapshots/stackable_versioned_macros__snapshot_tests__k8s@conversion_tracking.rs.snap @@ -365,18 +365,18 @@ impl FooVersion { } pub fn as_api_version_str(&self) -> &str { match self { - V1Alpha1 => "stackable.tech/v1alpha1", - V1Beta1 => "stackable.tech/v1beta1", - V1 => "stackable.tech/v1", + FooVersion::V1Alpha1 => "stackable.tech/v1alpha1", + FooVersion::V1Beta1 => "stackable.tech/v1beta1", + FooVersion::V1 => "stackable.tech/v1", } } pub fn from_api_version( api_version: &str, ) -> Result { match api_version { - "stackable.tech/v1alpha1" => Ok(Self::V1Alpha1), - "stackable.tech/v1beta1" => Ok(Self::V1Beta1), - "stackable.tech/v1" => Ok(Self::V1), + "stackable.tech/v1alpha1" => Ok(FooVersion::V1Alpha1), + "stackable.tech/v1beta1" => Ok(FooVersion::V1Beta1), + "stackable.tech/v1" => Ok(FooVersion::V1), _ => { Err(::stackable_versioned::UnknownDesiredApiVersionError { api_version: api_version.to_owned(), diff --git a/crates/stackable-versioned-macros/tests/snapshots/stackable_versioned_macros__snapshot_tests__k8s@crate_overrides.rs.snap b/crates/stackable-versioned-macros/tests/snapshots/stackable_versioned_macros__snapshot_tests__k8s@crate_overrides.rs.snap index 290bbb809..2a120aa0e 100644 --- a/crates/stackable-versioned-macros/tests/snapshots/stackable_versioned_macros__snapshot_tests__k8s@crate_overrides.rs.snap +++ b/crates/stackable-versioned-macros/tests/snapshots/stackable_versioned_macros__snapshot_tests__k8s@crate_overrides.rs.snap @@ -380,18 +380,18 @@ impl FooVersion { } pub fn as_api_version_str(&self) -> &str { match self { - V1Alpha1 => "foo.example.org/v1alpha1", - V1Beta1 => "foo.example.org/v1beta1", - V1 => "foo.example.org/v1", + FooVersion::V1Alpha1 => "foo.example.org/v1alpha1", + FooVersion::V1Beta1 => "foo.example.org/v1beta1", + FooVersion::V1 => "foo.example.org/v1", } } pub fn from_api_version( api_version: &str, ) -> Result { match api_version { - "foo.example.org/v1alpha1" => Ok(Self::V1Alpha1), - "foo.example.org/v1beta1" => Ok(Self::V1Beta1), - "foo.example.org/v1" => Ok(Self::V1), + "foo.example.org/v1alpha1" => Ok(FooVersion::V1Alpha1), + "foo.example.org/v1beta1" => Ok(FooVersion::V1Beta1), + "foo.example.org/v1" => Ok(FooVersion::V1), _ => { Err(::stackable_versioned::UnknownDesiredApiVersionError { api_version: api_version.to_owned(), diff --git a/crates/stackable-versioned-macros/tests/snapshots/stackable_versioned_macros__snapshot_tests__k8s@module.rs.snap b/crates/stackable-versioned-macros/tests/snapshots/stackable_versioned_macros__snapshot_tests__k8s@module.rs.snap index 26b78cc83..0eec1bba4 100644 --- a/crates/stackable-versioned-macros/tests/snapshots/stackable_versioned_macros__snapshot_tests__k8s@module.rs.snap +++ b/crates/stackable-versioned-macros/tests/snapshots/stackable_versioned_macros__snapshot_tests__k8s@module.rs.snap @@ -552,18 +552,18 @@ impl FooVersion { } pub fn as_api_version_str(&self) -> &str { match self { - V1Alpha1 => "foo.example.org/v1alpha1", - V1 => "foo.example.org/v1", - V2Alpha1 => "foo.example.org/v2alpha1", + FooVersion::V1Alpha1 => "foo.example.org/v1alpha1", + FooVersion::V1 => "foo.example.org/v1", + FooVersion::V2Alpha1 => "foo.example.org/v2alpha1", } } pub fn from_api_version( api_version: &str, ) -> Result { match api_version { - "foo.example.org/v1alpha1" => Ok(Self::V1Alpha1), - "foo.example.org/v1" => Ok(Self::V1), - "foo.example.org/v2alpha1" => Ok(Self::V2Alpha1), + "foo.example.org/v1alpha1" => Ok(FooVersion::V1Alpha1), + "foo.example.org/v1" => Ok(FooVersion::V1), + "foo.example.org/v2alpha1" => Ok(FooVersion::V2Alpha1), _ => { Err(::stackable_versioned::UnknownDesiredApiVersionError { api_version: api_version.to_owned(), @@ -849,18 +849,18 @@ impl BarVersion { } pub fn as_api_version_str(&self) -> &str { match self { - V1Alpha1 => "bar.example.org/v1alpha1", - V1 => "bar.example.org/v1", - V2Alpha1 => "bar.example.org/v2alpha1", + BarVersion::V1Alpha1 => "bar.example.org/v1alpha1", + BarVersion::V1 => "bar.example.org/v1", + BarVersion::V2Alpha1 => "bar.example.org/v2alpha1", } } pub fn from_api_version( api_version: &str, ) -> Result { match api_version { - "bar.example.org/v1alpha1" => Ok(Self::V1Alpha1), - "bar.example.org/v1" => Ok(Self::V1), - "bar.example.org/v2alpha1" => Ok(Self::V2Alpha1), + "bar.example.org/v1alpha1" => Ok(BarVersion::V1Alpha1), + "bar.example.org/v1" => Ok(BarVersion::V1), + "bar.example.org/v2alpha1" => Ok(BarVersion::V2Alpha1), _ => { Err(::stackable_versioned::UnknownDesiredApiVersionError { api_version: api_version.to_owned(), diff --git a/crates/stackable-versioned-macros/tests/snapshots/stackable_versioned_macros__snapshot_tests__k8s@module_preserve.rs.snap b/crates/stackable-versioned-macros/tests/snapshots/stackable_versioned_macros__snapshot_tests__k8s@module_preserve.rs.snap index cb886a3f1..40f611cc6 100644 --- a/crates/stackable-versioned-macros/tests/snapshots/stackable_versioned_macros__snapshot_tests__k8s@module_preserve.rs.snap +++ b/crates/stackable-versioned-macros/tests/snapshots/stackable_versioned_macros__snapshot_tests__k8s@module_preserve.rs.snap @@ -530,18 +530,18 @@ pub(crate) mod versioned { } pub fn as_api_version_str(&self) -> &str { match self { - V1Alpha1 => "foo.example.org/v1alpha1", - V1 => "foo.example.org/v1", - V2Alpha1 => "foo.example.org/v2alpha1", + FooVersion::V1Alpha1 => "foo.example.org/v1alpha1", + FooVersion::V1 => "foo.example.org/v1", + FooVersion::V2Alpha1 => "foo.example.org/v2alpha1", } } pub fn from_api_version( api_version: &str, ) -> Result { match api_version { - "foo.example.org/v1alpha1" => Ok(Self::V1Alpha1), - "foo.example.org/v1" => Ok(Self::V1), - "foo.example.org/v2alpha1" => Ok(Self::V2Alpha1), + "foo.example.org/v1alpha1" => Ok(FooVersion::V1Alpha1), + "foo.example.org/v1" => Ok(FooVersion::V1), + "foo.example.org/v2alpha1" => Ok(FooVersion::V2Alpha1), _ => { Err(::stackable_versioned::UnknownDesiredApiVersionError { api_version: api_version.to_owned(), @@ -822,18 +822,18 @@ pub(crate) mod versioned { } pub fn as_api_version_str(&self) -> &str { match self { - V1Alpha1 => "bar.example.org/v1alpha1", - V1 => "bar.example.org/v1", - V2Alpha1 => "bar.example.org/v2alpha1", + BarVersion::V1Alpha1 => "bar.example.org/v1alpha1", + BarVersion::V1 => "bar.example.org/v1", + BarVersion::V2Alpha1 => "bar.example.org/v2alpha1", } } pub fn from_api_version( api_version: &str, ) -> Result { match api_version { - "bar.example.org/v1alpha1" => Ok(Self::V1Alpha1), - "bar.example.org/v1" => Ok(Self::V1), - "bar.example.org/v2alpha1" => Ok(Self::V2Alpha1), + "bar.example.org/v1alpha1" => Ok(BarVersion::V1Alpha1), + "bar.example.org/v1" => Ok(BarVersion::V1), + "bar.example.org/v2alpha1" => Ok(BarVersion::V2Alpha1), _ => { Err(::stackable_versioned::UnknownDesiredApiVersionError { api_version: api_version.to_owned(), diff --git a/crates/stackable-versioned-macros/tests/snapshots/stackable_versioned_macros__snapshot_tests__k8s@renamed_kind.rs.snap b/crates/stackable-versioned-macros/tests/snapshots/stackable_versioned_macros__snapshot_tests__k8s@renamed_kind.rs.snap index 34e229c9e..899658557 100644 --- a/crates/stackable-versioned-macros/tests/snapshots/stackable_versioned_macros__snapshot_tests__k8s@renamed_kind.rs.snap +++ b/crates/stackable-versioned-macros/tests/snapshots/stackable_versioned_macros__snapshot_tests__k8s@renamed_kind.rs.snap @@ -365,18 +365,18 @@ impl FooBarVersion { } pub fn as_api_version_str(&self) -> &str { match self { - V1Alpha1 => "stackable.tech/v1alpha1", - V1Beta1 => "stackable.tech/v1beta1", - V1 => "stackable.tech/v1", + FooBarVersion::V1Alpha1 => "stackable.tech/v1alpha1", + FooBarVersion::V1Beta1 => "stackable.tech/v1beta1", + FooBarVersion::V1 => "stackable.tech/v1", } } pub fn from_api_version( api_version: &str, ) -> Result { match api_version { - "stackable.tech/v1alpha1" => Ok(Self::V1Alpha1), - "stackable.tech/v1beta1" => Ok(Self::V1Beta1), - "stackable.tech/v1" => Ok(Self::V1), + "stackable.tech/v1alpha1" => Ok(FooBarVersion::V1Alpha1), + "stackable.tech/v1beta1" => Ok(FooBarVersion::V1Beta1), + "stackable.tech/v1" => Ok(FooBarVersion::V1), _ => { Err(::stackable_versioned::UnknownDesiredApiVersionError { api_version: api_version.to_owned(), diff --git a/crates/stackable-versioned-macros/tests/snapshots/stackable_versioned_macros__snapshot_tests__k8s@shortnames.rs.snap b/crates/stackable-versioned-macros/tests/snapshots/stackable_versioned_macros__snapshot_tests__k8s@shortnames.rs.snap index 9e82226d3..6d0d019fc 100644 --- a/crates/stackable-versioned-macros/tests/snapshots/stackable_versioned_macros__snapshot_tests__k8s@shortnames.rs.snap +++ b/crates/stackable-versioned-macros/tests/snapshots/stackable_versioned_macros__snapshot_tests__k8s@shortnames.rs.snap @@ -194,14 +194,14 @@ impl FooVersion { } pub fn as_api_version_str(&self) -> &str { match self { - V1Alpha1 => "stackable.tech/v1alpha1", + FooVersion::V1Alpha1 => "stackable.tech/v1alpha1", } } pub fn from_api_version( api_version: &str, ) -> Result { match api_version { - "stackable.tech/v1alpha1" => Ok(Self::V1Alpha1), + "stackable.tech/v1alpha1" => Ok(FooVersion::V1Alpha1), _ => { Err(::stackable_versioned::UnknownDesiredApiVersionError { api_version: api_version.to_owned(), From e6aca56439e95b471286688ff676db067bb529e6 Mon Sep 17 00:00:00 2001 From: Techassi Date: Thu, 26 Jun 2025 11:48:08 +0200 Subject: [PATCH 3/6] test(stackable-versioned): Add integration test for merged_crd --- .../stackable-versioned/tests/conversions.rs | 82 +------------------ .../stackable-versioned/tests/merged_crd.rs | 22 +++++ crates/stackable-versioned/tests/person.rs | 78 ++++++++++++++++++ 3 files changed, 103 insertions(+), 79 deletions(-) create mode 100644 crates/stackable-versioned/tests/merged_crd.rs create mode 100644 crates/stackable-versioned/tests/person.rs diff --git a/crates/stackable-versioned/tests/conversions.rs b/crates/stackable-versioned/tests/conversions.rs index 034454001..c5bb0e337 100644 --- a/crates/stackable-versioned/tests/conversions.rs +++ b/crates/stackable-versioned/tests/conversions.rs @@ -1,87 +1,11 @@ use std::{fs::File, path::Path}; use insta::{assert_snapshot, glob}; -use kube::{ - CustomResource, - core::{conversion::ConversionReview, response::StatusSummary}, -}; -use schemars::JsonSchema; -use serde::{Deserialize, Serialize}; -use stackable_versioned::versioned; +use kube::core::{conversion::ConversionReview, response::StatusSummary}; -#[versioned( - k8s(group = "test.stackable.tech",), - version(name = "v1alpha1"), - version(name = "v1alpha2"), - version(name = "v1beta1"), - version(name = "v2"), - version(name = "v3") -)] -#[derive( - Clone, - Debug, - Eq, - Hash, - Ord, - PartialEq, - PartialOrd, - CustomResource, - Deserialize, - JsonSchema, - Serialize, -)] -#[serde(rename_all = "camelCase")] -struct PersonSpec { - username: String, +use crate::person::Person; - // In v1alpha2 first and last name have been added - #[versioned(added(since = "v1alpha2"))] - first_name: String, - #[versioned(added(since = "v1alpha2"))] - last_name: String, - - // We started out with a enum. As we *need* to provide a default, we have a Unknown variant. - // Afterwards we figured let's be more flexible and accept any arbitrary String. - #[versioned( - added(since = "v2", default = "default_gender"), - changed(since = "v3", from_type = "Gender") - )] - gender: String, -} - -fn default_gender() -> Gender { - Gender::Unknown -} - -#[derive( - Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd, Deserialize, JsonSchema, Serialize, -)] -#[serde(rename_all = "PascalCase")] -pub enum Gender { - Unknown, - Male, - Female, -} - -impl From for String { - fn from(value: Gender) -> Self { - match value { - Gender::Unknown => "Unknown".to_owned(), - Gender::Male => "Male".to_owned(), - Gender::Female => "Female".to_owned(), - } - } -} - -impl From for Gender { - fn from(value: String) -> Self { - match value.as_str() { - "Male" => Self::Male, - "Female" => Self::Female, - _ => Self::Unknown, - } - } -} +mod person; #[test] fn pass() { diff --git a/crates/stackable-versioned/tests/merged_crd.rs b/crates/stackable-versioned/tests/merged_crd.rs new file mode 100644 index 000000000..8625ab944 --- /dev/null +++ b/crates/stackable-versioned/tests/merged_crd.rs @@ -0,0 +1,22 @@ +use crate::person::{Person, PersonVersion}; + +mod person; + +#[test] +fn stored_apiversion() { + let merged_crd = Person::merged_crd(PersonVersion::V2).expect("the CRDs must be mergeable"); + + let all_storage_fields_correct = + merged_crd + .spec + .versions + .iter() + .enumerate() + .all( + |(idx, crd)| { + if idx == 0 { crd.storage } else { !crd.storage } + }, + ); + + assert!(all_storage_fields_correct); +} diff --git a/crates/stackable-versioned/tests/person.rs b/crates/stackable-versioned/tests/person.rs new file mode 100644 index 000000000..f2610fa60 --- /dev/null +++ b/crates/stackable-versioned/tests/person.rs @@ -0,0 +1,78 @@ +use kube::CustomResource; +use schemars::JsonSchema; +use serde::{Deserialize, Serialize}; +use stackable_versioned::versioned; + +#[versioned( + k8s(group = "test.stackable.tech",), + version(name = "v1alpha1"), + version(name = "v1alpha2"), + version(name = "v1beta1"), + version(name = "v2"), + version(name = "v3") +)] +#[derive( + Clone, + Debug, + Eq, + Hash, + Ord, + PartialEq, + PartialOrd, + CustomResource, + Deserialize, + JsonSchema, + Serialize, +)] +#[serde(rename_all = "camelCase")] +pub struct PersonSpec { + username: String, + + // In v1alpha2 first and last name have been added + #[versioned(added(since = "v1alpha2"))] + first_name: String, + #[versioned(added(since = "v1alpha2"))] + last_name: String, + + // We started out with a enum. As we *need* to provide a default, we have a Unknown variant. + // Afterwards we figured let's be more flexible and accept any arbitrary String. + #[versioned( + added(since = "v2", default = "default_gender"), + changed(since = "v3", from_type = "Gender") + )] + gender: String, +} + +fn default_gender() -> Gender { + Gender::Unknown +} + +#[derive( + Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd, Deserialize, JsonSchema, Serialize, +)] +#[serde(rename_all = "PascalCase")] +pub enum Gender { + Unknown, + Male, + Female, +} + +impl From for String { + fn from(value: Gender) -> Self { + match value { + Gender::Unknown => "Unknown".to_owned(), + Gender::Male => "Male".to_owned(), + Gender::Female => "Female".to_owned(), + } + } +} + +impl From for Gender { + fn from(value: String) -> Self { + match value.as_str() { + "Male" => Self::Male, + "Female" => Self::Female, + _ => Self::Unknown, + } + } +} From c755a5ea051c98f8ebae7e972feb257d3ece5b6a Mon Sep 17 00:00:00 2001 From: Techassi Date: Thu, 26 Jun 2025 11:49:32 +0200 Subject: [PATCH 4/6] chore(stackable-versioned): Add changelog entry --- crates/stackable-versioned/CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/crates/stackable-versioned/CHANGELOG.md b/crates/stackable-versioned/CHANGELOG.md index 58968d114..8435ff4c1 100644 --- a/crates/stackable-versioned/CHANGELOG.md +++ b/crates/stackable-versioned/CHANGELOG.md @@ -32,6 +32,7 @@ All notable changes to this project will be documented in this file. ### Fixed +- Fix incorrectly generated match arms for the version enum ([#1065]). - Fix regression introduced in [#1033]. The `#[kube(status = ...)]` attribute is generated correctly again ([#1046]). - Correctly handle fields added in later versions ([#1031]). @@ -55,6 +56,7 @@ All notable changes to this project will be documented in this file. [#1050]: https://github.com/stackabletech/operator-rs/pull/1050 [#1059]: https://github.com/stackabletech/operator-rs/pull/1059 [#1061]: https://github.com/stackabletech/operator-rs/pull/1061 +[#1065]: https://github.com/stackabletech/operator-rs/pull/1065 ## [0.7.1] - 2025-04-02 From 6e8621701334434fac19e23de3dd9b28c4405f7e Mon Sep 17 00:00:00 2001 From: Techassi Date: Thu, 26 Jun 2025 11:56:24 +0200 Subject: [PATCH 5/6] test(stackable-versioned): Improve merged_crd integration test --- .../stackable-versioned/tests/merged_crd.rs | 20 ++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/crates/stackable-versioned/tests/merged_crd.rs b/crates/stackable-versioned/tests/merged_crd.rs index 8625ab944..53dd0851c 100644 --- a/crates/stackable-versioned/tests/merged_crd.rs +++ b/crates/stackable-versioned/tests/merged_crd.rs @@ -4,8 +4,12 @@ mod person; #[test] fn stored_apiversion() { - let merged_crd = Person::merged_crd(PersonVersion::V2).expect("the CRDs must be mergeable"); + let desired_stored_apiversion = PersonVersion::V2; + let merged_crd = + Person::merged_crd(desired_stored_apiversion).expect("the CRDs must be mergeable"); + + // First, we ensure that all storage fields have the correct value. let all_storage_fields_correct = merged_crd .spec @@ -19,4 +23,18 @@ fn stored_apiversion() { ); assert!(all_storage_fields_correct); + + // Lastly, we ensure the first version (which is always the stored version) + // is the one we expect. + let stored_apiversion = &merged_crd + .spec + .versions + .first() + .expect("there must be at least one CRD version") + .name; + + assert_eq!( + stored_apiversion, + desired_stored_apiversion.as_version_str() + ); } From 55f06b40845deea52314c1fcb69842de33132761 Mon Sep 17 00:00:00 2001 From: Techassi Date: Thu, 26 Jun 2025 12:34:26 +0200 Subject: [PATCH 6/6] test(stackable-versioned): Simplify merged_crd test --- .../stackable-versioned/tests/merged_crd.rs | 38 +++++-------------- 1 file changed, 10 insertions(+), 28 deletions(-) diff --git a/crates/stackable-versioned/tests/merged_crd.rs b/crates/stackable-versioned/tests/merged_crd.rs index 53dd0851c..95bec94cc 100644 --- a/crates/stackable-versioned/tests/merged_crd.rs +++ b/crates/stackable-versioned/tests/merged_crd.rs @@ -4,37 +4,19 @@ mod person; #[test] fn stored_apiversion() { - let desired_stored_apiversion = PersonVersion::V2; + let stored_apiversion = PersonVersion::V2; - let merged_crd = - Person::merged_crd(desired_stored_apiversion).expect("the CRDs must be mergeable"); + let merged_crd = Person::merged_crd(stored_apiversion).expect("the CRDs must be mergeable"); - // First, we ensure that all storage fields have the correct value. - let all_storage_fields_correct = - merged_crd - .spec - .versions - .iter() - .enumerate() - .all( - |(idx, crd)| { - if idx == 0 { crd.storage } else { !crd.storage } - }, - ); - - assert!(all_storage_fields_correct); - - // Lastly, we ensure the first version (which is always the stored version) - // is the one we expect. - let stored_apiversion = &merged_crd + // We ensure that the merged CRD contains at least one version marked as + // storage = true. + let crd = merged_crd .spec .versions - .first() - .expect("there must be at least one CRD version") - .name; + .iter() + .find(|crd| crd.storage) + .expect("The merged CRD must contain at least one version marked with storage = true"); - assert_eq!( - stored_apiversion, - desired_stored_apiversion.as_version_str() - ); + // This asserts that the name (version) of the CRD matches the one we expect + assert_eq!(crd.name, stored_apiversion.as_version_str()); }