From 95622300842db28c4786d3c47ddf499e69d21f9c Mon Sep 17 00:00:00 2001 From: Shawn Poulson Date: Tue, 1 Aug 2023 15:43:16 -0400 Subject: [PATCH] Tidy code. --- datamodel/low/v3/components.go | 31 ++++++++++++++++--------------- datamodel/low/v3/paths.go | 22 +++++++++++----------- 2 files changed, 27 insertions(+), 26 deletions(-) diff --git a/datamodel/low/v3/components.go b/datamodel/low/v3/components.go index 000b6d2..a1f8e63 100644 --- a/datamodel/low/v3/components.go +++ b/datamodel/low/v3/components.go @@ -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 @@ -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 { @@ -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 @@ -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(currentLabel, 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, }, @@ -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]]{ diff --git a/datamodel/low/v3/paths.go b/datamodel/low/v3/paths.go index f23ee18..a6caa8f 100644 --- a/datamodel/low/v3/paths.go +++ b/datamodel/low/v3/paths.go @@ -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 @@ -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, }: @@ -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 @@ -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) } } @@ -166,10 +166,10 @@ func (p *Paths) Build(_, root *yaml.Node, idx *index.SpecIndex) error { _ = low.BuildModel(pNode, path) err := path.Build(cNode, pNode, idx) if err != nil { - return pathBuildResult{}, err + return buildResult{}, err } - return pathBuildResult{ + return buildResult{ k: low.KeyReference[string]{ Value: cNode.Value, KeyNode: cNode,