norbert/src/state.nim
2022-02-06 18:34:54 +01:00

42 lines
907 B
Nim

import tables, strtabs, sequtils, nativesockets
import ../lib/dns
type
RecordKey* = tuple
name: string
dtype: DnsType
type
RecordsTable* = Table[RecordKey, seq[string]]
type
AppConfig* = object
users*: StringTableRef
base*: string
apiPort*: Port
dnsPort*: Port
func trimName*(name: string): string =
if name[^1] == '.':
return name[0 .. ^2]
else:
return name
proc addRecord*(records: var RecordsTable, key: RecordKey, record: string) =
if records.hasKey(key):
records[key].add(record)
else:
records[key] = @[record]
proc delRecord*(records: var RecordsTable, key: RecordKey, record: string) =
if not records.hasKey(key):
return
records[key].keepItIf(it != record)
if len(records[key]) == 0:
records.del(key)
# TODO: don't use a global for this
var records* {.threadvar.}: RecordsTable
records = initTable[RecordKey, seq[string]]()