From 37bf940ecdfeb996ad559906958e8652e7749640 Mon Sep 17 00:00:00 2001 From: Techassi Date: Fri, 21 Mar 2025 14:00:38 +0100 Subject: [PATCH 1/2] fix(stackable-versioned): Emit type parameter defaults --- .../inputs/default/generics_defaults.rs | 9 +++++ ...efault_snapshots@generics_defaults.rs.snap | 39 +++++++++++++++++++ .../src/codegen/container/enum.rs | 4 +- .../src/codegen/container/struct.rs | 4 +- 4 files changed, 54 insertions(+), 2 deletions(-) create mode 100644 crates/stackable-versioned-macros/fixtures/inputs/default/generics_defaults.rs create mode 100644 crates/stackable-versioned-macros/fixtures/snapshots/stackable_versioned_macros__test__default_snapshots@generics_defaults.rs.snap diff --git a/crates/stackable-versioned-macros/fixtures/inputs/default/generics_defaults.rs b/crates/stackable-versioned-macros/fixtures/inputs/default/generics_defaults.rs new file mode 100644 index 00000000..2b11c12e --- /dev/null +++ b/crates/stackable-versioned-macros/fixtures/inputs/default/generics_defaults.rs @@ -0,0 +1,9 @@ +#[versioned(version(name = "v1alpha1"), version(name = "v1"))] +// --- +pub struct Foo +where + T: Default, +{ + bar: T, + baz: u8, +} diff --git a/crates/stackable-versioned-macros/fixtures/snapshots/stackable_versioned_macros__test__default_snapshots@generics_defaults.rs.snap b/crates/stackable-versioned-macros/fixtures/snapshots/stackable_versioned_macros__test__default_snapshots@generics_defaults.rs.snap new file mode 100644 index 00000000..aa4910bd --- /dev/null +++ b/crates/stackable-versioned-macros/fixtures/snapshots/stackable_versioned_macros__test__default_snapshots@generics_defaults.rs.snap @@ -0,0 +1,39 @@ +--- +source: crates/stackable-versioned-macros/src/lib.rs +expression: formatted +input_file: crates/stackable-versioned-macros/fixtures/inputs/default/generics_defaults.rs +--- +#[automatically_derived] +pub mod v1alpha1 { + use super::*; + pub struct Foo + where + T: Default, + { + pub bar: T, + pub baz: u8, + } +} +#[automatically_derived] +impl ::std::convert::From> for v1::Foo +where + T: Default, +{ + fn from(__sv_foo: v1alpha1::Foo) -> Self { + Self { + bar: __sv_foo.bar.into(), + baz: __sv_foo.baz.into(), + } + } +} +#[automatically_derived] +pub mod v1 { + use super::*; + pub struct Foo + where + T: Default, + { + pub bar: T, + pub baz: u8, + } +} diff --git a/crates/stackable-versioned-macros/src/codegen/container/enum.rs b/crates/stackable-versioned-macros/src/codegen/container/enum.rs index d3700af4..b9c7de9a 100644 --- a/crates/stackable-versioned-macros/src/codegen/container/enum.rs +++ b/crates/stackable-versioned-macros/src/codegen/container/enum.rs @@ -104,7 +104,9 @@ pub(crate) struct Enum { impl Enum { /// Generates code for the enum definition. pub(crate) fn generate_definition(&self, version: &VersionDefinition) -> TokenStream { - let (_, type_generics, where_clause) = self.generics.split_for_impl(); + let where_clause = self.generics.where_clause.as_ref(); + let type_generics = &self.generics; + let original_attributes = &self.common.original_attributes; let ident = &self.common.idents.original; let version_docs = &version.docs; diff --git a/crates/stackable-versioned-macros/src/codegen/container/struct.rs b/crates/stackable-versioned-macros/src/codegen/container/struct.rs index ed2746d6..9f035275 100644 --- a/crates/stackable-versioned-macros/src/codegen/container/struct.rs +++ b/crates/stackable-versioned-macros/src/codegen/container/struct.rs @@ -135,7 +135,9 @@ pub(crate) struct Struct { impl Struct { /// Generates code for the struct definition. pub(crate) fn generate_definition(&self, version: &VersionDefinition) -> TokenStream { - let (_, type_generics, where_clause) = self.generics.split_for_impl(); + let where_clause = self.generics.where_clause.as_ref(); + let type_generics = &self.generics; + let original_attributes = &self.common.original_attributes; let ident = &self.common.idents.original; let version_docs = &version.docs; From 65b8def2f86d815b82b72fc2392b7f231342dc96 Mon Sep 17 00:00:00 2001 From: Techassi Date: Fri, 21 Mar 2025 15:11:58 +0100 Subject: [PATCH 2/2] chore: 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 1c442183..68835bee 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 generic type parameter defaults in enum/struct definition blocks ([#991]). + +[#991]: https://github.com/stackabletech/operator-rs/pull/991 + ## [0.7.0] - 2025-03-17 ### Changed