summaryrefslogtreecommitdiff
path: root/pkg/util
diff options
context:
space:
mode:
authorKyren223 <ulmliad223@gmail.com>2024-10-15 15:43:26 +0300
committerKyren223 <ulmliad223@gmail.com>2024-10-15 15:43:26 +0300
commit4fb7081ef3890d80b049fb721214622b9ea2d88d (patch)
tree2e448b687143e5d30190e334d5eb6425bab6bd1e /pkg/util
parent481fb0027e3aac60df8ea997106d969db6fd0c78 (diff)
feat: add more assert functions and also channel reader utility
Diffstat (limited to 'pkg/util')
-rw-r--r--pkg/util/io.go41
1 files changed, 41 insertions, 0 deletions
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,
+ }
+}