From fb625b2a21fdc35148193b0ca2522af103533c79 Mon Sep 17 00:00:00 2001 From: Techassi Date: Tue, 2 Sep 2025 15:35:04 +0200 Subject: [PATCH 1/5] fix(stackable-versioned): Correctly emit enum fields in From impls --- .../src/codegen/item/variant.rs | 97 +++++++++++-------- .../tests/inputs/pass/enum_fields.rs | 18 ++++ ...acros__snapshots__pass@enum_fields.rs.snap | 91 +++++++++++++++++ .../tests/trybuild.rs | 1 + 4 files changed, 169 insertions(+), 38 deletions(-) create mode 100644 crates/stackable-versioned-macros/tests/inputs/pass/enum_fields.rs create mode 100644 crates/stackable-versioned-macros/tests/snapshots/stackable_versioned_macros__snapshots__pass@enum_fields.rs.snap diff --git a/crates/stackable-versioned-macros/src/codegen/item/variant.rs b/crates/stackable-versioned-macros/src/codegen/item/variant.rs index 591bf26e2..74eee84c0 100644 --- a/crates/stackable-versioned-macros/src/codegen/item/variant.rs +++ b/crates/stackable-versioned-macros/src/codegen/item/variant.rs @@ -4,7 +4,9 @@ use darling::{FromVariant, Result, util::IdentString}; use k8s_version::Version; use proc_macro2::{Span, TokenStream}; use quote::{format_ident, quote}; -use syn::{Attribute, Fields, Type, TypeNever, Variant, token::Not}; +use syn::{ + Attribute, Fields, FieldsNamed, FieldsUnnamed, Ident, Type, TypeNever, Variant, token::Not, +}; use crate::{ attrs::item::VariantAttributes, @@ -138,7 +140,8 @@ impl VersionedVariant { next_version: &VersionDefinition, enum_ident: &IdentString, ) -> Option { - let variant_fields = self.fields_as_token_stream(); + let from_fields = self.generate_from_fields(); + let for_fields = self.generate_for_fields(); match &self.changes { Some(changes) => { @@ -154,16 +157,15 @@ impl VersionedVariant { let next_variant_ident = next.get_ident(); let old_variant_ident = old.get_ident(); - let old = quote! { - #old_version_ident::#enum_ident::#old_variant_ident #variant_fields - }; - let next = quote! { - #next_version_ident::#enum_ident::#next_variant_ident #variant_fields - }; - match direction { - Direction::Upgrade => Some(quote! { #old => #next, }), - Direction::Downgrade => Some(quote! { #next => #old, }), + Direction::Upgrade => Some(quote! { + #old_version_ident::#enum_ident::#old_variant_ident #from_fields + => #next_version_ident::#enum_ident::#next_variant_ident #for_fields, + }), + Direction::Downgrade => Some(quote! { + #next_version_ident::#enum_ident::#next_variant_ident #from_fields + => #old_version_ident::#enum_ident::#old_variant_ident #from_fields, + }), } } } @@ -173,48 +175,67 @@ impl VersionedVariant { let old_version_ident = &version.idents.module; let variant_ident = &*self.ident; - let old = quote! { - #old_version_ident::#enum_ident::#variant_ident #variant_fields - }; - let next = quote! { - #next_version_ident::#enum_ident::#variant_ident #variant_fields - }; - match direction { - Direction::Upgrade => Some(quote! { #old => #next, }), - Direction::Downgrade => Some(quote! { #next => #old, }), + Direction::Upgrade => Some(quote! { + #old_version_ident::#enum_ident::#variant_ident #from_fields + => #next_version_ident::#enum_ident::#variant_ident #for_fields, + }), + Direction::Downgrade => Some(quote! { + #next_version_ident::#enum_ident::#variant_ident #from_fields + => #old_version_ident::#enum_ident::#variant_ident #for_fields, + }), } } } } - fn fields_as_token_stream(&self) -> Option { + fn generate_for_fields(&self) -> Option { match &self.fields { Fields::Named(fields_named) => { - let fields: Vec<_> = fields_named - .named - .iter() - .map(|field| { - field - .ident - .as_ref() - .expect("named fields always have an ident") - }) - .collect(); + let fields = Self::named_field_idents(fields_named); + Some(quote! { { #(#fields)*: #(#fields.into()),* } }) + } + Fields::Unnamed(fields_unnamed) => { + let fields = Self::unnamed_field_ident(fields_unnamed); + Some(quote! { ( #(#fields.into()),* ) }) + } + Fields::Unit => None, + } + } + fn generate_from_fields(&self) -> Option { + match &self.fields { + Fields::Named(fields_named) => { + let fields = Self::named_field_idents(fields_named); Some(quote! { { #(#fields),* } }) } Fields::Unnamed(fields_unnamed) => { - let fields: Vec<_> = fields_unnamed - .unnamed - .iter() - .enumerate() - .map(|(index, _)| format_ident!("__sv_{index}")) - .collect(); - + let fields = Self::unnamed_field_ident(fields_unnamed); Some(quote! { ( #(#fields),* ) }) } Fields::Unit => None, } } + + fn named_field_idents(fields_named: &FieldsNamed) -> Vec<&Ident> { + fields_named + .named + .iter() + .map(|field| { + field + .ident + .as_ref() + .expect("named fields always have an ident") + }) + .collect() + } + + fn unnamed_field_ident(fields_unnamed: &FieldsUnnamed) -> Vec { + fields_unnamed + .unnamed + .iter() + .enumerate() + .map(|(index, _)| format_ident!("__sv_{index}")) + .collect() + } } diff --git a/crates/stackable-versioned-macros/tests/inputs/pass/enum_fields.rs b/crates/stackable-versioned-macros/tests/inputs/pass/enum_fields.rs new file mode 100644 index 000000000..22efe53e8 --- /dev/null +++ b/crates/stackable-versioned-macros/tests/inputs/pass/enum_fields.rs @@ -0,0 +1,18 @@ +use stackable_versioned::versioned; +// --- +#[versioned(version(name = "v1alpha1"), version(name = "v1alpha2"))] +// --- +pub mod versioned { + enum MyEnum { + A { aa: usize }, + B { bb: bool }, + } + + enum Bla { + A(A), + } + + struct A {} +} +// --- +fn main() {} diff --git a/crates/stackable-versioned-macros/tests/snapshots/stackable_versioned_macros__snapshots__pass@enum_fields.rs.snap b/crates/stackable-versioned-macros/tests/snapshots/stackable_versioned_macros__snapshots__pass@enum_fields.rs.snap new file mode 100644 index 000000000..76a7dc4b0 --- /dev/null +++ b/crates/stackable-versioned-macros/tests/snapshots/stackable_versioned_macros__snapshots__pass@enum_fields.rs.snap @@ -0,0 +1,91 @@ +--- +source: crates/stackable-versioned-macros/src/lib.rs +expression: formatted +input_file: crates/stackable-versioned-macros/tests/inputs/pass/enum_fields.rs +--- +#[automatically_derived] +pub mod v1alpha1 { + use super::*; + pub enum MyEnum { + A { aa: usize }, + B { bb: bool }, + } + pub enum Bla { + A(A), + } + pub struct A {} +} +#[automatically_derived] +impl ::core::convert::From for v1alpha2::MyEnum { + fn from(__sv_myenum: v1alpha1::MyEnum) -> Self { + match __sv_myenum { + v1alpha1::MyEnum::A { aa } => { + v1alpha2::MyEnum::A { + aa: aa.into(), + } + } + v1alpha1::MyEnum::B { bb } => { + v1alpha2::MyEnum::B { + bb: bb.into(), + } + } + } + } +} +#[automatically_derived] +impl ::core::convert::From for v1alpha1::MyEnum { + fn from(__sv_myenum: v1alpha2::MyEnum) -> Self { + match __sv_myenum { + v1alpha2::MyEnum::A { aa } => { + v1alpha1::MyEnum::A { + aa: aa.into(), + } + } + v1alpha2::MyEnum::B { bb } => { + v1alpha1::MyEnum::B { + bb: bb.into(), + } + } + } + } +} +#[automatically_derived] +impl ::core::convert::From for v1alpha2::Bla { + fn from(__sv_bla: v1alpha1::Bla) -> Self { + match __sv_bla { + v1alpha1::Bla::A(__sv_0) => v1alpha2::Bla::A(__sv_0.into()), + } + } +} +#[automatically_derived] +impl ::core::convert::From for v1alpha1::Bla { + fn from(__sv_bla: v1alpha2::Bla) -> Self { + match __sv_bla { + v1alpha2::Bla::A(__sv_0) => v1alpha1::Bla::A(__sv_0.into()), + } + } +} +#[automatically_derived] +impl ::core::convert::From for v1alpha2::A { + fn from(__sv_a: v1alpha1::A) -> Self { + Self {} + } +} +#[automatically_derived] +impl ::core::convert::From for v1alpha1::A { + fn from(__sv_a: v1alpha2::A) -> Self { + Self {} + } +} +#[automatically_derived] +pub mod v1alpha2 { + use super::*; + pub enum MyEnum { + A { aa: usize }, + B { bb: bool }, + } + pub enum Bla { + A(A), + } + pub struct A {} +} diff --git a/crates/stackable-versioned-macros/tests/trybuild.rs b/crates/stackable-versioned-macros/tests/trybuild.rs index b9c0fd343..8d14fdb39 100644 --- a/crates/stackable-versioned-macros/tests/trybuild.rs +++ b/crates/stackable-versioned-macros/tests/trybuild.rs @@ -23,6 +23,7 @@ mod inputs { // mod crate_overrides; // mod docs; // mod downgrade_with; + // mod enum_fields; // mod module; // mod module_preserve; // mod renamed_field; From 2b53a9dcc3d101e00bf785b96776f4b84c2cebd0 Mon Sep 17 00:00:00 2001 From: Techassi Date: Tue, 2 Sep 2025 15:37:33 +0200 Subject: [PATCH 2/5] chore(stackable-versioned): Add changelog entry --- crates/stackable-versioned/CHANGELOG.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/crates/stackable-versioned/CHANGELOG.md b/crates/stackable-versioned/CHANGELOG.md index 9d4411702..d24cee026 100644 --- a/crates/stackable-versioned/CHANGELOG.md +++ b/crates/stackable-versioned/CHANGELOG.md @@ -4,6 +4,12 @@ All notable changes to this project will be documented in this file. ## [Unreleased] +### Fixed + +- Correctly emit enum variant fields in `From` impl blocks ([#1086]). + +[#1086]: https://github.com/stackabletech/operator-rs/pull/1086 + ## [0.8.1] - 2025-08-21 ### Fixed From c4488c9b9bee96a1ae09880e94c2a7d7b2bcaf7f Mon Sep 17 00:00:00 2001 From: Techassi Date: Tue, 2 Sep 2025 15:45:22 +0200 Subject: [PATCH 3/5] fix(stackable-versioned): Correctly emit empty named field variants --- .../src/codegen/item/variant.rs | 2 +- .../tests/inputs/pass/enum_fields.rs | 5 +- ...acros__snapshots__pass@enum_fields.rs.snap | 64 ++++++++----------- 3 files changed, 30 insertions(+), 41 deletions(-) diff --git a/crates/stackable-versioned-macros/src/codegen/item/variant.rs b/crates/stackable-versioned-macros/src/codegen/item/variant.rs index 74eee84c0..4245fdaf3 100644 --- a/crates/stackable-versioned-macros/src/codegen/item/variant.rs +++ b/crates/stackable-versioned-macros/src/codegen/item/variant.rs @@ -193,7 +193,7 @@ impl VersionedVariant { match &self.fields { Fields::Named(fields_named) => { let fields = Self::named_field_idents(fields_named); - Some(quote! { { #(#fields)*: #(#fields.into()),* } }) + Some(quote! { { #(#fields:)* #(#fields.into()),* } }) } Fields::Unnamed(fields_unnamed) => { let fields = Self::unnamed_field_ident(fields_unnamed); diff --git a/crates/stackable-versioned-macros/tests/inputs/pass/enum_fields.rs b/crates/stackable-versioned-macros/tests/inputs/pass/enum_fields.rs index 22efe53e8..409021048 100644 --- a/crates/stackable-versioned-macros/tests/inputs/pass/enum_fields.rs +++ b/crates/stackable-versioned-macros/tests/inputs/pass/enum_fields.rs @@ -3,13 +3,14 @@ use stackable_versioned::versioned; #[versioned(version(name = "v1alpha1"), version(name = "v1alpha2"))] // --- pub mod versioned { - enum MyEnum { + enum Foo { A { aa: usize }, B { bb: bool }, } - enum Bla { + enum Bar { A(A), + B {}, } struct A {} diff --git a/crates/stackable-versioned-macros/tests/snapshots/stackable_versioned_macros__snapshots__pass@enum_fields.rs.snap b/crates/stackable-versioned-macros/tests/snapshots/stackable_versioned_macros__snapshots__pass@enum_fields.rs.snap index 76a7dc4b0..de09eaa3c 100644 --- a/crates/stackable-versioned-macros/tests/snapshots/stackable_versioned_macros__snapshots__pass@enum_fields.rs.snap +++ b/crates/stackable-versioned-macros/tests/snapshots/stackable_versioned_macros__snapshots__pass@enum_fields.rs.snap @@ -6,62 +6,49 @@ input_file: crates/stackable-versioned-macros/tests/inputs/pass/enum_fields.rs #[automatically_derived] pub mod v1alpha1 { use super::*; - pub enum MyEnum { + pub enum Foo { A { aa: usize }, B { bb: bool }, } - pub enum Bla { + pub enum Bar { A(A), + B {}, } pub struct A {} } #[automatically_derived] -impl ::core::convert::From for v1alpha2::MyEnum { - fn from(__sv_myenum: v1alpha1::MyEnum) -> Self { - match __sv_myenum { - v1alpha1::MyEnum::A { aa } => { - v1alpha2::MyEnum::A { - aa: aa.into(), - } - } - v1alpha1::MyEnum::B { bb } => { - v1alpha2::MyEnum::B { - bb: bb.into(), - } - } +impl ::core::convert::From for v1alpha2::Foo { + fn from(__sv_foo: v1alpha1::Foo) -> Self { + match __sv_foo { + v1alpha1::Foo::A { aa } => v1alpha2::Foo::A { aa: aa.into() }, + v1alpha1::Foo::B { bb } => v1alpha2::Foo::B { bb: bb.into() }, } } } #[automatically_derived] -impl ::core::convert::From for v1alpha1::MyEnum { - fn from(__sv_myenum: v1alpha2::MyEnum) -> Self { - match __sv_myenum { - v1alpha2::MyEnum::A { aa } => { - v1alpha1::MyEnum::A { - aa: aa.into(), - } - } - v1alpha2::MyEnum::B { bb } => { - v1alpha1::MyEnum::B { - bb: bb.into(), - } - } +impl ::core::convert::From for v1alpha1::Foo { + fn from(__sv_foo: v1alpha2::Foo) -> Self { + match __sv_foo { + v1alpha2::Foo::A { aa } => v1alpha1::Foo::A { aa: aa.into() }, + v1alpha2::Foo::B { bb } => v1alpha1::Foo::B { bb: bb.into() }, } } } #[automatically_derived] -impl ::core::convert::From for v1alpha2::Bla { - fn from(__sv_bla: v1alpha1::Bla) -> Self { - match __sv_bla { - v1alpha1::Bla::A(__sv_0) => v1alpha2::Bla::A(__sv_0.into()), +impl ::core::convert::From for v1alpha2::Bar { + fn from(__sv_bar: v1alpha1::Bar) -> Self { + match __sv_bar { + v1alpha1::Bar::A(__sv_0) => v1alpha2::Bar::A(__sv_0.into()), + v1alpha1::Bar::B {} => v1alpha2::Bar::B {}, } } } #[automatically_derived] -impl ::core::convert::From for v1alpha1::Bla { - fn from(__sv_bla: v1alpha2::Bla) -> Self { - match __sv_bla { - v1alpha2::Bla::A(__sv_0) => v1alpha1::Bla::A(__sv_0.into()), +impl ::core::convert::From for v1alpha1::Bar { + fn from(__sv_bar: v1alpha2::Bar) -> Self { + match __sv_bar { + v1alpha2::Bar::A(__sv_0) => v1alpha1::Bar::A(__sv_0.into()), + v1alpha2::Bar::B {} => v1alpha1::Bar::B {}, } } } @@ -80,12 +67,13 @@ impl ::core::convert::From for v1alpha1::A { #[automatically_derived] pub mod v1alpha2 { use super::*; - pub enum MyEnum { + pub enum Foo { A { aa: usize }, B { bb: bool }, } - pub enum Bla { + pub enum Bar { A(A), + B {}, } pub struct A {} } From aba872e9f11b6bd459e529d91cb99857de54f101 Mon Sep 17 00:00:00 2001 From: Techassi Date: Tue, 2 Sep 2025 15:50:43 +0200 Subject: [PATCH 4/5] fix: Bump tracing-subscriber to 0.3.20 to fix RUSTSEC-2025-0055 See https://rustsec.org/advisories/RUSTSEC-2025-0055 --- Cargo.lock | 76 ++++++++++++------------------------------------------ 1 file changed, 16 insertions(+), 60 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index d6633de58..69372fefb 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -851,8 +851,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "531e46835a22af56d1e3b66f04844bed63158bc094a628bec1d321d9b4c44bf2" dependencies = [ "bit-set", - "regex-automata 0.4.9", - "regex-syntax 0.8.5", + "regex-automata", + "regex-syntax", ] [[package]] @@ -1058,8 +1058,8 @@ dependencies = [ "aho-corasick", "bstr", "log", - "regex-automata 0.4.9", - "regex-syntax 0.8.5", + "regex-automata", + "regex-syntax", ] [[package]] @@ -1754,11 +1754,11 @@ checksum = "13dc2df351e3202783a1fe0d44375f7295ffb4049267b0f3018346dc122a1d94" [[package]] name = "matchers" -version = "0.1.0" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558" +checksum = "d1525a2a28c7f4fa0fc98bb91ae755d1e2d1505079e05539e35bc876b5d65ae9" dependencies = [ - "regex-automata 0.1.10", + "regex-automata", ] [[package]] @@ -1801,12 +1801,11 @@ dependencies = [ [[package]] name = "nu-ansi-term" -version = "0.46.0" +version = "0.50.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84" +checksum = "d4a28e057d01f97e61255210fcff094d74ed0466038633e95017f5beb68e4399" dependencies = [ - "overload", - "winapi", + "windows-sys 0.52.0", ] [[package]] @@ -1992,12 +1991,6 @@ dependencies = [ "num-traits", ] -[[package]] -name = "overload" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" - [[package]] name = "p256" version = "0.13.2" @@ -2358,17 +2351,8 @@ checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191" dependencies = [ "aho-corasick", "memchr", - "regex-automata 0.4.9", - "regex-syntax 0.8.5", -] - -[[package]] -name = "regex-automata" -version = "0.1.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132" -dependencies = [ - "regex-syntax 0.6.29", + "regex-automata", + "regex-syntax", ] [[package]] @@ -2379,15 +2363,9 @@ checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908" dependencies = [ "aho-corasick", "memchr", - "regex-syntax 0.8.5", + "regex-syntax", ] -[[package]] -name = "regex-syntax" -version = "0.6.29" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" - [[package]] name = "regex-syntax" version = "0.8.5" @@ -3676,14 +3654,14 @@ dependencies = [ [[package]] name = "tracing-subscriber" -version = "0.3.19" +version = "0.3.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8189decb5ac0fa7bc8b96b7cb9b2701d60d48805aca84a238004d665fcc4008" +checksum = "2054a14f5307d601f88daf0553e1cbf472acc4f2c51afab632431cdcd72124d5" dependencies = [ "matchers", "nu-ansi-term", "once_cell", - "regex", + "regex-automata", "serde", "serde_json", "sharded-slab", @@ -3919,22 +3897,6 @@ dependencies = [ "wasm-bindgen", ] -[[package]] -name = "winapi" -version = "0.3.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" -dependencies = [ - "winapi-i686-pc-windows-gnu", - "winapi-x86_64-pc-windows-gnu", -] - -[[package]] -name = "winapi-i686-pc-windows-gnu" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" - [[package]] name = "winapi-util" version = "0.1.10" @@ -3944,12 +3906,6 @@ dependencies = [ "windows-sys 0.60.2", ] -[[package]] -name = "winapi-x86_64-pc-windows-gnu" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" - [[package]] name = "windows-link" version = "0.1.3" From 26b82320046d04d848b9c5c869c575605c907c65 Mon Sep 17 00:00:00 2001 From: Techassi Date: Tue, 2 Sep 2025 16:08:23 +0200 Subject: [PATCH 5/5] fix(stackable-versioned): Use correct quote repetition --- .../src/codegen/item/variant.rs | 8 ++++---- .../tests/inputs/pass/enum_fields.rs | 2 +- ...macros__snapshots__pass@enum_fields.rs.snap | 18 ++++++++++++++---- 3 files changed, 19 insertions(+), 9 deletions(-) diff --git a/crates/stackable-versioned-macros/src/codegen/item/variant.rs b/crates/stackable-versioned-macros/src/codegen/item/variant.rs index 4245fdaf3..4463cd5e6 100644 --- a/crates/stackable-versioned-macros/src/codegen/item/variant.rs +++ b/crates/stackable-versioned-macros/src/codegen/item/variant.rs @@ -193,11 +193,11 @@ impl VersionedVariant { match &self.fields { Fields::Named(fields_named) => { let fields = Self::named_field_idents(fields_named); - Some(quote! { { #(#fields:)* #(#fields.into()),* } }) + Some(quote! { { #(#fields: #fields.into(),)* } }) } Fields::Unnamed(fields_unnamed) => { let fields = Self::unnamed_field_ident(fields_unnamed); - Some(quote! { ( #(#fields.into()),* ) }) + Some(quote! { ( #(#fields.into())* ) }) } Fields::Unit => None, } @@ -207,11 +207,11 @@ impl VersionedVariant { match &self.fields { Fields::Named(fields_named) => { let fields = Self::named_field_idents(fields_named); - Some(quote! { { #(#fields),* } }) + Some(quote! { { #(#fields,)* } }) } Fields::Unnamed(fields_unnamed) => { let fields = Self::unnamed_field_ident(fields_unnamed); - Some(quote! { ( #(#fields),* ) }) + Some(quote! { ( #(#fields)* ) }) } Fields::Unit => None, } diff --git a/crates/stackable-versioned-macros/tests/inputs/pass/enum_fields.rs b/crates/stackable-versioned-macros/tests/inputs/pass/enum_fields.rs index 409021048..f129a8ea6 100644 --- a/crates/stackable-versioned-macros/tests/inputs/pass/enum_fields.rs +++ b/crates/stackable-versioned-macros/tests/inputs/pass/enum_fields.rs @@ -4,7 +4,7 @@ use stackable_versioned::versioned; // --- pub mod versioned { enum Foo { - A { aa: usize }, + A { aa: usize, aaa: u64 }, B { bb: bool }, } diff --git a/crates/stackable-versioned-macros/tests/snapshots/stackable_versioned_macros__snapshots__pass@enum_fields.rs.snap b/crates/stackable-versioned-macros/tests/snapshots/stackable_versioned_macros__snapshots__pass@enum_fields.rs.snap index de09eaa3c..4436f5a51 100644 --- a/crates/stackable-versioned-macros/tests/snapshots/stackable_versioned_macros__snapshots__pass@enum_fields.rs.snap +++ b/crates/stackable-versioned-macros/tests/snapshots/stackable_versioned_macros__snapshots__pass@enum_fields.rs.snap @@ -7,7 +7,7 @@ input_file: crates/stackable-versioned-macros/tests/inputs/pass/enum_fields.rs pub mod v1alpha1 { use super::*; pub enum Foo { - A { aa: usize }, + A { aa: usize, aaa: u64 }, B { bb: bool }, } pub enum Bar { @@ -20,7 +20,12 @@ pub mod v1alpha1 { impl ::core::convert::From for v1alpha2::Foo { fn from(__sv_foo: v1alpha1::Foo) -> Self { match __sv_foo { - v1alpha1::Foo::A { aa } => v1alpha2::Foo::A { aa: aa.into() }, + v1alpha1::Foo::A { aa, aaa } => { + v1alpha2::Foo::A { + aa: aa.into(), + aaa: aaa.into(), + } + } v1alpha1::Foo::B { bb } => v1alpha2::Foo::B { bb: bb.into() }, } } @@ -29,7 +34,12 @@ impl ::core::convert::From for v1alpha2::Foo { impl ::core::convert::From for v1alpha1::Foo { fn from(__sv_foo: v1alpha2::Foo) -> Self { match __sv_foo { - v1alpha2::Foo::A { aa } => v1alpha1::Foo::A { aa: aa.into() }, + v1alpha2::Foo::A { aa, aaa } => { + v1alpha1::Foo::A { + aa: aa.into(), + aaa: aaa.into(), + } + } v1alpha2::Foo::B { bb } => v1alpha1::Foo::B { bb: bb.into() }, } } @@ -68,7 +78,7 @@ impl ::core::convert::From for v1alpha1::A { pub mod v1alpha2 { use super::*; pub enum Foo { - A { aa: usize }, + A { aa: usize, aaa: u64 }, B { bb: bool }, } pub enum Bar {