summaryrefslogtreecommitdiff
path: root/internal/iotools/io.go
diff options
context:
space:
mode:
Diffstat (limited to 'internal/iotools/io.go')
-rw-r--r--internal/iotools/io.go38
1 files changed, 38 insertions, 0 deletions
diff --git a/internal/iotools/io.go b/internal/iotools/io.go
index 04b03850e..5f0c4b72c 100644
--- a/internal/iotools/io.go
+++ b/internal/iotools/io.go
@@ -119,3 +119,41 @@ func (w *SilentWriter) Write(b []byte) (int, error) {
func (w *SilentWriter) Error() error {
return w.err
}
+
+func StreamReadFunc(read func(io.Reader) error) io.Writer {
+ // In-memory stream.
+ pr, pw := io.Pipe()
+
+ go func() {
+ var err error
+
+ defer func() {
+ // Always pass along error.
+ pr.CloseWithError(err)
+ }()
+
+ // Start reading.
+ err = read(pr)
+ }()
+
+ return pw
+}
+
+func StreamWriteFunc(write func(io.Writer) error) io.Reader {
+ // In-memory stream.
+ pr, pw := io.Pipe()
+
+ go func() {
+ var err error
+
+ defer func() {
+ // Always pass along error.
+ pw.CloseWithError(err)
+ }()
+
+ // Start writing.
+ err = write(pw)
+ }()
+
+ return pr
+}