Undo broken type gen, verify type at compile time
This commit is contained in:
parent
16f77223ff
commit
520bafc617
3 changed files with 21 additions and 18 deletions
|
@ -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()
|
||||||
|
|
|
@ -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())
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
Loading…
Reference in a new issue