From bd7cb3ed5027e1eaf4c9560eac3b83e5925fb42a Mon Sep 17 00:00:00 2001 From: Jordan Krage Date: Tue, 11 Feb 2025 18:27:56 -0600 Subject: [PATCH] pkg/services: add EngineRecv --- go.mod | 2 +- pkg/services/service.go | 13 +++++++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/go.mod b/go.mod index 10a6de1921..58c4dbf769 100644 --- a/go.mod +++ b/go.mod @@ -1,6 +1,6 @@ module github.com/smartcontractkit/chainlink-common -go 1.26.4 +go 1.27rc2 require ( github.com/Masterminds/semver/v3 v3.4.0 diff --git a/pkg/services/service.go b/pkg/services/service.go index 6d0a02e425..b84c889c13 100644 --- a/pkg/services/service.go +++ b/pkg/services/service.go @@ -107,6 +107,19 @@ func (e *Engine) GoTick(ticker *timeutil.Ticker, fn func(context.Context)) { }) } +func (e *Engine) GoRecv[C any, CH ~<-chan C](ch CH, fn func(C)) { + e.Go(func(ctx context.Context) { + for { + select { + case <-ctx.Done(): + return + case c := <-ch: + fn(c) + } + } + }) +} + // Tracer returns the otel tracer with service attributes included. func (e *Engine) Tracer() trace.Tracer { return e.tracer