@@ -424,9 +424,29 @@ func ToV3Response(response *openapi2.Response) (*openapi3.ResponseRef, error) {
424
424
if schemaRef := response .Schema ; schemaRef != nil {
425
425
result .WithJSONSchemaRef (ToV3SchemaRef (schemaRef ))
426
426
}
427
+ if headers := response .Headers ; len (headers ) > 0 {
428
+ result .Headers = ToV3Headers (headers )
429
+ }
427
430
return & openapi3.ResponseRef {Value : result }, nil
428
431
}
429
432
433
+ func ToV3Headers (defs map [string ]* openapi2.Header ) openapi3.Headers {
434
+ headers := make (openapi3.Headers , len (defs ))
435
+ for name , header := range defs {
436
+ header .In = ""
437
+ header .Name = ""
438
+ if ref := header .Ref ; ref != "" {
439
+ headers [name ] = & openapi3.HeaderRef {Ref : ToV3Ref (ref )}
440
+ } else {
441
+ parameter , _ , _ , _ := ToV3Parameter (nil , & header .Parameter , nil )
442
+ headers [name ] = & openapi3.HeaderRef {Value : & openapi3.Header {
443
+ Parameter : * parameter .Value ,
444
+ }}
445
+ }
446
+ }
447
+ return headers
448
+ }
449
+
430
450
func ToV3Schemas (defs map [string ]* openapi3.SchemaRef ) map [string ]* openapi3.SchemaRef {
431
451
schemas := make (map [string ]* openapi3.SchemaRef , len (defs ))
432
452
for name , schema := range defs {
@@ -654,6 +674,7 @@ func FromV3(doc3 *openapi3.T) (*openapi2.T, error) {
654
674
doc2 .SecurityDefinitions = doc2SecuritySchemes
655
675
}
656
676
doc2 .Security = FromV3SecurityRequirements (doc3 .Security )
677
+
657
678
return doc2 , nil
658
679
}
659
680
@@ -1048,9 +1069,30 @@ func FromV3Response(ref *openapi3.ResponseRef, components *openapi3.Components)
1048
1069
result .Schema , _ = FromV3SchemaRef (ct .Schema , components )
1049
1070
}
1050
1071
}
1072
+ if headers := response .Headers ; len (headers ) > 0 {
1073
+ var err error
1074
+ if result .Headers , err = FromV3Headers (headers , components ); err != nil {
1075
+ return nil , err
1076
+ }
1077
+ }
1051
1078
return result , nil
1052
1079
}
1053
1080
1081
+ func FromV3Headers (defs openapi3.Headers , components * openapi3.Components ) (map [string ]* openapi2.Header , error ) {
1082
+ headers := make (map [string ]* openapi2.Header , len (defs ))
1083
+ for name , header := range defs {
1084
+ ref := openapi3.ParameterRef {Ref : header .Ref , Value : & header .Value .Parameter }
1085
+ parameter , err := FromV3Parameter (& ref , components )
1086
+ if err != nil {
1087
+ return nil , err
1088
+ }
1089
+ parameter .In = ""
1090
+ parameter .Name = ""
1091
+ headers [name ] = & openapi2.Header {Parameter : * parameter }
1092
+ }
1093
+ return headers , nil
1094
+ }
1095
+
1054
1096
func FromV3SecurityScheme (doc3 * openapi3.T , ref * openapi3.SecuritySchemeRef ) (* openapi2.SecurityScheme , error ) {
1055
1097
securityScheme := ref .Value
1056
1098
if securityScheme == nil {
0 commit comments