summary refs log tree commit diff stats
path: root/lib/pure/asyncfile.nim
diff options
context:
space:
mode:
Diffstat (limited to 'lib/pure/asyncfile.nim')
-rw-r--r--lib/pure/asyncfile.nim12
1 files changed, 12 insertions, 0 deletions
diff --git a/lib/pure/asyncfile.nim b/lib/pure/asyncfile.nim
index 0241e4796..5a23f3ba2 100644
--- a/lib/pure/asyncfile.nim
+++ b/lib/pure/asyncfile.nim
@@ -476,3 +476,15 @@ proc close*(f: AsyncFile) =
     if close(f.fd.cint) == -1:
       raiseOSError(osLastError())
 
+proc writeFromStream(f: AsyncFile, fut: FutureStream[string]) {.async.} =
+  while true:
+    let (hasValue, value) = await fut.take()
+    if hasValue:
+      await f.write(value)
+    else:
+      break
+
+proc getWriteStream*(f: AsyncFile): FutureStream[string] =
+  ## Returns a new stream that can be used for writing to the file.
+  result = newFutureStream[string]()
+  asyncCheck writeFromStream(f, result)