diff --git a/src/main.rs b/src/main.rs index 7d872e6..8182b21 100644 --- a/src/main.rs +++ b/src/main.rs @@ -3,7 +3,7 @@ use std::path::PathBuf; use anyhow::{anyhow, Context, Result}; use clap::{CommandFactory, Parser, Subcommand}; use k8s_openapi::apiextensions_apiserver::pkg::apis::apiextensions::v1::{ - CustomResourceDefinition, CustomResourceDefinitionVersion, CustomResourceSubresources, + CustomResourceDefinition, CustomResourceDefinitionVersion, }; use kopium::{analyze, Config, Container}; use kube::{api, core::Version, Api, Client, ResourceExt}; @@ -222,8 +222,8 @@ impl Kopium { if scope == "Namespaced" { println!(r#"#[kube(namespaced)]"#); } - if let Some(CustomResourceSubresources { status: Some(_), .. }) = - version.subresources + if version.subresources.as_ref().is_some_and(|c| c.status.is_some()) + && self.has_status_resource(&structs) { println!(r#"#[kube(status = "{}Status")]"#, kind); } @@ -327,6 +327,12 @@ impl Kopium { println!("#[derive({})]", derives.join(", ")); } + fn has_status_resource(&self, results: &[Container]) -> bool { + results + .iter() + .any(|o| o.is_status_container() && !o.members.is_empty()) + } + fn print_prelude(&self, results: &[Container]) { if !self.hide_kube { println!("use kube::CustomResource;"); diff --git a/src/output.rs b/src/output.rs index 11c5508..f16e783 100644 --- a/src/output.rs +++ b/src/output.rs @@ -73,6 +73,10 @@ impl Container { self.level == 1 && self.name.ends_with("Spec") } + pub fn is_status_container(&self) -> bool { + self.level == 1 && self.name.ends_with("Status") + } + pub fn contains_conditions(&self) -> bool { self.members.iter().any(|m| m.type_.contains("Vec")) }