Files
libopenapi/datamodel/high/v2/paths.go
Dave Shanley 9d9592793d All v2 high-level docs are completed
Good docs, maketh the tool...
2022-09-19 09:13:50 -04:00

54 lines
1.4 KiB
Go

// Copyright 2022 Princess B33f Heavy Industries / Dave Shanley
// SPDX-License-Identifier: MIT
package v2
import (
"github.com/pb33f/libopenapi/datamodel/high"
low "github.com/pb33f/libopenapi/datamodel/low/v2"
)
// Paths represents a high-level Swagger / OpenAPI Paths object, backed by a low-level one.
type Paths struct {
PathItems map[string]*PathItem
Extensions map[string]any
low *low.Paths
}
// NewPaths creates a new high-level instance of Paths from a low-level one.
func NewPaths(paths *low.Paths) *Paths {
p := new(Paths)
p.low = paths
p.Extensions = high.ExtractExtensions(paths.Extensions)
resultChan := make(chan asyncResult[*PathItem])
var buildPath = func(path string, pi *low.PathItem, rChan chan<- asyncResult[*PathItem]) {
rChan <- asyncResult[*PathItem]{
key: path,
result: NewPathItem(pi),
}
}
if len(paths.PathItems) > 0 {
pathItems := make(map[string]*PathItem)
totalPaths := len(paths.PathItems)
for k := range paths.PathItems {
go buildPath(k.Value, paths.PathItems[k].Value, resultChan)
}
completedPaths := 0
for completedPaths < totalPaths {
select {
case res := <-resultChan:
completedPaths++
pathItems[res.key] = res.result
}
}
p.PathItems = pathItems
}
return p
}
// GoLow returns the low-level Paths instance that backs the high level one.
func (p *Paths) GoLow() *low.Paths {
return p.low
}