summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJulien Dessaux2024-03-23 11:29:47 +0100
committerJulien Dessaux2024-03-23 14:48:09 +0100
commit4d3e266b07ab5d2e7fd11e55006649a2fe696512 (patch)
treed0f597b8efb9d5159e7542f7a087c3a571b56e0e
parentfeat(files): support creating intermediate directories (diff)
downloadgonf-4d3e266b07ab5d2e7fd11e55006649a2fe696512.tar.gz
gonf-4d3e266b07ab5d2e7fd11e55006649a2fe696512.tar.bz2
gonf-4d3e266b07ab5d2e7fd11e55006649a2fe696512.zip
feat(custom): implemented custom promises
-rw-r--r--pkg/custom.go56
-rw-r--r--pkg/gonf.go8
2 files changed, 64 insertions, 0 deletions
diff --git a/pkg/custom.go b/pkg/custom.go
new file mode 100644
index 0000000..9ed2bca
--- /dev/null
+++ b/pkg/custom.go
@@ -0,0 +1,56 @@
+package gonf
+
+var customPromises []*CustomPromise
+
+func init() {
+ customPromises = make([]*CustomPromise, 0)
+}
+
+type CustomPromiseInterface interface {
+ Promise
+ Status() Status
+}
+
+type CustomPromise struct {
+ promise CustomPromiseInterface
+}
+
+func MakeCustomPromise(p CustomPromiseInterface) *CustomPromise {
+ return &CustomPromise{
+ promise: p,
+ }
+}
+
+func (c *CustomPromise) IfRepaired(p ...Promise) Promise {
+ c.promise.IfRepaired(p...)
+ return c
+}
+
+func (c *CustomPromise) Promise() Promise {
+ customPromises = append(customPromises, c)
+ return c
+}
+
+func (c *CustomPromise) Resolve() {
+ c.promise.Resolve()
+}
+
+func (c CustomPromise) Status() Status {
+ return c.Status()
+}
+
+func resolveCustomPromises() (status Status) {
+ status = KEPT
+ for _, c := range customPromises {
+ if c.promise.Status() == PROMISED {
+ c.Resolve()
+ switch c.promise.Status() {
+ case BROKEN:
+ return BROKEN
+ case REPAIRED:
+ status = REPAIRED
+ }
+ }
+ }
+ return
+}
diff --git a/pkg/gonf.go b/pkg/gonf.go
index 363a227..7a18c91 100644
--- a/pkg/gonf.go
+++ b/pkg/gonf.go
@@ -47,6 +47,14 @@ func Resolve() (status Status) {
case REPAIRED:
continue
}
+ // ----- CustomPromises ----------------------------------------
+ status = resolveCustomPromises()
+ switch status {
+ case BROKEN:
+ return BROKEN
+ case REPAIRED:
+ continue
+ }
return
}
}