github.com/filecoin-project/bacalhau@v0.3.23-0.20230228154132-45c989550ace/pkg/compute/callback_chain.go (about) 1 package compute 2 3 import "context" 4 5 type ChainedCallbackParams struct { 6 Callbacks []Callback 7 } 8 9 // ChainedCallback Callback that chains multiple callbacks and delegates the calls to them. 10 type ChainedCallback struct { 11 callbacks []Callback 12 } 13 14 func NewChainedCallback(params ChainedCallbackParams) *ChainedCallback { 15 return &ChainedCallback{ 16 callbacks: params.Callbacks, 17 } 18 } 19 20 func (c ChainedCallback) OnRunComplete(ctx context.Context, result RunResult) { 21 for _, callback := range c.callbacks { 22 callback.OnRunComplete(ctx, result) 23 } 24 } 25 26 func (c ChainedCallback) OnPublishComplete(ctx context.Context, result PublishResult) { 27 for _, callback := range c.callbacks { 28 callback.OnPublishComplete(ctx, result) 29 } 30 } 31 32 func (c ChainedCallback) OnCancelComplete(ctx context.Context, result CancelResult) { 33 for _, callback := range c.callbacks { 34 callback.OnCancelComplete(ctx, result) 35 } 36 } 37 38 func (c ChainedCallback) OnComputeFailure(ctx context.Context, err ComputeError) { 39 for _, callback := range c.callbacks { 40 callback.OnComputeFailure(ctx, err) 41 } 42 } 43 44 // compile-time interface check 45 var _ Callback = &ChainedCallback{}