-
Notifications
You must be signed in to change notification settings - Fork 1.4k
/
fake_resource.go
54 lines (45 loc) · 1.23 KB
/
fake_resource.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
package core
import (
"context"
"github.com/pkg/errors"
)
var _ Resource = &FakeResource{}
func NewFakeResource(stack Stack, resType string, id string, spec FakeResourceSpec, status *FakeResourceStatus) *FakeResource {
r := &FakeResource{
ResourceMeta: NewResourceMeta(stack, resType, id),
Spec: spec,
Status: status,
}
stack.AddResource(r)
return r
}
// register dependencies for LoadBalancer.
func (r *FakeResource) registerDependencies(stack Stack) {
for _, field := range r.Spec.FieldA {
for _, dep := range field.Dependencies() {
stack.AddDependency(dep, r)
}
}
}
func (r *FakeResource) FieldB() StringToken {
return NewResourceFieldStringToken(r, "status/fieldB",
func(ctx context.Context, res Resource, fieldPath string) (s string, err error) {
r := res.(*FakeResource)
if r.Status == nil {
return "", errors.Errorf("FakeResource is not fulfilled yet: %v", r.ID())
}
return r.Status.FieldB, nil
},
)
}
type FakeResource struct {
ResourceMeta `json:"-"`
Spec FakeResourceSpec `json:"spec"`
Status *FakeResourceStatus `json:"status,omitempty"`
}
type FakeResourceSpec struct {
FieldA []StringToken `json:"fieldA"`
}
type FakeResourceStatus struct {
FieldB string `json:"fieldB"`
}