Files
libopenapi/datamodel/high/v2/parameter_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

52 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"
// ParameterDefinitions is a high-level representation of a Swagger / OpenAPI 2 Parameters Definitions object
// that is backed by a low-level one.
//
// ParameterDefinitions holds parameters to be reused across operations. Parameter definitions can be
// referenced to the ones defined here. It does not define global operation parameters
// - https://swagger.io/specification/v2/#parametersDefinitionsObject
type ParameterDefinitions struct {
Definitions map[string]*Parameter
low *low.ParameterDefinitions
}
// NewParametersDefinitions creates a new instance of a high-level ParameterDefinitions, from a low-level one.
// Every parameter is extracted asynchronously due to the potential depth
func NewParametersDefinitions(parametersDefinitions *low.ParameterDefinitions) *ParameterDefinitions {
pd := new(ParameterDefinitions)
pd.low = parametersDefinitions
params := make(map[string]*Parameter)
var buildParam = func(name string, param *low.Parameter, rChan chan<- asyncResult[*Parameter]) {
rChan <- asyncResult[*Parameter]{
key: name,
result: NewParameter(param),
}
}
resChan := make(chan asyncResult[*Parameter])
for k := range parametersDefinitions.Definitions {
go buildParam(k.Value, parametersDefinitions.Definitions[k].Value, resChan)
}
totalParams := len(parametersDefinitions.Definitions)
completedParams := 0
for completedParams < totalParams {
select {
case r := <-resChan:
completedParams++
params[r.key] = r.result
}
}
pd.Definitions = params
return pd
}
// GoLow returns the low-level ParameterDefinitions instance that backs the low-level one.
func (p *ParameterDefinitions) GoLow() *low.ParameterDefinitions {
return p.low
}