// Package leader provides leader election package leader // Leader provides leadership election type Leader interface { // elect leader Elect(id string, opts ...ElectOption) (Elected, error) // follow the leader Follow() chan string } type Elected interface { // id of leader Id() string // seek re-election Reelect() error // resign leadership Resign() error // observe leadership revocation Revoked() chan bool } type Option func(o *Options) type ElectOption func(o *ElectOptions)