@@ -585,26 +585,27 @@ func mustEnforceDefault(t *types.Type, omitEmpty bool) (interface{}, error) {
585
585
}
586
586
}
587
587
588
- func (g openAPITypeWriter ) generateDefault (comments []string , t * types.Type , omitEmpty bool ) error {
588
+ func (g openAPITypeWriter ) generateDefault (comments []string , t * types.Type , omitEmpty bool ) ( * string , error ) {
589
589
t = resolveAliasAndEmbeddedType (t )
590
590
def , err := defaultFromComments (comments )
591
591
if err != nil {
592
- return err
592
+ return nil , err
593
593
}
594
594
if enforced , err := mustEnforceDefault (t , omitEmpty ); err != nil {
595
- return err
595
+ return nil , err
596
596
} else if enforced != nil {
597
597
if def == nil {
598
598
def = enforced
599
599
} else if ! reflect .DeepEqual (def , enforced ) {
600
600
enforcedJson , _ := json .Marshal (enforced )
601
- return fmt .Errorf ("invalid default value (%#v) for non-pointer/non-omitempty. If specified, must be: %v" , def , string (enforcedJson ))
601
+ return nil , fmt .Errorf ("invalid default value (%#v) for non-pointer/non-omitempty. If specified, must be: %v" , def , string (enforcedJson ))
602
602
}
603
603
}
604
604
if def != nil {
605
- g .Do ("Default: $.$,\n " , fmt .Sprintf ("%#v" , def ))
605
+ val := fmt .Sprintf ("%#v" , def )
606
+ return & val , nil
606
607
}
607
- return nil
608
+ return nil , nil
608
609
}
609
610
610
611
func (g openAPITypeWriter ) generateDescription (CommentLines []string ) {
@@ -676,9 +677,16 @@ func (g openAPITypeWriter) generateProperty(m *types.Member, parent *types.Type)
676
677
return nil
677
678
}
678
679
omitEmpty := strings .Contains (reflect .StructTag (m .Tags ).Get ("json" ), "omitempty" )
679
- if err := g .generateDefault (m .CommentLines , m .Type , omitEmpty ); err != nil {
680
+ def , err := g .generateDefault (m .CommentLines , m .Type , omitEmpty )
681
+ if err != nil {
680
682
return fmt .Errorf ("failed to generate default in %v: %v: %v" , parent , m .Name , err )
681
683
}
684
+ if def != nil {
685
+ g .Do ("Default: $.$,\n " , * def )
686
+ if enumType , isEnum := g .enumContext .EnumType (m .Type ); isEnum && ! enumType .IsValid (* def ) {
687
+ return fmt .Errorf ("Default value is not a valid enum value: %v not in %v" , * def , enumType .ValueStrings ())
688
+ }
689
+ }
682
690
t := resolveAliasAndPtrType (m .Type )
683
691
// If we can get a openAPI type and format for this type, we consider it to be simple property
684
692
typeString , format := openapi .OpenAPITypeFormat (t .String ())
@@ -762,9 +770,13 @@ func (g openAPITypeWriter) generateMapProperty(t *types.Type) error {
762
770
763
771
g .Do ("Type: []string{\" object\" },\n " , nil )
764
772
g .Do ("AdditionalProperties: &spec.SchemaOrBool{\n Allows: true,\n Schema: &spec.Schema{\n SchemaProps: spec.SchemaProps{\n " , nil )
765
- if err := g .generateDefault (t .Elem .CommentLines , t .Elem , false ); err != nil {
773
+ def , err := g .generateDefault (t .Elem .CommentLines , t .Elem , false )
774
+ if err != nil {
766
775
return err
767
776
}
777
+ if def != nil {
778
+ g .Do ("Default: $.$,\n " , * def )
779
+ }
768
780
typeString , format := openapi .OpenAPITypeFormat (elemType .String ())
769
781
if typeString != "" {
770
782
g .generateSimpleProperty (typeString , format )
@@ -795,9 +807,13 @@ func (g openAPITypeWriter) generateSliceProperty(t *types.Type) error {
795
807
elemType := resolveAliasAndPtrType (t .Elem )
796
808
g .Do ("Type: []string{\" array\" },\n " , nil )
797
809
g .Do ("Items: &spec.SchemaOrArray{\n Schema: &spec.Schema{\n SchemaProps: spec.SchemaProps{\n " , nil )
798
- if err := g .generateDefault (t .Elem .CommentLines , t .Elem , false ); err != nil {
810
+ def , err := g .generateDefault (t .Elem .CommentLines , t .Elem , false )
811
+ if err != nil {
799
812
return err
800
813
}
814
+ if def != nil {
815
+ g .Do ("Default: $.$,\n " , * def )
816
+ }
801
817
typeString , format := openapi .OpenAPITypeFormat (elemType .String ())
802
818
if typeString != "" {
803
819
g .generateSimpleProperty (typeString , format )
0 commit comments