@@ -156,7 +156,8 @@ impl Struct {
156
156
let status_struct = self . generate_kubernetes_status_struct ( kubernetes_arguments, is_nested) ;
157
157
let version_enum =
158
158
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) ;
160
161
161
162
let parse_object_error = quote ! { #versioned_path:: ParseObjectError } ;
162
163
@@ -178,7 +179,7 @@ impl Struct {
178
179
#kube_core_path:: crd:: merge_crds( vec![ #( #crd_fns) , * ] , stored_apiversion. as_version_str( ) )
179
180
}
180
181
181
- #convert_method
182
+ #convert_objects_fn
182
183
183
184
fn from_json_object( object_value: #serde_json_path:: Value ) -> :: std:: result:: Result <Self , #parse_object_error> {
184
185
let object_kind = object_value
@@ -227,6 +228,10 @@ impl Struct {
227
228
}
228
229
}
229
230
231
+ impl #versioned_path:: KubernetesConvertable for #enum_ident {
232
+ #try_convert_fn
233
+ }
234
+
230
235
#version_enum
231
236
#status_struct
232
237
} )
@@ -354,11 +359,23 @@ impl Struct {
354
359
} )
355
360
}
356
361
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 (
358
370
& self ,
359
371
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" ) ;
362
379
363
380
let struct_ident = & self . common . idents . kubernetes ;
364
381
let version_enum_ident = & self . common . idents . kubernetes_version ;
@@ -398,10 +415,10 @@ impl Struct {
398
415
}
399
416
. into_doc_comments ( ) ;
400
417
401
- Some ( quote ! {
418
+ let try_convert_fn = quote ! {
402
419
#( #[ doc = #docs] ) *
403
420
#try_convert_instrumentation
404
- pub fn try_convert( review: #kube_core_path:: conversion:: ConversionReview )
421
+ fn try_convert( review: #kube_core_path:: conversion:: ConversionReview )
405
422
-> #kube_core_path:: conversion:: ConversionReview
406
423
{
407
424
// First, turn the review into a conversion request
@@ -462,7 +479,8 @@ impl Struct {
462
479
463
480
response. into_review( )
464
481
}
465
-
482
+ } ;
483
+ let convert_objects_fn = quote ! {
466
484
#convert_objects_instrumentation
467
485
fn convert_objects(
468
486
objects: :: std:: vec:: Vec <#serde_json_path:: Value >,
@@ -501,7 +519,9 @@ impl Struct {
501
519
502
520
:: std:: result:: Result :: Ok ( converted_objects)
503
521
}
504
- } )
522
+ } ;
523
+
524
+ ( try_convert_fn, convert_objects_fn)
505
525
}
506
526
507
527
fn generate_kubernetes_conversion_match_arms (
0 commit comments