Set type conversions
This commit is contained in:
parent
aaf5e7ce39
commit
5043d8595a
|
@ -1,6 +1,6 @@
|
|||
# Package
|
||||
|
||||
version = "3.3.0" # versioned in git, this version is just to confuse nimble
|
||||
version = "3.3.1" # versioned in git, this version is just to confuse nimble
|
||||
author = "Emery Hemingway"
|
||||
description = "data model and serialization format"
|
||||
license = "Unlicense"
|
||||
|
|
|
@ -700,6 +700,9 @@ proc toPreserve*[T](x: T; E = void): Preserve[E] =
|
|||
elif T is array | seq:
|
||||
result = Preserve[E](kind: pkSequence, sequence: newSeqOfCap[Preserve[E]](x.len))
|
||||
for v in x.items: result.sequence.add(toPreserve(v, E))
|
||||
elif T is set:
|
||||
result = Preserve[E](kind: pkSet, set: newSeqOfCap[Preserve[E]](x.len))
|
||||
for v in x.items: result.incl(toPreserve(v, E))
|
||||
elif T is bool:
|
||||
result = Preserve[E](kind: pkBoolean, bool: x)
|
||||
elif T is float32:
|
||||
|
@ -998,6 +1001,20 @@ proc preserveTo*(pr: Preserve; T: typedesc): Option[T] =
|
|||
if fromPreserve(v, pr):
|
||||
result = some(move v)
|
||||
|
||||
proc fromPreserveHook*[T, E](v: var set[T]; pr: Preserve[E]): bool =
|
||||
## Hook for unpreserving a `set`.
|
||||
if pr.kind == pkSet:
|
||||
reset v
|
||||
result = true
|
||||
var vv: T
|
||||
for e in pr.set:
|
||||
result = fromPreserve(vv, e)
|
||||
if result:
|
||||
v.incl vv
|
||||
else:
|
||||
reset v
|
||||
break
|
||||
|
||||
proc fromPreserveHook*[T, E](set: var HashSet[T]; pr: Preserve[E]): bool =
|
||||
## Hook for preserving ``HashSet``.
|
||||
if pr.kind == pkSet:
|
||||
|
|
|
@ -190,7 +190,7 @@ const parser = peg("Schema", p: ParseState):
|
|||
var n = initRecord(toSymbol"seqof", popStack())
|
||||
pushStack n
|
||||
|
||||
SetOfPattern <- "#{" * SimplePattern * '}':
|
||||
SetOfPattern <- "#{" * S * SimplePattern * S * '}':
|
||||
var n = initRecord(toSymbol"setof", popStack())
|
||||
pushStack n
|
||||
|
||||
|
|
Loading…
Reference in New Issue