diff options
| author | Kyren223 <ulmliad223@gmail.com> | 2024-10-15 15:43:26 +0300 |
|---|---|---|
| committer | Kyren223 <ulmliad223@gmail.com> | 2024-10-15 15:43:26 +0300 |
| commit | 4fb7081ef3890d80b049fb721214622b9ea2d88d (patch) | |
| tree | 2e448b687143e5d30190e334d5eb6425bab6bd1e | |
| parent | 481fb0027e3aac60df8ea997106d969db6fd0c78 (diff) | |
feat: add more assert functions and also channel reader utility
| -rw-r--r-- | pkg/assert/assert.go | 25 | ||||
| -rw-r--r-- | pkg/util/io.go | 41 |
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, + } +} |
