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{}