@@ -19,6 +19,7 @@ type ServiceDefinition struct {
1919
2020func GetServiceDefinition (api * openapi.OpenAPI , pathPrefix string ) (* ServiceDefinition , error ) {
2121 slog .Debug ("parsing openapi" , "pathPrefix" , pathPrefix )
22+ oasVersion := api .Info .Version
2223 resourceBySingular := make (map [string ]* Resource )
2324 // we try to parse the paths to find possible resources, since
2425 // they may not always be annotated as such.
@@ -40,15 +41,13 @@ func GetServiceDefinition(api *openapi.OpenAPI, pathPrefix string) (*ServiceDefi
4041 }
4142 if pathItem .Get != nil {
4243 if resp , ok := pathItem .Get .Responses ["200" ]; ok {
43- ct := resp .Content [contentType ]
44- sRef = ct .Schema
44+ sRef = getSchemaFromResponse (resp , oasVersion )
4545 r .GetMethod = & GetMethod {}
4646 }
4747 }
4848 if pathItem .Patch != nil {
4949 if resp , ok := pathItem .Patch .Responses ["200" ]; ok {
50- ct := resp .Content [contentType ]
51- sRef = ct .Schema
50+ sRef = getSchemaFromResponse (resp , oasVersion )
5251 r .UpdateMethod = & UpdateMethod {}
5352 }
5453 }
@@ -57,8 +56,7 @@ func GetServiceDefinition(api *openapi.OpenAPI, pathPrefix string) (*ServiceDefi
5756 if pathItem .Post != nil {
5857 // check if there is a query parameter "id"
5958 if resp , ok := pathItem .Post .Responses ["200" ]; ok {
60- ct := resp .Content [contentType ]
61- sRef = ct .Schema
59+ sRef = getSchemaFromResponse (resp , oasVersion )
6260 supportsUserSettableCreate := false
6361 for _ , param := range pathItem .Post .Parameters {
6462 if param .Name == "id" {
@@ -73,7 +71,8 @@ func GetServiceDefinition(api *openapi.OpenAPI, pathPrefix string) (*ServiceDefi
7371 if pathItem .Get != nil {
7472 if resp , ok := pathItem .Get .Responses ["200" ]; ok {
7573 ct := resp .Content [contentType ]
76- resolvedSchema , err := dereferencedSchema (* ct .Schema , api )
74+ respSchema := getSchemaFromResponse (resp , oasVersion )
75+ resolvedSchema , err := dereferencedSchema (* respSchema , api )
7776 if err != nil {
7877 return nil , fmt .Errorf ("error dereferencing schema %q: %v" , ct .Schema .Ref , err )
7978 }
@@ -237,3 +236,13 @@ func dereferencedSchema(schema openapi.Schema, api *openapi.OpenAPI) (*openapi.S
237236 }
238237 return & schema , nil
239238}
239+
240+ func getSchemaFromResponse (r openapi.Response , oasVersion string ) * openapi.Schema {
241+ switch oasVersion {
242+ case "2.0" :
243+ return r .Schema
244+ default :
245+ ct := r .Content [contentType ]
246+ return ct .Schema
247+ }
248+ }
0 commit comments