@@ -402,6 +402,7 @@ type Option0 struct {
402
402
}
403
403
type Option1 struct {}
404
404
type Option2 bool
405
+ type Option3 []byte
405
406
type isOption interface {
406
407
isOption ()
407
408
}
@@ -415,6 +416,7 @@ type OptionalOption struct {
415
416
func (* Option0 ) isOption () {}
416
417
func (Option1 ) isOption () {}
417
418
func (Option2 ) isOption () {}
419
+ func (Option3 ) isOption () {}
418
420
419
421
var optionEnumDef = []EnumVariant {
420
422
{
@@ -432,6 +434,11 @@ var optionEnumDef = []EnumVariant{
432
434
Value : 2 ,
433
435
Template : Option2 (false ),
434
436
},
437
+ {
438
+ Name : "option" ,
439
+ Value : 3 ,
440
+ Template : Option3 (nil ),
441
+ },
435
442
}
436
443
437
444
func (* Option ) EnumTypes () []EnumVariant { return optionEnumDef }
@@ -460,6 +467,20 @@ func TestEnum(t *testing.T) {
460
467
b : hexMustDecode ("02 01" ),
461
468
name : "ptr to struct with real value as enum variant" ,
462
469
},
470
+ {
471
+ v : & Option {
472
+ Option : Option3 ([]byte {0x11 , 0x22 }),
473
+ },
474
+ b : hexMustDecode ("03 02 11 22" ),
475
+ name : "ptr to struct with slice as enum variant" ,
476
+ },
477
+ {
478
+ v : & Option {
479
+ Option : Option3 ([]byte {}),
480
+ },
481
+ b : hexMustDecode ("03 00" ),
482
+ name : "ptr to struct with nil slice as enum variant" ,
483
+ },
463
484
{
464
485
v : Option {
465
486
Option : Option1 {},
@@ -481,11 +502,45 @@ func TestEnum(t *testing.T) {
481
502
})
482
503
}
483
504
484
- type Wrapper struct {
505
+ type OptionWrap struct {
506
+ OptionStruct Option
507
+ OptionStructPtr * Option
508
+ }
509
+
510
+ func TestEnumInStruct (t * testing.T ) {
511
+ runTest (t , []* testCase {
512
+ {
513
+ v : & OptionWrap {
514
+ OptionStruct : Option {
515
+ Option : Option3 ([]byte {0x11 , 0x22 }),
516
+ },
517
+ OptionStructPtr : & Option {
518
+ Option : Option1 {},
519
+ },
520
+ },
521
+ b : hexMustDecode ("03 02 1122 01" ),
522
+ name : "enum struct in struct" ,
523
+ },
524
+ {
525
+ v : & OptionWrap {
526
+ OptionStructPtr : & Option {
527
+ Option : Option3 ([]byte {0x11 , 0x22 }),
528
+ },
529
+ OptionStruct : Option {
530
+ Option : Option1 {},
531
+ },
532
+ },
533
+ b : hexMustDecode ("01 03 02 1122" ),
534
+ name : "enum struct in struct 2" ,
535
+ },
536
+ })
537
+ }
538
+
539
+ type OptionSlice struct {
485
540
Option []isOption `lcs:"enum=option"`
486
541
}
487
542
488
- func (* Wrapper ) EnumTypes () []EnumVariant {
543
+ func (* OptionSlice ) EnumTypes () []EnumVariant {
489
544
return []EnumVariant {
490
545
{
491
546
Name : "option" ,
@@ -508,7 +563,7 @@ func (*Wrapper) EnumTypes() []EnumVariant {
508
563
func TestEnumSlice (t * testing.T ) {
509
564
runTest (t , []* testCase {
510
565
{
511
- v : & Wrapper {
566
+ v : & OptionSlice {
512
567
Option : []isOption {
513
568
& Option0 {5 },
514
569
Option1 {},
@@ -521,11 +576,11 @@ func TestEnumSlice(t *testing.T) {
521
576
})
522
577
}
523
578
524
- type Wrapper2 struct {
579
+ type OptionSlice2D struct {
525
580
Option [][]isOption `lcs:"enum=option"`
526
581
}
527
582
528
- func (* Wrapper2 ) EnumTypes () []EnumVariant {
583
+ func (* OptionSlice2D ) EnumTypes () []EnumVariant {
529
584
return []EnumVariant {
530
585
{
531
586
Name : "option" ,
@@ -548,7 +603,7 @@ func (*Wrapper2) EnumTypes() []EnumVariant {
548
603
func TestEnum2DSlice (t * testing.T ) {
549
604
runTest (t , []* testCase {
550
605
{
551
- v : & Wrapper2 {
606
+ v : & OptionSlice2D {
552
607
Option : [][]isOption {
553
608
{
554
609
& Option0 {5 },
0 commit comments