Why not do something like:
template withFile(f: string, mode: string, statements: untyped) =
var fileMode: FileMode
case mode
of "r": fileMode = FileMode.fmRead
of "w": fileMode = FileMode.fmWrite
of "a+": fileMode = FileMode.fmReadWrite
of "r+": fileMode = FileMode.fmReadWriteExisting
var file {.inject.} = open(f, fileMode)
defer: file.close()
statements
usage example:
withFile("/path/to/file", "r"):
while not endOfFile(file):
echo(file.readLine())
