This repository has been archived by the owner on Feb 9, 2023. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 8
/
ref.go
114 lines (95 loc) · 2.34 KB
/
ref.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
package spec
import (
"github.com/puppetlabs/leg/relspec/pkg/ref"
)
type References struct {
Data *ref.Log[DataID]
Secrets *ref.Log[SecretID]
Connections *ref.Log[ConnectionID]
Outputs *ref.Log[OutputID]
Parameters *ref.Log[ParameterID]
Answers *ref.Log[AnswerID]
Statuses *ref.Log[StatusID]
}
func (r *References) collect() ref.Collection {
if r == nil {
return ref.Collections(nil)
}
return ref.Collections{
r.Data,
r.Secrets,
r.Connections,
r.Outputs,
r.Parameters,
r.Answers,
r.Statuses,
}
}
func (r *References) SetUsed(flag bool) {
r.collect().SetUsed(flag)
}
func (r *References) Used() bool {
return r.collect().Used()
}
func (r *References) Resolved() bool {
return r.collect().Resolved()
}
func (r *References) OK() bool {
return r.collect().OK()
}
func (r *References) Merge(others ...*References) *References {
if len(others) == 0 {
return r
} else if r == nil {
return NewReferences().Merge(others...)
}
for _, refs := range others {
if refs == nil {
continue
}
r.Data = r.Data.Merge(refs.Data)
r.Secrets = r.Secrets.Merge(refs.Secrets)
r.Connections = r.Connections.Merge(refs.Connections)
r.Outputs = r.Outputs.Merge(refs.Outputs)
r.Parameters = r.Parameters.Merge(refs.Parameters)
r.Answers = r.Answers.Merge(refs.Answers)
r.Statuses = r.Statuses.Merge(refs.Statuses)
}
return r
}
func (r *References) ToError() *UnresolvableError {
if r == nil {
return nil
}
err := &UnresolvableError{}
AddUnresolvableErrorsTo(err, r.Data)
AddUnresolvableErrorsTo(err, r.Secrets)
AddUnresolvableErrorsTo(err, r.Connections)
AddUnresolvableErrorsTo(err, r.Outputs)
AddUnresolvableErrorsTo(err, r.Parameters)
AddUnresolvableErrorsTo(err, r.Answers)
AddUnresolvableErrorsTo(err, r.Statuses)
if len(err.Causes) == 0 {
return nil
}
return err
}
func NewReferences() *References {
return &References{
Data: ref.NewLog[DataID](),
Secrets: ref.NewLog[SecretID](),
Connections: ref.NewLog[ConnectionID](),
Outputs: ref.NewLog[OutputID](),
Parameters: ref.NewLog[ParameterID](),
Answers: ref.NewLog[AnswerID](),
Statuses: ref.NewLog[StatusID](),
}
}
func CopyReferences(from *References) *References {
return NewReferences().Merge(from)
}
func InitialReferences(fn func(r *References)) *References {
r := NewReferences()
fn(r)
return r
}