@@ -181,9 +181,9 @@ impl Struct {
181
181
fn from_json_value( value: #serde_json_path:: Value ) -> :: std:: result:: Result <Self , #parse_object_error> {
182
182
let api_version = value
183
183
. get( "apiVersion" )
184
- . ok_or_else( || #parse_object_error:: FieldNotPresent ) ?
184
+ . ok_or_else( || #parse_object_error:: FieldMissing { field : "apiVersion" . to_string ( ) } ) ?
185
185
. as_str( )
186
- . ok_or_else( || #parse_object_error:: FieldNotStr ) ?;
186
+ . ok_or_else( || #parse_object_error:: FieldNotStr { field : "apiVersion" . to_string ( ) } ) ?;
187
187
188
188
let object = match api_version {
189
189
#( #api_versions => {
@@ -321,6 +321,7 @@ impl Struct {
321
321
let versioned_path = & * kubernetes_arguments. crates . versioned ;
322
322
let kube_core_path = & * kubernetes_arguments. crates . kube_core ;
323
323
324
+ let parse_object_error = quote ! { #versioned_path:: ParseObjectError } ;
324
325
let convert_object_error = quote ! { #versioned_path:: ConvertObjectError } ;
325
326
326
327
// Generate conversion paths and the match arms for these paths
@@ -431,6 +432,24 @@ impl Struct {
431
432
let mut converted_objects = :: std:: vec:: Vec :: with_capacity( objects. len( ) ) ;
432
433
433
434
for object in objects {
435
+ let object_kind = object
436
+ . get( "kind" )
437
+ . ok_or_else( || #convert_object_error:: Parse {
438
+ source: #parse_object_error:: FieldMissing { field: "kind" . to_string( ) }
439
+ } ) ?
440
+ . as_str( )
441
+ . ok_or_else( || #convert_object_error:: Parse {
442
+ source: #parse_object_error:: FieldNotStr { field: "kind" . to_string( ) }
443
+ } ) ?;
444
+ if object_kind != stringify!( #struct_ident) {
445
+ return Err ( #convert_object_error:: Parse {
446
+ source: #parse_object_error:: WrongObjectKind {
447
+ kind: object_kind. to_string( ) ,
448
+ supported_kind: stringify!( #struct_ident) . to_string( ) ,
449
+ }
450
+ } )
451
+ }
452
+
434
453
// This clone is required because in the noop case we move the object into
435
454
// the converted objects vec.
436
455
let current_object = Self :: from_json_value( object. clone( ) )
0 commit comments