initial commit

This commit is contained in:
Jon Lundy
2022-08-04 14:37:51 -06:00
commit 1010657a02
14 changed files with 1199 additions and 0 deletions

28
pkg/locker/locker.go Normal file
View File

@@ -0,0 +1,28 @@
package locker
import "context"
type Locked[T any] struct {
state chan *T
}
func New[T any](initial *T) *Locked[T] {
s := &Locked[T]{}
s.state = make(chan *T, 1)
s.state <- initial
return s
}
func (s *Locked[T]) Modify(ctx context.Context, fn func(*T) error) error {
if ctx.Err() != nil {
return ctx.Err()
}
select {
case state := <-s.state:
defer func() { s.state <- state }()
return fn(state)
case <-ctx.Done():
return ctx.Err()
}
}