2023-03-28 19:39:22 +01:00
|
|
|
// Copyright (c) HashiCorp, Inc.
|
2023-08-11 09:12:13 -04:00
|
|
|
// SPDX-License-Identifier: BUSL-1.1
|
2023-03-28 19:39:22 +01:00
|
|
|
|
2017-08-30 12:25:49 +02: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
|
|
|
|
}
|