mirror of
https://github.com/LukeHagar/libopenapi.git
synced 2025-12-09 12:37:49 +00:00
56 lines
1.7 KiB
Go
56 lines
1.7 KiB
Go
// Copyright 2022 Princess B33f Heavy Industries / Dave Shanley
|
|
// SPDX-License-Identifier: MIT
|
|
|
|
package v2
|
|
|
|
import (
|
|
"github.com/pb33f/libopenapi/datamodel"
|
|
"github.com/pb33f/libopenapi/datamodel/high"
|
|
lowmodel "github.com/pb33f/libopenapi/datamodel/low"
|
|
low "github.com/pb33f/libopenapi/datamodel/low/v2"
|
|
"github.com/pb33f/libopenapi/orderedmap"
|
|
"gopkg.in/yaml.v3"
|
|
)
|
|
|
|
// Responses is a high-level representation of a Swagger / OpenAPI 2 Responses object, backed by a low level one.
|
|
type Responses struct {
|
|
Codes *orderedmap.Map[string, *Response]
|
|
Default *Response
|
|
Extensions *orderedmap.Map[string, *yaml.Node]
|
|
low *low.Responses
|
|
}
|
|
|
|
// NewResponses will create a new high-level instance of Responses from a low-level one.
|
|
func NewResponses(responses *low.Responses) *Responses {
|
|
r := new(Responses)
|
|
r.low = responses
|
|
r.Extensions = high.ExtractExtensions(responses.Extensions)
|
|
|
|
if !responses.Default.IsEmpty() {
|
|
r.Default = NewResponse(responses.Default.Value)
|
|
}
|
|
|
|
if orderedmap.Len(responses.Codes) > 0 {
|
|
resp := orderedmap.New[string, *Response]()
|
|
translateFunc := func(pair orderedmap.Pair[lowmodel.KeyReference[string], lowmodel.ValueReference[*low.Response]]) (asyncResult[*Response], error) {
|
|
return asyncResult[*Response]{
|
|
key: pair.Key().Value,
|
|
result: NewResponse(pair.Value().Value),
|
|
}, nil
|
|
}
|
|
resultFunc := func(value asyncResult[*Response]) error {
|
|
resp.Set(value.key, value.result)
|
|
return nil
|
|
}
|
|
_ = datamodel.TranslateMapParallel(responses.Codes, translateFunc, resultFunc)
|
|
r.Codes = resp
|
|
}
|
|
|
|
return r
|
|
}
|
|
|
|
// GoLow will return the low-level object used to create the high-level one.
|
|
func (r *Responses) GoLow() *low.Responses {
|
|
return r.low
|
|
}
|