...
1 package functionchain
2
3 import (
4 "context"
5 "sync"
6 )
7
8 type function_ref struct {
9 sync.Mutex
10 functions []Function
11 last_state_requested bool
12 last_run_err error
13 }
14
15 func (fr *function_ref) Add(f Function) *function_ref {
16 fr.Lock()
17 defer fr.Unlock()
18 fr.functions = append(fr.functions, f)
19 return fr
20 }
21 func (fr *function_ref) SetTo(ctx context.Context, b bool) error {
22 if fr.last_state_requested == b && fr.last_run_err == nil {
23 return nil
24 }
25 fr.last_state_requested = b
26 fr.last_run_err = nil
27
28 for _, f := range fr.functions {
29 err := f.SetTo(ctx, b)
30 if err != nil {
31 fr.last_run_err = err
32 }
33 }
34 return nil
35 }
36
View as plain text