diff options
author | Zahary Karadjov <zahary@gmail.com> | 2018-04-13 12:44:47 +0300 |
---|---|---|
committer | Zahary Karadjov <zahary@gmail.com> | 2018-04-13 13:31:55 +0300 |
commit | 10142e4a80a2eb8107c382ffcf30ab9fba51976a (patch) | |
tree | f57a32794d68875aceea76a488f21c941ae599ff /tests/async/tgeneric_async.nim | |
parent | 44ee3c27c08d3908b336581f67680d26b9f8a528 (diff) | |
download | Nim-10142e4a80a2eb8107c382ffcf30ab9fba51976a.tar.gz |
Fix some usages of typedesc in async procs
This also fixes a compilation error in modules, based only on the new async module (i.e. not importing the full asyncdispatch)
Diffstat (limited to 'tests/async/tgeneric_async.nim')
-rw-r--r-- | tests/async/tgeneric_async.nim | 43 |
1 files changed, 37 insertions, 6 deletions
diff --git a/tests/async/tgeneric_async.nim b/tests/async/tgeneric_async.nim index af6370181..bab2d1a31 100644 --- a/tests/async/tgeneric_async.nim +++ b/tests/async/tgeneric_async.nim @@ -1,9 +1,40 @@ +discard """ +output: "1\nmessa" +""" -import asyncdispatch +import async -when true: - # bug #2377 - proc test[T](v: T) {.async.} = - echo $v +# bug #2377 +proc test[T](v: T) {.async.} = + echo $v + +asyncCheck test[int](1) + +# More complex case involving typedesc and static params +type + SomeMsg = object + data: string + +template msgId(M: type SomeMsg): int = 1 + +proc recvMsg(): Future[tuple[msgId: int, msgData: string]] {.async.} = + return (1, "message") + +proc read(data: string, T: type SomeMsg, maxBytes: int): T = + result.data = data[0 ..< min(data.len, maxBytes)] + +proc nextMsg*(MsgType: typedesc, + maxBytes: static[int]): Future[MsgType] {.async.} = + const wantedId = MsgType.msgId + + while true: + var (nextMsgId, nextMsgData) = await recvMsg() + if nextMsgId == wantedId: + return nextMsgData.read(MsgType, maxBytes) + +proc main {.async.} = + let msg = await nextMsg(SomeMsg, 5) + echo msg.data + +asyncCheck main() - asyncCheck test[int](1) |