62 lines
1.2 KiB
Nim

const
faststreams_async_backend {.strdefine.} = "chronos"
type
CloseBehavior* = enum
waitAsyncClose
dontWaitAsyncClose
const debugHelpers* = defined(debugHelpers)
when faststreams_async_backend == "chronos":
import
chronos
export
chronos
template fsAwait*(f: Future): untyped =
await f
elif faststreams_async_backend in ["std", "asyncdispatch"]:
import
std/asyncdispatch
export
asyncdispatch
template fsAwait*(awaited: Future): untyped =
# TODO revisit after https://github.com/nim-lang/Nim/pull/12085/ is merged
let f = awaited
yield f
if not isNil(f.error):
raise f.error
f.read
type Duration* = int
else:
{.fatal: "Unrecognized network backend: " & faststreams_async_backend.}
when defined(danger):
template fsAssert*(x) = discard
template fsAssert*(x, msg) = discard
else:
template fsAssert*(x) = doAssert(x)
template fsAssert*(x, msg) = doAssert(x, msg)
template fsTranslateErrors*(errMsg: string, body: untyped) =
try:
body
except IOError as err:
raise err
except Exception as err:
if err[] of Defect:
raise (ref Defect)(err)
else:
raise newException(IOError, errMsg, err)
template noAwait*(expr: untyped): untyped =
expr