refresh/refreshticker.go (23 lines of code) (raw):

package refresh import "time" // TickProvider defines an interface for a type that provides a channel that ticks at a regular interval type TickProvider interface { Stop() Reset(d time.Duration) C() <-chan time.Time } // TimedTickProvider wraps a time.Ticker to implement TickProvider type TimedTickProvider struct { ticker *time.Ticker } var _ TickProvider = &TimedTickProvider{} // NewTimedTickProvider creates a new TimedTickProvider func NewTimedTickProvider(d time.Duration) *TimedTickProvider { return &TimedTickProvider{ticker: time.NewTicker(d)} } // Stop stops the ticker func (tw *TimedTickProvider) Stop() { tw.ticker.Stop() } // Reset resets the ticker with a new duration func (tw *TimedTickProvider) Reset(d time.Duration) { tw.ticker.Reset(d) } // C returns the ticker's channel func (tw *TimedTickProvider) C() <-chan time.Time { return tw.ticker.C }