summaryrefslogtreecommitdiff
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
parent481fb0027e3aac60df8ea997106d969db6fd0c78 (diff)
feat: add more assert functions and also channel reader utility
-rw-r--r--pkg/assert/assert.go25
-rw-r--r--pkg/util/io.go41
2 files changed, 66 insertions, 0 deletions
diff --git a/pkg/assert/assert.go b/pkg/assert/assert.go
new file mode 100644
index 0000000..6c4a4f5
--- /dev/null
+++ b/pkg/assert/assert.go
@@ -0,0 +1,25 @@
+package assert
+
+import "log"
+
+func Assert(assertion bool, message string, a ...any) {
+ if !assertion {
+ log.Fatalf(message+"\n", a...)
+ }
+}
+
+func NoError(err error, message string, a ...any) {
+ if err != nil {
+ log.Fatalf(message+": "+err.Error()+"\n", a...)
+ }
+}
+
+func Unreachable(message string, a ...any) {
+ log.Fatalf(message+"\n", a...)
+}
+
+func NotNil(value any, message string, a ...any) {
+ if value == nil {
+ log.Fatalf(message+"\n", a...)
+ }
+}
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,
+ }
+}