Skip to content

Commit

Permalink
Tidy code.
Browse files Browse the repository at this point in the history
  • Loading branch information
Baliedge committed Aug 1, 2023
1 parent a6aac94 commit dc57f81
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 26 deletions.
31 changes: 16 additions & 15 deletions datamodel/low/v3/components.go
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,11 @@ type Components struct {
*low.Reference
}

type componentBuildResult[T any] struct {
key low.KeyReference[string]
value low.ValueReference[T]
}

// GetExtensions returns all Components extensions and satisfies the low.HasExtensions interface.
func (co *Components) GetExtensions() map[low.KeyReference[string]]low.ValueReference[any] {
return co.Extensions
Expand Down Expand Up @@ -210,22 +215,18 @@ func (co *Components) Build(root *yaml.Node, idx *index.SpecIndex) error {
return reterr
}

type componentBuildResult[T any] struct {
k low.KeyReference[string]
v low.ValueReference[T]
}

// extractComponentValues converts all the YAML nodes of a component type to
// low level model.
// Process each node in parallel.
func extractComponentValues[T low.Buildable[N], N any](label string, root *yaml.Node, idx *index.SpecIndex) (retval low.NodeReference[map[low.KeyReference[string]]low.ValueReference[T]], _ error) {
func extractComponentValues[T low.Buildable[N], N any](label string, root *yaml.Node, idx *index.SpecIndex) (low.NodeReference[map[low.KeyReference[string]]low.ValueReference[T]], error) {
var emptyResult low.NodeReference[map[low.KeyReference[string]]low.ValueReference[T]]
_, nodeLabel, nodeValue := utils.FindKeyNodeFullTop(label, root.Content)
if nodeValue == nil {
return retval, nil
return emptyResult, nil
}
componentValues := make(map[low.KeyReference[string]]low.ValueReference[T])
if utils.IsNodeArray(nodeValue) {
return retval, fmt.Errorf("node is array, cannot be used in components: line %d, column %d", nodeValue.Line, nodeValue.Column)
return emptyResult, fmt.Errorf("node is array, cannot be used in components: line %d, column %d", nodeValue.Line, nodeValue.Column)
}

type inputValue struct {

Check failure on line 232 in datamodel/low/v3/components.go

View workflow job for this annotation

GitHub Actions / Build

type declarations inside generic functions are not currently supported
Expand Down Expand Up @@ -270,14 +271,14 @@ func extractComponentValues[T low.Buildable[N], N any](label string, root *yaml.
// Collect output.
go func() {
for result := range out {
componentValues[result.k] = result.v
componentValues[result.key] = result.value
}
cancel()
wg.Done()
}()

// Translate.
translateFunc := func(value inputValue) (retval componentBuildResult[T], _ error) {
translateFunc := func(value inputValue) (componentBuildResult[T], error) {
var n T = new(N)
currentLabel := value.currentLabel
node := value.node
Expand All @@ -290,21 +291,21 @@ func extractComponentValues[T low.Buildable[N], N any](label string, root *yaml.
node, err = low.LocateRefNode(node, idx)
}
if err != nil {
return retval, err
return componentBuildResult[T]{}, err
}

// build.
_ = low.BuildModel(node, n)
err = n.Build(node, idx)
if err != nil {
return retval, err
return componentBuildResult[T]{}, err
}
return componentBuildResult[T]{
k: low.KeyReference[string]{
key: low.KeyReference[string]{
KeyNode: currentLabel,
Value: currentLabel.Value,
},
v: low.ValueReference[T]{
value: low.ValueReference[T]{
Value: n,
ValueNode: node,
},
Expand All @@ -313,7 +314,7 @@ func extractComponentValues[T low.Buildable[N], N any](label string, root *yaml.
err := datamodel.TranslatePipeline[inputValue, componentBuildResult[T]](in, out, translateFunc)
wg.Wait()
if err != nil {
return retval, err
return emptyResult, err
}

results := low.NodeReference[map[low.KeyReference[string]]low.ValueReference[T]]{
Expand Down
22 changes: 11 additions & 11 deletions datamodel/low/v3/paths.go
Original file line number Diff line number Diff line change
Expand Up @@ -68,17 +68,17 @@ func (p *Paths) Build(root *yaml.Node, idx *index.SpecIndex) error {
p.Extensions = low.ExtractExtensions(root)

// Translate YAML nodes to pathsMap using `TranslatePipeline`.
type pathBuildResult struct {
type buildResult struct {
k low.KeyReference[string]
v low.ValueReference[*PathItem]
}
type nodeItem struct {
type inputValue struct {
currentNode *yaml.Node
pathNode *yaml.Node
}
pathsMap := make(map[low.KeyReference[string]]low.ValueReference[*PathItem])
in := make(chan nodeItem)
out := make(chan pathBuildResult)
in := make(chan inputValue)
out := make(chan buildResult)
ctx, cancel := context.WithCancel(context.Background())
defer cancel()
var wg sync.WaitGroup
Expand Down Expand Up @@ -107,7 +107,7 @@ func (p *Paths) Build(root *yaml.Node, idx *index.SpecIndex) error {
}

select {
case in <- nodeItem{
case in <- inputValue{
currentNode: currentNode,
pathNode: pathNode,
}:
Expand Down Expand Up @@ -136,8 +136,8 @@ func (p *Paths) Build(root *yaml.Node, idx *index.SpecIndex) error {
}
}()

err := datamodel.TranslatePipeline[nodeItem, pathBuildResult](in, out,
func(value nodeItem) (pathBuildResult, error) {
err := datamodel.TranslatePipeline[inputValue, buildResult](in, out,
func(value inputValue) (buildResult, error) {
pNode := value.pathNode
cNode := value.currentNode

Expand All @@ -153,11 +153,11 @@ func (p *Paths) Build(root *yaml.Node, idx *index.SpecIndex) error {

if err != nil {
if !idx.AllowCircularReferenceResolving() {
return pathBuildResult{}, fmt.Errorf("path item build failed: %s", err.Error())
return buildResult{}, fmt.Errorf("path item build failed: %s", err.Error())
}
}
} else {
return pathBuildResult{}, fmt.Errorf("path item build failed: cannot find reference: %s at line %d, col %d",
return buildResult{}, fmt.Errorf("path item build failed: cannot find reference: %s at line %d, col %d",
pNode.Content[1].Value, pNode.Content[1].Line, pNode.Content[1].Column)
}
}
Expand All @@ -166,10 +166,10 @@ func (p *Paths) Build(root *yaml.Node, idx *index.SpecIndex) error {
_ = low.BuildModel(pNode, path)
err := path.Build(pNode, idx)
if err != nil {
return pathBuildResult{}, err
return buildResult{}, err
}

return pathBuildResult{
return buildResult{
k: low.KeyReference[string]{
Value: cNode.Value,
KeyNode: cNode,
Expand Down

0 comments on commit dc57f81

Please sign in to comment.