@@ -156,7 +156,8 @@ impl Struct {
156156 let status_struct = self . generate_kubernetes_status_struct ( kubernetes_arguments, is_nested) ;
157157 let version_enum =
158158 self . generate_kubernetes_version_enum ( kubernetes_arguments, tokens, vis, is_nested) ;
159- let convert_method = self . generate_kubernetes_conversion ( versions) ;
159+ let ( try_convert_fn, convert_objects_fn) =
160+ self . generate_kubernetes_conversion_functions ( versions) ;
160161
161162 let parse_object_error = quote ! { #versioned_path:: ParseObjectError } ;
162163
@@ -178,7 +179,7 @@ impl Struct {
178179 #kube_core_path:: crd:: merge_crds( vec![ #( #crd_fns) , * ] , stored_apiversion. as_version_str( ) )
179180 }
180181
181- #convert_method
182+ #convert_objects_fn
182183
183184 fn from_json_object( object_value: #serde_json_path:: Value ) -> :: std:: result:: Result <Self , #parse_object_error> {
184185 let object_kind = object_value
@@ -227,6 +228,10 @@ impl Struct {
227228 }
228229 }
229230
231+ impl #versioned_path:: KubernetesConvertable for #enum_ident {
232+ #try_convert_fn
233+ }
234+
230235 #version_enum
231236 #status_struct
232237 } )
@@ -354,11 +359,23 @@ impl Struct {
354359 } )
355360 }
356361
357- fn generate_kubernetes_conversion (
362+ /// Generates functions that are related to Kubernetes conversion.
363+ ///
364+ /// It will return two functions:
365+ ///
366+ /// 1. `try_convert`: This function should be used to implement the
367+ /// `stackable_versioned::KubernetesConvertable` trait.
368+ /// 2. `convert_objects`: This is an internal helper for `try_convert`
369+ fn generate_kubernetes_conversion_functions (
358370 & self ,
359371 versions : & [ VersionDefinition ] ,
360- ) -> Option < TokenStream > {
361- let kubernetes_arguments = self . common . options . kubernetes_arguments . as_ref ( ) ?;
372+ ) -> ( TokenStream , TokenStream ) {
373+ let kubernetes_arguments = self
374+ . common
375+ . options
376+ . kubernetes_arguments
377+ . as_ref ( )
378+ . expect ( "The kubernetes arguments must be present when generating Kubernetes conversion functions" ) ;
362379
363380 let struct_ident = & self . common . idents . kubernetes ;
364381 let version_enum_ident = & self . common . idents . kubernetes_version ;
@@ -398,10 +415,10 @@ impl Struct {
398415 }
399416 . into_doc_comments ( ) ;
400417
401- Some ( quote ! {
418+ let try_convert_fn = quote ! {
402419 #( #[ doc = #docs] ) *
403420 #try_convert_instrumentation
404- pub fn try_convert( review: #kube_core_path:: conversion:: ConversionReview )
421+ fn try_convert( review: #kube_core_path:: conversion:: ConversionReview )
405422 -> #kube_core_path:: conversion:: ConversionReview
406423 {
407424 // First, turn the review into a conversion request
@@ -462,7 +479,8 @@ impl Struct {
462479
463480 response. into_review( )
464481 }
465-
482+ } ;
483+ let convert_objects_fn = quote ! {
466484 #convert_objects_instrumentation
467485 fn convert_objects(
468486 objects: :: std:: vec:: Vec <#serde_json_path:: Value >,
@@ -501,7 +519,9 @@ impl Struct {
501519
502520 :: std:: result:: Result :: Ok ( converted_objects)
503521 }
504- } )
522+ } ;
523+
524+ ( try_convert_fn, convert_objects_fn)
505525 }
506526
507527 fn generate_kubernetes_conversion_match_arms (
0 commit comments