Files
libopenapi/datamodel/high/v2/responses.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
}