From 4d3e266b07ab5d2e7fd11e55006649a2fe696512 Mon Sep 17 00:00:00 2001 From: Julien Dessaux Date: Sat, 23 Mar 2024 11:29:47 +0100 Subject: feat(custom): implemented custom promises --- pkg/custom.go | 56 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ pkg/gonf.go | 8 ++++++++ 2 files changed, 64 insertions(+) create mode 100644 pkg/custom.go 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 } } -- cgit v1.2.3