Files
kubeshark/shared/debounce/debounce.go
RamiBerm d684dee7a4 WIP
2021-07-12 17:47:46 +03:00

43 lines
720 B
Go

package debounce
import (
"time"
)
func NewDebouncer(timeout time.Duration, callback func()) *Debouncer {
var debouncer Debouncer
debouncer.setTimeout(timeout)
debouncer.setCallback(callback)
return &debouncer
}
type Debouncer struct {
callback func()
running bool
timeout time.Duration
timer *time.Timer
}
func (d *Debouncer) setTimeout(timeout time.Duration) {
// TODO: Return err if d.running
d.timeout = timeout
}
func (d *Debouncer) setCallback(callback func()) {
callbackWrapped := func() {
callback()
d.running = false
}
d.callback = callbackWrapped
}
func (d *Debouncer) SetOn() {
if d.running == true {
return
}
d.running = true
d.timer = time.AfterFunc(d.timeout, d.callback)
}