aboutsummaryrefslogtreecommitdiffhomepage
path: root/internal/rosa/all.go
diff options
context:
space:
mode:
Diffstat (limited to 'internal/rosa/all.go')
-rw-r--r--internal/rosa/all.go34
1 files changed, 34 insertions, 0 deletions
diff --git a/internal/rosa/all.go b/internal/rosa/all.go
index d1116e88..49f0ada6 100644
--- a/internal/rosa/all.go
+++ b/internal/rosa/all.go
@@ -4,6 +4,7 @@ import (
"context"
"encoding/json"
"errors"
+ "fmt"
"net/http"
"strconv"
"sync"
@@ -167,6 +168,36 @@ const (
PresetEnd
)
+// P represents multiple [PArtifact] and is stable through JSON.
+type P []PArtifact
+
+// MarshalJSON represents [PArtifact] by their [Metadata.Name].
+func (s P) MarshalJSON() ([]byte, error) {
+ names := make([]string, len(s))
+ for i, p := range s {
+ names[i] = GetMetadata(p).Name
+ }
+ return json.Marshal(names)
+}
+
+// UnmarshalJSON resolves the value created by MarshalJSON back to [P].
+func (s *P) UnmarshalJSON(data []byte) error {
+ var names []string
+ if err := json.Unmarshal(data, &names); err != nil {
+ return err
+ }
+
+ *s = make(P, len(names))
+ for i, name := range names {
+ if p, ok := ResolveName(name); !ok {
+ return fmt.Errorf("unknown artifact %q", name)
+ } else {
+ (*s)[i] = p
+ }
+ }
+ return nil
+}
+
// Metadata is stage-agnostic information of a [PArtifact] not directly
// representable in the resulting [pkg.Artifact].
type Metadata struct {
@@ -179,6 +210,9 @@ type Metadata struct {
// Project home page.
Website string `json:"website,omitempty"`
+ // Runtime dependencies.
+ Dependencies P `json:"dependencies"`
+
// Project identifier on [Anitya].
//
// [Anitya]: https://release-monitoring.org/