@@ -594,14 +594,14 @@ func ConvertCodeToValue(code string, schema *devmodel.JsonSchema, inputType refl
594
594
if ! ok {
595
595
continue
596
596
}
597
- result = parseCompositeLit (cl , schema )
597
+ result = parseCompositeLit (cl , schema , "" )
598
598
case * ast.CompositeLit :
599
599
if schema .Type == devmodel .JsonTypeOfArray {
600
600
result = parseArrayLit (v , schema )
601
601
} else if schema .Type == devmodel .JsonTypeOfObject && schema .AdditionalProperties != nil {
602
602
result = parseMapLit (v , schema )
603
603
} else {
604
- result = parseCompositeLit (v , schema )
604
+ result = parseCompositeLit (v , schema , "schema.Message" )
605
605
}
606
606
case * ast.BasicLit :
607
607
result = parseBasicLit (v )
@@ -626,6 +626,12 @@ func ConvertCodeToValue(code string, schema *devmodel.JsonSchema, inputType refl
626
626
})
627
627
628
628
val := reflect .New (inputType )
629
+ if schema .Type == "interface" {
630
+ implType , ok := GetRegisteredType ("schema.Message" )
631
+ if ok {
632
+ val = reflect .New (implType .Type )
633
+ }
634
+ }
629
635
630
636
if err := convertToValue (result , val .Elem ()); err != nil {
631
637
return reflect.Value {}, err
@@ -646,9 +652,9 @@ func parseCallExpr(call *ast.CallExpr) interface{} {
646
652
return nil
647
653
}
648
654
649
- func parseCompositeLit (cl * ast.CompositeLit , schema * devmodel.JsonSchema ) map [string ]interface {} {
655
+ func parseCompositeLit (cl * ast.CompositeLit , schema * devmodel.JsonSchema , identifier string ) map [string ]interface {} {
650
656
data := make (map [string ]interface {})
651
- fieldTagMap := buildFieldTagMap (schema )
657
+ fieldTagMap := buildFieldTagMap (schema , identifier )
652
658
653
659
for _ , elt := range cl .Elts {
654
660
kv , ok := elt .(* ast.KeyValueExpr )
@@ -698,7 +704,7 @@ func parseExpr(expr ast.Expr, schema *devmodel.JsonSchema) interface{} {
698
704
if schema .AdditionalProperties != nil {
699
705
return parseMapLit (v , schema )
700
706
}
701
- return parseCompositeLit (v , schema )
707
+ return parseCompositeLit (v , schema , "" )
702
708
case devmodel .JsonTypeOfArray :
703
709
return parseArrayLit (v , schema )
704
710
default :
@@ -751,7 +757,7 @@ func parseMapLit(cl *ast.CompositeLit, schema *devmodel.JsonSchema) map[string]i
751
757
} else if valueSchema .Type == devmodel .JsonTypeOfArray {
752
758
value = parseArrayLit (v , valueSchema )
753
759
} else {
754
- value = parseCompositeLit (v , valueSchema )
760
+ value = parseCompositeLit (v , valueSchema , "" )
755
761
}
756
762
default :
757
763
value = parseExpr (kv .Value , valueSchema )
@@ -761,7 +767,15 @@ func parseMapLit(cl *ast.CompositeLit, schema *devmodel.JsonSchema) map[string]i
761
767
return m
762
768
}
763
769
764
- func buildFieldTagMap (schema * devmodel.JsonSchema ) map [string ]* FieldInfo {
770
+ func buildFieldTagMap (schema * devmodel.JsonSchema , identifier string ) map [string ]* FieldInfo {
771
+ if schema .Type == "interface" {
772
+ implType , ok := GetRegisteredType (identifier )
773
+ if ! ok {
774
+ return nil
775
+ }
776
+ return buildFieldTagMap (implType .Schema , identifier )
777
+ }
778
+
765
779
fieldTagMap := make (map [string ]* FieldInfo )
766
780
for jsonKey , propSchema := range schema .Properties {
767
781
if propSchema .Description == "" {
0 commit comments