github.com/decred/dcrlnd@v0.7.6/cluster/factory.go (about) 1 package cluster 2 3 import ( 4 "context" 5 "fmt" 6 ) 7 8 // leaderElectorFactoryFunc is a LeaderElector factory method type. 9 type leaderElectorFactoryFunc func(context.Context, ...interface{}) ( 10 LeaderElector, error) 11 12 var leaderElectorFactories map[string]leaderElectorFactoryFunc 13 14 // RegisterLeaderElectorFactory will register a new LeaderElector factory 15 // method corresponding to the passed id. 16 func RegisterLeaderElectorFactory(id string, factory leaderElectorFactoryFunc) { 17 if leaderElectorFactories == nil { 18 leaderElectorFactories = make( 19 map[string]leaderElectorFactoryFunc, 20 ) 21 } 22 23 leaderElectorFactories[id] = factory 24 } 25 26 // MakeLeaderElector will constuct a LeaderElector identified by id with the 27 // passed arguments. 28 func MakeLeaderElector(ctx context.Context, id string, args ...interface{}) ( 29 LeaderElector, error) { 30 31 if _, ok := leaderElectorFactories[id]; !ok { 32 return nil, fmt.Errorf("leader elector factory for '%v' "+ 33 "not found", id) 34 } 35 36 return leaderElectorFactories[id](ctx, args...) 37 }