From e838d2122c8eeda903bb4d07bf59bb69008e0362 Mon Sep 17 00:00:00 2001 From: Techassi Date: Thu, 20 Feb 2025 15:19:18 +0100 Subject: [PATCH 1/2] refactor: Move preserve_module into options() --- .../inputs/default/module_preserve.rs | 2 +- .../fixtures/inputs/k8s/module_preserve.rs | 2 +- .../src/attrs/common.rs | 24 +++++++++++-------- .../src/attrs/container.rs | 18 +++++++++++--- .../src/attrs/module.rs | 16 +++++++++++-- .../src/codegen/container/enum.rs | 2 +- .../src/codegen/container/struct.rs | 2 +- .../src/codegen/mod.rs | 4 ++-- crates/stackable-versioned-macros/src/lib.rs | 11 ++++++--- 9 files changed, 57 insertions(+), 24 deletions(-) diff --git a/crates/stackable-versioned-macros/fixtures/inputs/default/module_preserve.rs b/crates/stackable-versioned-macros/fixtures/inputs/default/module_preserve.rs index 84298e38c..d6d3c3b38 100644 --- a/crates/stackable-versioned-macros/fixtures/inputs/default/module_preserve.rs +++ b/crates/stackable-versioned-macros/fixtures/inputs/default/module_preserve.rs @@ -2,7 +2,7 @@ version(name = "v1alpha1"), version(name = "v1"), version(name = "v2alpha1"), - preserve_module + options(preserve_module) )] // --- pub(crate) mod versioned { diff --git a/crates/stackable-versioned-macros/fixtures/inputs/k8s/module_preserve.rs b/crates/stackable-versioned-macros/fixtures/inputs/k8s/module_preserve.rs index f45921fab..14b338f18 100644 --- a/crates/stackable-versioned-macros/fixtures/inputs/k8s/module_preserve.rs +++ b/crates/stackable-versioned-macros/fixtures/inputs/k8s/module_preserve.rs @@ -2,7 +2,7 @@ version(name = "v1alpha1"), version(name = "v1"), version(name = "v2alpha1"), - preserve_module + options(preserve_module) )] // --- pub(crate) mod versioned { diff --git a/crates/stackable-versioned-macros/src/attrs/common.rs b/crates/stackable-versioned-macros/src/attrs/common.rs index c70426002..f4720f147 100644 --- a/crates/stackable-versioned-macros/src/attrs/common.rs +++ b/crates/stackable-versioned-macros/src/attrs/common.rs @@ -5,17 +5,27 @@ use darling::{ use itertools::Itertools; use k8s_version::Version; +pub trait CommonOptions { + fn allow_unsorted(&self) -> Flag; +} + #[derive(Debug, FromMeta)] #[darling(and_then = CommonRootArguments::validate)] -pub(crate) struct CommonRootArguments { +pub(crate) struct CommonRootArguments +where + T: CommonOptions + Default, +{ #[darling(default)] - pub(crate) options: RootOptions, + pub(crate) options: T, #[darling(multiple, rename = "version")] pub(crate) versions: SpannedValue>, } -impl CommonRootArguments { +impl CommonRootArguments +where + T: CommonOptions + Default, +{ fn validate(mut self) -> Result { let mut errors = Error::accumulator(); @@ -32,7 +42,7 @@ impl CommonRootArguments { // (if allow_unsorted is set). self.versions.sort_by(|lhs, rhs| lhs.name.cmp(&rhs.name)); - if !self.options.allow_unsorted.is_present() && !is_sorted { + if !self.options.allow_unsorted().is_present() && !is_sorted { let versions = self.versions.iter().map(|v| v.name).join(", "); errors.push(Error::custom(format!( @@ -59,12 +69,6 @@ impl CommonRootArguments { } } -#[derive(Clone, Debug, Default, FromMeta)] -pub(crate) struct RootOptions { - pub(crate) allow_unsorted: Flag, - pub(crate) skip: Option, -} - /// This struct contains supported version arguments. /// /// Supported arguments are: diff --git a/crates/stackable-versioned-macros/src/attrs/container.rs b/crates/stackable-versioned-macros/src/attrs/container.rs index f9af53c25..b7a0c0f9b 100644 --- a/crates/stackable-versioned-macros/src/attrs/container.rs +++ b/crates/stackable-versioned-macros/src/attrs/container.rs @@ -1,7 +1,7 @@ -use darling::{Error, FromAttributes, FromMeta, Result}; +use darling::{util::Flag, Error, FromAttributes, FromMeta, Result}; use crate::attrs::{ - common::{CommonRootArguments, SkipArguments}, + common::{CommonOptions, CommonRootArguments, SkipArguments}, k8s::KubernetesArguments, }; @@ -12,7 +12,7 @@ pub(crate) struct StandaloneContainerAttributes { pub(crate) kubernetes_arguments: Option, #[darling(flatten)] - pub(crate) common_root_arguments: CommonRootArguments, + pub(crate) common: CommonRootArguments, } impl StandaloneContainerAttributes { @@ -25,6 +25,18 @@ impl StandaloneContainerAttributes { } } +#[derive(Debug, FromMeta, Default)] +pub(crate) struct StandaloneContainerOptions { + pub(crate) allow_unsorted: Flag, + pub(crate) skip: Option, +} + +impl CommonOptions for StandaloneContainerOptions { + fn allow_unsorted(&self) -> Flag { + self.allow_unsorted + } +} + #[derive(Debug, FromAttributes)] #[darling( attributes(versioned), diff --git a/crates/stackable-versioned-macros/src/attrs/module.rs b/crates/stackable-versioned-macros/src/attrs/module.rs index b6c3b5ee4..df4cb25c3 100644 --- a/crates/stackable-versioned-macros/src/attrs/module.rs +++ b/crates/stackable-versioned-macros/src/attrs/module.rs @@ -1,10 +1,22 @@ use darling::{util::Flag, FromMeta}; -use crate::attrs::common::CommonRootArguments; +use crate::attrs::common::{CommonOptions, CommonRootArguments, SkipArguments}; #[derive(Debug, FromMeta)] pub(crate) struct ModuleAttributes { #[darling(flatten)] - pub(crate) common_root_arguments: CommonRootArguments, + pub(crate) common: CommonRootArguments, +} + +#[derive(Debug, FromMeta, Default)] +pub(crate) struct ModuleOptions { + pub(crate) allow_unsorted: Flag, + pub(crate) skip: Option, pub(crate) preserve_module: Flag, } + +impl CommonOptions for ModuleOptions { + fn allow_unsorted(&self) -> Flag { + self.allow_unsorted + } +} diff --git a/crates/stackable-versioned-macros/src/codegen/container/enum.rs b/crates/stackable-versioned-macros/src/codegen/container/enum.rs index 052706f67..f1c6d1e77 100644 --- a/crates/stackable-versioned-macros/src/codegen/container/enum.rs +++ b/crates/stackable-versioned-macros/src/codegen/container/enum.rs @@ -31,7 +31,7 @@ impl Container { let options = ContainerOptions { kubernetes_options: None, skip_from: attributes - .common_root_arguments + .common .options .skip .map_or(false, |s| s.from.is_present()), diff --git a/crates/stackable-versioned-macros/src/codegen/container/struct.rs b/crates/stackable-versioned-macros/src/codegen/container/struct.rs index 081b9e9e8..e98d4d763 100644 --- a/crates/stackable-versioned-macros/src/codegen/container/struct.rs +++ b/crates/stackable-versioned-macros/src/codegen/container/struct.rs @@ -44,7 +44,7 @@ impl Container { let options = ContainerOptions { skip_from: attributes - .common_root_arguments + .common .options .skip .map_or(false, |s| s.from.is_present()), diff --git a/crates/stackable-versioned-macros/src/codegen/mod.rs b/crates/stackable-versioned-macros/src/codegen/mod.rs index 8b2c8dba9..50fa798fe 100644 --- a/crates/stackable-versioned-macros/src/codegen/mod.rs +++ b/crates/stackable-versioned-macros/src/codegen/mod.rs @@ -32,7 +32,7 @@ pub(crate) struct VersionDefinition { impl From<&StandaloneContainerAttributes> for Vec { fn from(attributes: &StandaloneContainerAttributes) -> Self { attributes - .common_root_arguments + .common .versions .iter() .map(|v| VersionDefinition { @@ -53,7 +53,7 @@ impl From<&StandaloneContainerAttributes> for Vec { impl From<&ModuleAttributes> for Vec { fn from(attributes: &ModuleAttributes) -> Self { attributes - .common_root_arguments + .common .versions .iter() .map(|v| VersionDefinition { diff --git a/crates/stackable-versioned-macros/src/lib.rs b/crates/stackable-versioned-macros/src/lib.rs index 368f94e3d..edce3290d 100644 --- a/crates/stackable-versioned-macros/src/lib.rs +++ b/crates/stackable-versioned-macros/src/lib.rs @@ -239,7 +239,7 @@ mod utils; /// #[versioned( /// version(name = "v1alpha1"), /// version(name = "v1"), -/// preserve_module +/// options(preserve_module) /// )] /// mod versioned { /// struct Foo { @@ -732,9 +732,14 @@ fn versioned_impl(attrs: proc_macro2::TokenStream, input: Item) -> proc_macro2:: }; let versions: Vec = (&module_attributes).into(); - let preserve_modules = module_attributes.preserve_module.is_present(); + let preserve_modules = module_attributes + .common + .options + .preserve_module + .is_present(); + let skip_from = module_attributes - .common_root_arguments + .common .options .skip .as_ref() From 2393a7c84970462ee6591d520677b4f1114c9ab8 Mon Sep 17 00:00:00 2001 From: Techassi Date: Thu, 20 Feb 2025 15:27:32 +0100 Subject: [PATCH 2/2] chore: Update changelog --- 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 472f239f8..44b767b84 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] +### Changed + +- BREAKING: Move `preserve_module` option into `options` to unify option interface ([#961]). + +[#961]: https://github.com/stackabletech/operator-rs/pull/961 + ## [0.5.1] - 2025-02-14 ### Added