From 4fb7081ef3890d80b049fb721214622b9ea2d88d Mon Sep 17 00:00:00 2001 From: Kyren223 Date: Tue, 15 Oct 2024 15:43:26 +0300 Subject: feat: add more assert functions and also channel reader utility --- pkg/util/io.go | 41 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 pkg/util/io.go (limited to 'pkg/util') diff --git a/pkg/util/io.go b/pkg/util/io.go new file mode 100644 index 0000000..5c56822 --- /dev/null +++ b/pkg/util/io.go @@ -0,0 +1,41 @@ +package util + +import ( + "context" + "io" +) + +type ChannelReader struct { + Out <-chan []byte + Err <-chan error +} + +func NewChannelReader(ctx context.Context, reader io.Reader) ChannelReader { + outCh := make(chan []byte) + errCh := make(chan error) + + go func(in chan<- []byte, inErr chan<- error) { + defer close(in) + defer close(inErr) + outer: + for { + select { + case <-ctx.Done(): + inErr <- ctx.Err() + break outer + default: + data, err := io.ReadAll(reader) + if err != nil { + inErr <- err + break outer + } + in <- data + } + } + }(outCh, errCh) + + return ChannelReader{ + Out: outCh, + Err: errCh, + } +} -- cgit v1.3.1