Undo broken type gen, verify type at compile time

This commit is contained in:
Zed 2019-08-18 01:26:38 +02:00
parent 16f77223ff
commit 520bafc617
3 changed files with 21 additions and 18 deletions

View file

@ -1,9 +1,20 @@
import strutils import sequtils, macros
import types import types
import prefs_impl import prefs_impl
export genUpdatePrefs export genUpdatePrefs
static:
var pFields: seq[string]
for id in getTypeImpl(Prefs)[2]:
if $id[0] == "id": continue
pFields.add $id[0]
let pDefs = toSeq(allPrefs()).mapIt(it.name)
let missing = pDefs.filterIt(it notin pFields)
if missing.len > 0:
raiseAssert("{$1} missing from the Prefs type" % missing.join(", "))
withCustomDb("prefs.db", "", "", ""): withCustomDb("prefs.db", "", "", ""):
try: try:
createTables() createTables()

View file

@ -54,7 +54,7 @@ const prefList*: Table[string, seq[Pref]] = {
] ]
}.toTable }.toTable
iterator allPrefs(): Pref = iterator allPrefs*(): Pref =
for k, v in prefList: for k, v in prefList:
for pref in v: for pref in v:
yield pref yield pref
@ -93,18 +93,3 @@ macro genUpdatePrefs*(): untyped =
result.add quote do: result.add quote do:
cache(prefs) cache(prefs)
macro genPrefsType*(): untyped =
result = nnkTypeSection.newTree(nnkTypeDef.newTree(
nnkPostfix.newTree(ident("*"), ident("Prefs")), newEmptyNode(),
nnkObjectTy.newTree(newEmptyNode(), newEmptyNode(), nnkRecList.newTree())))
result[0][2][2].add nnkIdentDefs.newTree(
nnkPostfix.newTree(ident("*"), ident("id")), ident("int"), newEmptyNode())
for pref in allPrefs():
result[0][2][2].add nnkIdentDefs.newTree(
nnkPostfix.newTree(ident("*"), ident(pref.name)),
(case pref.kind
of checkbox: ident("bool")
of input, select: ident("string")),
newEmptyNode())

View file

@ -50,7 +50,14 @@ db("cache.db", "", "", ""):
formatIt: dbValue($it) formatIt: dbValue($it)
.}: VideoType .}: VideoType
genPrefsType() Prefs* = object
videoPlayback*: bool
autoplayGifs*: bool
hideTweetStats*: bool
hideBanner*: bool
stickyProfile*: bool
replaceYouTube*: string
replaceTwitter*: string
type type
QueryKind* = enum QueryKind* = enum