mirror of
https://github.com/navidrome/navidrome.git
synced 2025-04-05 05:27:37 +03:00
38 lines
654 B
Go
38 lines
654 B
Go
package diodes
|
|
|
|
import (
|
|
"context"
|
|
|
|
"code.cloudfoundry.org/go-diodes"
|
|
)
|
|
|
|
type Diode[T any] struct {
|
|
d *diodes.Waiter
|
|
}
|
|
|
|
type Alerter = diodes.Alerter
|
|
|
|
type AlertFunc = diodes.AlertFunc
|
|
|
|
func New[T any](ctx context.Context, size int, alerter Alerter) *Diode[T] {
|
|
return &Diode[T]{
|
|
d: diodes.NewWaiter(diodes.NewOneToOne(size, alerter), diodes.WithWaiterContext(ctx)),
|
|
}
|
|
}
|
|
|
|
func (d *Diode[T]) Put(data T) {
|
|
d.d.Set(diodes.GenericDataType(&data))
|
|
}
|
|
|
|
func (d *Diode[T]) TryNext() (*T, bool) {
|
|
data, ok := d.d.TryNext()
|
|
if !ok {
|
|
return nil, ok
|
|
}
|
|
return (*T)(data), true
|
|
}
|
|
|
|
func (d *Diode[T]) Next() *T {
|
|
data := d.d.Next()
|
|
return (*T)(data)
|
|
}
|