package backoff import "time" type Timer interface { Start(duration time.Duration) Stop() C() <-chan time.Time } // defaultTimer implements Timer interface using time.Timer type defaultTimer struct { timer *time.Timer } // C returns the timers channel which receives the current time when the timer fires. func (t *defaultTimer) C() <-chan time.Time { return t.timer.C } // Start starts the timer to fire after the given duration func (t *defaultTimer) Start(duration time.Duration) { if t.timer == nil { t.timer = time.NewTimer(duration) } else { t.timer.Reset(duration) } } // Stop is called when the timer is not used anymore and resources may be freed. func (t *defaultTimer) Stop() { if t.timer != nil { t.timer.Stop() } }