summaryrefslogtreecommitdiff
path: root/internal/resource/multi.go
diff options
context:
space:
mode:
Diffstat (limited to 'internal/resource/multi.go')
-rw-r--r--internal/resource/multi.go39
1 files changed, 39 insertions, 0 deletions
diff --git a/internal/resource/multi.go b/internal/resource/multi.go
new file mode 100644
index 0000000..1694814
--- /dev/null
+++ b/internal/resource/multi.go
@@ -0,0 +1,39 @@
+package resource
+
+import (
+ "errors"
+ "strings"
+)
+
+// Multi is a collection of resources that satisfies the api.Resource interface.
+type Multi []Resource
+
+func (m Multi) String() string {
+ strs := make([]string, 0, len(m))
+
+ for _, res := range m {
+ strs = append(strs, res.String())
+ }
+
+ return strings.Join(strs, ", ")
+}
+
+func (m Multi) ID() string {
+ ids := make([]string, 0, len(m))
+
+ for _, res := range m {
+ ids = append(ids, res.String())
+ }
+
+ return strings.Join(ids, "+")
+}
+
+func (m Multi) Apply() error {
+ var errs []error
+
+ for _, res := range m {
+ errs = append(errs, res.Apply())
+ }
+
+ return errors.Join(errs...)
+}