summary refs log tree commit diff stats
path: root/tests
diff options
context:
space:
mode:
authorZahary Karadjov <zahary@gmail.com>2018-04-13 12:44:47 +0300
committerZahary Karadjov <zahary@gmail.com>2018-04-13 13:31:55 +0300
commit10142e4a80a2eb8107c382ffcf30ab9fba51976a (patch)
treef57a32794d68875aceea76a488f21c941ae599ff /tests
parent44ee3c27c08d3908b336581f67680d26b9f8a528 (diff)
downloadNim-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')
-rw-r--r--tests/async/tgeneric_async.nim43
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)