FutureStream[T] = ref object queue: Deque[T] finished: bool cb: proc () {...}{.closure, gcsafe.}
proc newFutureStream[T](fromProc = "unspecified"): FutureStream[T]
FutureStream
. This future's callback is activated when two events occur:Specifying fromProc
, which is a string specifying the name of the proc that this future belongs to, is a good habit as it helps with debugging.
Note: The API of FutureStream is still new and so has a higher likelihood of changing in the future.
proc complete[T](future: FutureStream[T])
FutureStream
signalling the end of data. proc callback=[T](future: FutureStream[T]; cb: proc (future: FutureStream[T]) {...}{.closure, gcsafe.})
Sets the callback proc to be called when data was placed inside the future stream.
The callback is also called when the future is completed. So you should use finished
to check whether data is available.
If the future stream already has data or is finished then cb
will be called immediately.
proc finished[T](future: FutureStream[T]): bool
FutureStream
is finished. true
value means that no more data will be placed inside the stream _and that there is no data waiting to be retrieved. proc write[T](future: FutureStream[T]; value: T): Future[void]
Writes the specified value inside the specified future stream.
This will raise ValueError
if future
is finished.
proc read[T](future: FutureStream[T]): Future[(bool, T)]
Returns a future that will complete when the FutureStream
has data placed into it. The future will be completed with the oldest value stored inside the stream. The return value will also determine whether data was retrieved, false
means that the future stream was completed and no data was retrieved.
This function will remove the data that was returned from the underlying FutureStream
.
proc len[T](future: FutureStream[T]): int
© 2006–2018 Andreas Rumpf
Licensed under the MIT License.
https://nim-lang.org/docs/asyncstreams.html