Error: type mismatch: got <id: string, interval: TimeInterval, throttleNum: int literal(1), startTime: Option[times.DateTime], endTime: Option[times.DateTime], asyncProc: proc (): Future[system.void]{.locks: <unknown>.}>
AboveAverageDeveloper opened this issue · 1 comments
AboveAverageDeveloper commented
version: nim 1.3.5
package version: 0.1.0
/home/jake/Documents/catrack/src/catrack.nim(41, 11) template/generic instantiation of `scheduler` from here
... /home/jake/.nimble/pkgs/schedules-#head/schedules.nim(342, 16) Error: type mismatch: got <id: string, interval: TimeInterval, throttleNum: int literal(1), startTime: Option[times.DateTime], endTime: Option[times.DateTime], asyncProc: proc (): Future[system.void]{.locks: <unknown>.}>
... but expected one of:
... proc initBeater(interval: TimeInterval; asyncProc: BeaterAsyncProc;
... startTime: Option[DateTime] = none(DateTime);
... endTime: Option[DateTime] = none(DateTime); id: string = "";
... throttleNum: int = 1): Beater
... first type mismatch at position: 6
... required type for asyncProc: BeaterAsyncProc
... but expression 'asyncProc = proc (): owned(Future[void]) =
... template await(f`gensym53840047: typed): untyped {.used.} =
... static :
... error "await expects Future[T], got " & $typeof(f`gensym53840047)
... template await[T](f`gensym53840048: Future[T]): auto {.used.} =
... var internalTmpFuture`gensym53840049_53845020: FutureBase = f`gensym53840048
... yield internalTmpFuture`gensym53840049_53845020
... (cast[type(f`gensym53840048)](internalTmpFuture`gensym53840049_53845020)).read()
... var retFuture_53840040 = newFuture("anonymous")
... iterator anonymousIter_53840041(): owned(FutureBase) {.closure.} =
... echo(["updating shows"])
... let account = getAccount()
... for show in items(get(select(table(RDB(), "show"), ["id"]))):
... let showID = getInt(show["id"], 0)
... let showDetails =
... var internalTmpFuture`gensym53840049`gensym53845048: FutureBase = getShowDetails(
... account, showID)
... yield internalTmpFuture`gensym53840049`gensym53845048
... read(cast[type(getShowDetails(account, showID))](internalTmpFuture`gensym53840049`gensym53845048))
... for season in items(showDetails.seasons):
... if season.season_number == 0:
... continue
... let seasonDetails =
... var internalTmpFuture`gensym53840049`gensym53860216: FutureBase = getSeason(
... account, showID, season.season_number)
... yield internalTmpFuture`gensym53840049`gensym53860216
... read(cast[type(getSeason(account, showID, season.season_number))](internalTmpFuture`gensym53840049`gensym53860216))
... for episode in items(seasonDetails.episodes):
... try:
... insert(table(RDB(), "episode"), `%`([("showID", `%`(showDetails.id)),
... ("season", `%`(season.season_number)),
... ("episode", `%`(episode.episode_number)), ("id", `%`(episode.id)),
... ("airdate", `%`(episode.air_date)), ("status", `%`(0))]))
... except:
... echo(["already in db"])
... update(where(where(where(table(RDB(), "episode"), "showID", "=", showID),
... "season", "=", season.season_number), "episode", "=",
... episode.episode_number),
... `%`([("airdate", `%`(episode.air_date))]))
... complete(retFuture_53840040)
... let retFutUnown`gensym53840043 = retFuture_53840040
... var nameIterVar`gensym53840044 = anonymousIter_53840041
... proc anonymousNimAsyncContinue_53840042() {.closure.} =
... try:
... if not finished(nameIterVar`gensym53840044):
... var next`gensym53840045 = nameIterVar`gensym53840044()
... while not isNil(next`gensym53840045) and finished(next`gensym53840045):
... next`gensym53840045 = nameIterVar`gensym53840044()
... if finished(nameIterVar`gensym53840044):
... break
... if next`gensym53840045 == nil:
... if not finished(retFutUnown`gensym53840043):
... let msg`gensym53840046 = "Async procedure ($1) yielded `nil`, are you await\'ing a `nil` Future?"
... raise
... (ref AssertionDefect)(msg: msg`gensym53840046 % "anonymous",
... parent: nil)
... else:
... {.gcsafe.}:
... {.push, hint[ConvFromXtoItselfNotNeeded]: false.}
... addCallback(next`gensym53840045, cast[proc () {.closure, gcsafe.}](anonymousNimAsyncContinue_53840042))
... {.pop.}
... except:
... if finished(retFutUnown`gensym53840043):
... raise
... else:
... fail(retFutUnown`gensym53840043, getCurrentException())
...
... anonymousNimAsyncContinue_53840042()
... return retFuture_53840040' is of type: proc (): Future[system.void]{.locks: <unknown>.}
... This expression is not GC-safe. Annotate the proc with {.gcsafe.} to get extended error information.
... proc initBeater(interval: TimeInterval; threadProc: BeaterThreadProc;
... startTime: Option[DateTime] = none(DateTime);
... endTime: Option[DateTime] = none(DateTime); id: string = "";
... throttleNum: int = 1): Beater
... first type mismatch at position: 6
... unknown named parameter: asyncProc
... expression: initBeater(id = "shows", interval = initTimeInterval(0, 0, 0, 0, 0, 0, 1, 0, 0, 0),
... throttleNum = 1, startTime = none(DateTime), endTime = none(DateTime), asyncProc = proc (): owned(
... Future[void]) =
... template await(f`gensym53840047: typed): untyped {.used.} =
... static :
... error "await expects Future[T], got " & $typeof(f`gensym53840047)
... template await[T](f`gensym53840048: Future[T]): auto {.used.} =
... var internalTmpFuture`gensym53840049_53845020: FutureBase = f`gensym53840048
... yield internalTmpFuture`gensym53840049_53845020
... (cast[type(f`gensym53840048)](internalTmpFuture`gensym53840049_53845020)).read()
... var retFuture_53840040 = newFuture("anonymous")
... iterator anonymousIter_53840041(): owned(FutureBase) {.closure.} =
... echo(["updating shows"])
... let account = getAccount()
... for show in items(get(select(table(RDB(), "show"), ["id"]))):
... let showID = getInt(show["id"], 0)
... let showDetails =
... var internalTmpFuture`gensym53840049`gensym53845048: FutureBase = getShowDetails(
... account, showID)
... yield internalTmpFuture`gensym53840049`gensym53845048
... read(cast[type(getShowDetails(account, showID))](internalTmpFuture`gensym53840049`gensym53845048))
... for season in items(showDetails.seasons):
... if season.season_number == 0:
... continue
... let seasonDetails =
... var internalTmpFuture`gensym53840049`gensym53860216: FutureBase = getSeason(
... account, showID, season.season_number)
... yield internalTmpFuture`gensym53840049`gensym53860216
... read(cast[type(getSeason(account, showID, season.season_number))](internalTmpFuture`gensym53840049`gensym53860216))
... for episode in items(seasonDetails.episodes):
... try:
... insert(table(RDB(), "episode"), `%`([("showID", `%`(showDetails.id)),
... ("season", `%`(season.season_number)),
... ("episode", `%`(episode.episode_number)), ("id", `%`(episode.id)),
... ("airdate", `%`(episode.air_date)), ("status", `%`(0))]))
... except:
... echo(["already in db"])
... update(where(where(where(table(RDB(), "episode"), "showID", "=", showID),
... "season", "=", season.season_number), "episode", "=",
... episode.episode_number),
... `%`([("airdate", `%`(episode.air_date))]))
... complete(retFuture_53840040)
... let retFutUnown`gensym53840043 = retFuture_53840040
... var nameIterVar`gensym53840044 = anonymousIter_53840041
... proc anonymousNimAsyncContinue_53840042() {.closure.} =
... try:
... if not finished(nameIterVar`gensym53840044):
... var next`gensym53840045 = nameIterVar`gensym53840044()
... while not isNil(next`gensym53840045) and finished(next`gensym53840045):
... next`gensym53840045 = nameIterVar`gensym53840044()
... if finished(nameIterVar`gensym53840044):
... break
... if next`gensym53840045 == nil:
... if not finished(retFutUnown`gensym53840043):
... let msg`gensym53840046 = "Async procedure ($1) yielded `nil`, are you await\'ing a `nil` Future?"
... raise
... (ref AssertionDefect)(msg: msg`gensym53840046 % "anonymous",
... parent: nil)
... else:
... {.gcsafe.}:
... {.push, hint[ConvFromXtoItselfNotNeeded]: false.}
... addCallback(next`gensym53840045, cast[proc () {.closure, gcsafe.}](anonymousNimAsyncContinue_53840042))
... {.pop.}
... except:
... if finished(retFutUnown`gensym53840043):
... raise
... else:
... fail(retFutUnown`gensym53840043, getCurrentException())
...
... anonymousNimAsyncContinue_53840042()
... return retFuture_53840040)
my code is only the code from the readme with a few extra lines, happens when I tried to add it to another project as well
AboveAverageDeveloper commented
found the issue
the jester part of my code had GC safe errors that I did not see
fixed them and it all worked perfectly