Skip to content

Commit 629e29c

Browse files
committed
fix(stackable-versioned): Emit correct enum based on kube kind argument
1 parent 3790332 commit 629e29c

File tree

5 files changed

+219
-8
lines changed

5 files changed

+219
-8
lines changed
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
#[versioned(
2+
version(name = "v1alpha1"),
3+
version(name = "v1beta1"),
4+
version(name = "v1"),
5+
k8s(
6+
group = "stackable.tech",
7+
kind = "FooBar",
8+
singular = "foo",
9+
plural = "foos",
10+
namespaced,
11+
)
12+
)]
13+
// ---
14+
#[derive(
15+
Clone, Debug, serde::Deserialize, serde::Serialize, schemars::JsonSchema, kube::CustomResource,
16+
)]
17+
pub struct FooSpec {
18+
#[versioned(
19+
added(since = "v1beta1"),
20+
changed(since = "v1", from_name = "bah", from_type = "u16")
21+
)]
22+
bar: usize,
23+
baz: bool,
24+
}

crates/stackable-versioned-macros/fixtures/snapshots/stackable_versioned_macros__test__k8s_snapshots@renamed_kind.rs.snap

Lines changed: 177 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

crates/stackable-versioned-macros/src/codegen/container/enum.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ impl Container {
3737
.map_or(false, |s| s.from.is_present()),
3838
};
3939

40-
let idents: ContainerIdents = item_enum.ident.into();
40+
let idents = ContainerIdents::from(item_enum.ident, None);
4141

4242
let common = CommonContainerData {
4343
original_attributes: item_enum.attrs,
@@ -73,7 +73,7 @@ impl Container {
7373
.map_or(false, |s| s.from.is_present()),
7474
};
7575

76-
let idents: ContainerIdents = item_enum.ident.into();
76+
let idents = ContainerIdents::from(item_enum.ident, None);
7777

7878
let common = CommonContainerData {
7979
original_attributes: item_enum.attrs,

crates/stackable-versioned-macros/src/codegen/container/mod.rs

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
use darling::{util::IdentString, Result};
2-
use proc_macro2::TokenStream;
2+
use proc_macro2::{Span, TokenStream};
33
use quote::quote;
44
use syn::{Attribute, Ident, ItemEnum, ItemStruct, Visibility};
55

@@ -235,12 +235,22 @@ pub(crate) struct ContainerIdents {
235235
pub(crate) from: IdentString,
236236
}
237237

238-
impl From<Ident> for ContainerIdents {
239-
fn from(ident: Ident) -> Self {
238+
impl ContainerIdents {
239+
pub(crate) fn from(ident: Ident, kubernetes_options: Option<&KubernetesOptions>) -> Self {
240+
let kubernetes = kubernetes_options.map_or_else(
241+
|| ident.as_cleaned_kubernetes_ident(),
242+
|options| {
243+
options.kind.as_ref().map_or_else(
244+
|| ident.as_cleaned_kubernetes_ident(),
245+
|kind| IdentString::from(Ident::new(kind, Span::call_site())),
246+
)
247+
},
248+
);
249+
240250
Self {
241-
kubernetes: ident.as_cleaned_kubernetes_ident(),
242251
from: ident.as_from_impl_ident(),
243252
original: ident.into(),
253+
kubernetes,
244254
}
245255
}
246256
}

crates/stackable-versioned-macros/src/codegen/container/struct.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ impl Container {
3232
}
3333

3434
let kubernetes_options = attributes.kubernetes_arguments.map(Into::into);
35-
let idents: ContainerIdents = item_struct.ident.into();
35+
let idents = ContainerIdents::from(item_struct.ident, kubernetes_options.as_ref());
3636

3737
// Validate K8s specific requirements
3838
// Ensure that the struct name includes the 'Spec' suffix.
@@ -78,7 +78,7 @@ impl Container {
7878
}
7979

8080
let kubernetes_options = attributes.kubernetes_arguments.map(Into::into);
81-
let idents: ContainerIdents = item_struct.ident.into();
81+
let idents = ContainerIdents::from(item_struct.ident, kubernetes_options.as_ref());
8282

8383
// Validate K8s specific requirements
8484
// Ensure that the struct name includes the 'Spec' suffix.

0 commit comments

Comments
 (0)