@@ -451,6 +451,15 @@ type JsonDef struct {
451
451
Metadata map [string ]interface {} `json:"metadata"`
452
452
}
453
453
454
+ type JsonArrayDef struct {
455
+ JsonDef
456
+ Flags []model.Flag `json:"flags"`
457
+ }
458
+ type JsonMapDef struct {
459
+ JsonDef
460
+ Flags map [string ]model.Flag `json:"flags"`
461
+ }
462
+
454
463
// configToFlagDefinition convert string configurations to flags and store them to pointer newFlags
455
464
func (je * JSON ) configToFlagDefinition (config string , definition * Definition ) error {
456
465
// json schema validation
@@ -481,26 +490,25 @@ func (je *JSON) configToFlagDefinition(config string, definition *Definition) er
481
490
// Process flags directly
482
491
switch v := intermediateConfig .Flags .(type ) {
483
492
case map [string ]interface {}: // Handle ValidFlags format
484
- for k , e := range v {
485
- flag , err := convertToModelFlag (e )
486
- if err != nil {
487
- return fmt .Errorf ("failed to process flag for key %s: %w" , k , err )
488
- }
489
- flag .Key = k // Populate the `Key` field explicitly
490
- definition .Flags = append (definition .Flags , flag )
493
+ var jsonDef JsonMapDef
494
+ err = json .Unmarshal ([]byte (transposedConfig ), & jsonDef )
495
+ if err != nil {
496
+ return fmt .Errorf ("unmarshalling provided configurations: %w" , err )
497
+ }
498
+ var flags []model.Flag
499
+ for key , flagDef := range jsonDef .Flags {
500
+ flagDef .Key = key
501
+ flags = append (flags , flagDef )
491
502
}
503
+ definition .Flags = flags
492
504
493
505
case []interface {}: // Handle ValidMapFlags format
494
- for _ , value := range v {
495
- flag , err := convertToModelFlag (value )
496
- if err != nil {
497
- return fmt .Errorf ("failed to process flag: %w" , err )
498
- }
499
- if flag .Key == "" {
500
- return fmt .Errorf ("invalid key for flag: %s" , value )
501
- }
502
- definition .Flags = append (definition .Flags , flag )
506
+ var jsonDef JsonArrayDef
507
+ err = json .Unmarshal ([]byte (transposedConfig ), & jsonDef )
508
+ if err != nil {
509
+ return fmt .Errorf ("unmarshalling provided configurations: %w" , err )
503
510
}
511
+ definition .Flags = jsonDef .Flags
504
512
505
513
default :
506
514
return fmt .Errorf ("unexpected type for flags property: %T" , v )
@@ -509,31 +517,6 @@ func (je *JSON) configToFlagDefinition(config string, definition *Definition) er
509
517
return validateDefaultVariants (definition )
510
518
}
511
519
512
- // Refactored Helper Function to Convert interface{} to model.Flag
513
- func convertToModelFlag (data interface {}) (model.Flag , error ) {
514
-
515
- type Flag struct {
516
- Key string `json:"key,omitempty"`
517
- model.Flag
518
- }
519
-
520
- var flag Flag
521
- jsonBytes , err := json .Marshal (data )
522
-
523
- if err != nil {
524
- return flag .Flag , fmt .Errorf ("failed to marshal flag data: %w" , err )
525
- }
526
-
527
- if err := json .Unmarshal (jsonBytes , & flag ); err != nil {
528
- return flag .Flag , fmt .Errorf ("failed to unmarshal flag data: %w" , err )
529
- }
530
-
531
- exportFlag := flag .Flag
532
- exportFlag .Key = flag .Key
533
-
534
- return exportFlag , nil
535
- }
536
-
537
520
// validateDefaultVariants returns an error if any of the default variants aren't valid
538
521
func validateDefaultVariants (flags * Definition ) error {
539
522
for _ , flag := range flags .Flags {
0 commit comments