Files
libopenapi/datamodel/high/v2/responses_definitions.go
Dave Shanley c3cf5f1e38 Added support for unevaluatedProperties as Schema and bool #118
Also ran `gofmt` across the entire project. Things need cleaning up.

Signed-off-by: Dave Shanley <dave@quobix.com>
2023-06-17 14:12:27 -04:00

53 lines
1.8 KiB
Go

// Copyright 2022 Princess B33f Heavy Industries / Dave Shanley
// SPDX-License-Identifier: MIT
package v2
import low "github.com/pb33f/libopenapi/datamodel/low/v2"
// ResponsesDefinitions is a high-level representation of a Swagger / OpenAPI 2 Responses Definitions object.
// that is backed by a low-level one.
//
// ResponsesDefinitions is an object to hold responses to be reused across operations. Response definitions can be
// referenced to the ones defined here. It does not define global operation responses
// - https://swagger.io/specification/v2/#responsesDefinitionsObject
type ResponsesDefinitions struct {
Definitions map[string]*Response
low *low.ResponsesDefinitions
}
// NewResponsesDefinitions will create a new high-level instance of ResponsesDefinitions from a low-level one.
func NewResponsesDefinitions(responsesDefinitions *low.ResponsesDefinitions) *ResponsesDefinitions {
rd := new(ResponsesDefinitions)
rd.low = responsesDefinitions
// build everything async.
responses := make(map[string]*Response)
var buildResp = func(name string, resp *low.Response, rChan chan<- asyncResult[*Response]) {
rChan <- asyncResult[*Response]{
key: name,
result: NewResponse(resp),
}
}
resChan := make(chan asyncResult[*Response])
for k := range responsesDefinitions.Definitions {
go buildResp(k.Value, responsesDefinitions.Definitions[k].Value, resChan)
}
totalResponses := len(responsesDefinitions.Definitions)
completedResponses := 0
for completedResponses < totalResponses {
select {
case r := <-resChan:
completedResponses++
responses[r.key] = r.result
}
}
rd.Definitions = responses
return rd
}
// GoLow returns the low-level ResponsesDefinitions used to create the high-level one.
func (r *ResponsesDefinitions) GoLow() *low.ResponsesDefinitions {
return r.low
}