...

Source file src/golang.conradwood.net/go-easyops/utils/functionchain/functionref.go

Documentation: golang.conradwood.net/go-easyops/utils/functionchain

     1  package functionchain
     2  
     3  import (
     4  	"context"
     5  	"sync"
     6  )
     7  
     8  type function_ref struct {
     9  	sync.Mutex
    10  	functions            []Function // one or more!
    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