Skip to content

Instantly share code, notes, and snippets.

@Varriount
Last active June 2, 2017 02:07
Show Gist options
  • Save Varriount/cb3eff3662e392ad3bba57a1ba29c355 to your computer and use it in GitHub Desktop.
Save Varriount/cb3eff3662e392ad3bba57a1ba29c355 to your computer and use it in GitHub Desktop.
macro loadValue(dest, source: untyped, key: static[string], required=true): untyped =
## Loads a value from a JSON node to a member of the same name
let keyIdent = ident(key)
result = quote do:
when `required`:
var node = `source`[`key`]
else:
var node = `source`.getOrDefault(`key`)
if node != nil:
when type(`dest`) is string:
`dest`.`keyIdent` = getStr(node, `dest`.`keyIdent`)
when type(`dest`) is int:
`dest`.`keyIdent` = getNum(node, `dest`.`keyIdent`)
when type(`dest`) is float:
`dest`.`keyIdent` = getFNum(node, `dest`.`keyIdent`)
when type(`dest`) is bool:
`dest`.`keyIdent` = getBVal(node, `dest`.`keyIdent`)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment