/ core / node / helpers.go
helpers.go
 1  package node
 2  
 3  import (
 4  	"context"
 5  	"errors"
 6  
 7  	"go.uber.org/fx"
 8  )
 9  
10  type lcStartStop struct {
11  	fx.In
12  
13  	LC fx.Lifecycle
14  }
15  
16  // Append wraps a function into a fx.Hook and appends it to the fx.Lifecycle.
17  func (lcss *lcStartStop) Append(f func() func()) {
18  	// Hooks are guaranteed to run in sequence. If a hook fails to start, its
19  	// OnStop won't be executed.
20  	var stopFunc func()
21  
22  	lcss.LC.Append(fx.Hook{
23  		OnStart: func(ctx context.Context) error {
24  			if ctx.Err() != nil {
25  				return nil
26  			}
27  			stopFunc = f()
28  			return nil
29  		},
30  		OnStop: func(ctx context.Context) error {
31  			if ctx.Err() != nil {
32  				return nil
33  			}
34  			if stopFunc == nil { // Theoretically this shouldn't ever happen
35  				return errors.New("lcStatStop: stopFunc was nil")
36  			}
37  			stopFunc()
38  			return nil
39  		},
40  	})
41  }
42  
43  func maybeProvide(opt any, enable bool) fx.Option {
44  	if enable {
45  		return fx.Provide(opt)
46  	}
47  	return fx.Options()
48  }
49  
50  // nolint unused
51  func maybeInvoke(opt any, enable bool) fx.Option {
52  	if enable {
53  		return fx.Invoke(opt)
54  	}
55  	return fx.Options()
56  }