From faac5c4a839e81323760a9a6cd09407f769eef10 Mon Sep 17 00:00:00 2001 From: Ophestra Date: Thu, 12 Mar 2026 18:08:41 +0900 Subject: [PATCH] internal/rosa: store artifact results in struct This is cleaner and makes adding additional values easier. Signed-off-by: Ophestra --- internal/rosa/all.go | 26 +++++++++++++++----------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/internal/rosa/all.go b/internal/rosa/all.go index 8817fb0..d1116e8 100644 --- a/internal/rosa/all.go +++ b/internal/rosa/all.go @@ -256,9 +256,10 @@ var ( artifactsM [PresetEnd]Metadata // artifacts stores the result of Metadata.f. - artifacts [_toolchainEnd][len(artifactsM)]pkg.Artifact - // versions stores the version of [PArtifact]. - versions [_toolchainEnd][len(artifactsM)]string + artifacts [_toolchainEnd][len(artifactsM)]struct { + a pkg.Artifact + v string + } // artifactsOnce is for lazy initialisation of artifacts. artifactsOnce [_toolchainEnd][len(artifactsM)]sync.Once ) @@ -266,20 +267,23 @@ var ( // GetMetadata returns [Metadata] of a [PArtifact]. func GetMetadata(p PArtifact) *Metadata { return &artifactsM[p] } +// construct constructs a [pkg.Artifact] corresponding to a [PArtifact] once. +func (t Toolchain) construct(p PArtifact) { + artifactsOnce[t][p].Do(func() { + artifacts[t][p].a, artifacts[t][p].v = artifactsM[p].f(t) + }) +} + // Load returns the resulting [pkg.Artifact] of [PArtifact]. func (t Toolchain) Load(p PArtifact) pkg.Artifact { - artifactsOnce[t][p].Do(func() { - artifacts[t][p], versions[t][p] = artifactsM[p].f(t) - }) - return artifacts[t][p] + t.construct(p) + return artifacts[t][p].a } // Version returns the version string of [PArtifact]. func (t Toolchain) Version(p PArtifact) string { - artifactsOnce[t][p].Do(func() { - artifacts[t][p], versions[t][p] = artifactsM[p].f(t) - }) - return versions[t][p] + t.construct(p) + return artifacts[t][p].v } // ResolveName returns a [PArtifact] by name.