2023-03-28 18:39:22 +00:00
|
|
|
// Copyright (c) HashiCorp, Inc.
|
2023-08-11 13:12:13 +00:00
|
|
|
// SPDX-License-Identifier: BUSL-1.1
|
2023-03-28 18:39:22 +00:00
|
|
|
|
2017-08-30 10:25:49 +00:00
|
|
|
package ae
|
|
|
|
|
|
|
|
// Trigger implements a non-blocking event notifier. Events can be
|
|
|
|
// triggered without blocking and notifications happen only when the
|
|
|
|
// previous event was consumed.
|
|
|
|
type Trigger struct {
|
|
|
|
ch chan struct{}
|
|
|
|
}
|
|
|
|
|
|
|
|
func NewTrigger() *Trigger {
|
|
|
|
return &Trigger{make(chan struct{}, 1)}
|
|
|
|
}
|
|
|
|
|
|
|
|
func (t Trigger) Trigger() {
|
|
|
|
select {
|
|
|
|
case t.ch <- struct{}{}:
|
|
|
|
default:
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func (t Trigger) Notif() <-chan struct{} {
|
|
|
|
return t.ch
|
|
|
|
}
|