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") } }