diff --git a/lnutils/chan.go b/lnutils/chan.go new file mode 100644 index 000000000..b85c0de96 --- /dev/null +++ b/lnutils/chan.go @@ -0,0 +1,18 @@ +package lnutils + +import ( + "fmt" + "time" +) + +// RecvOrTimeout attempts to recv over chan c, returning the value. If the +// timeout passes before the recv succeeds, an error is returned +func RecvOrTimeout[T any](c <-chan T, timeout time.Duration) (*T, error) { + select { + case m := <-c: + return &m, nil + + case <-time.After(timeout): + return nil, fmt.Errorf("timeout hit") + } +}