mirror of https://github.com/status-im/NimYAML.git
55 lines
1.6 KiB
Nim
55 lines
1.6 KiB
Nim
|
proc initYamlStream*(backend: iterator(): YamlStreamEvent): YamlStream =
|
||
|
result.peeked = false
|
||
|
result.backend = backend
|
||
|
|
||
|
proc next*(s: var YamlStream): YamlStreamEvent =
|
||
|
if s.peeked:
|
||
|
s.peeked = false
|
||
|
result = s.cached
|
||
|
else:
|
||
|
try:
|
||
|
result = s.backend()
|
||
|
assert(not finished(s.backend))
|
||
|
except AssertionError: raise
|
||
|
except YamlStreamError:
|
||
|
let cur = getCurrentException()
|
||
|
var e = newException(YamlStreamError, cur.msg)
|
||
|
e.parent = cur.parent
|
||
|
raise e
|
||
|
except Exception:
|
||
|
let cur = getCurrentException()
|
||
|
var e = newException(YamlStreamError, cur.msg)
|
||
|
e.parent = cur
|
||
|
raise e
|
||
|
|
||
|
proc peek*(s: var YamlStream): YamlStreamEvent =
|
||
|
if not s.peeked:
|
||
|
s.cached = s.next()
|
||
|
s.peeked = true
|
||
|
result = s.cached
|
||
|
|
||
|
proc `peek=`*(s: var YamlStream, value: YamlStreamEvent) =
|
||
|
s.cached = value
|
||
|
s.peeked = true
|
||
|
|
||
|
proc finished*(s: var YamlStream): bool =
|
||
|
if s.peeked:
|
||
|
result = false
|
||
|
else:
|
||
|
try:
|
||
|
s.cached = s.backend()
|
||
|
if finished(s.backend): result = true
|
||
|
else:
|
||
|
s.peeked = true
|
||
|
result = false
|
||
|
except AssertionError: raise
|
||
|
except YamlStreamError:
|
||
|
let cur = getCurrentException()
|
||
|
var e = newException(YamlStreamError, cur.msg)
|
||
|
e.parent = cur.parent
|
||
|
raise e
|
||
|
except Exception:
|
||
|
let cur = getCurrentException()
|
||
|
var e = newException(YamlStreamError, cur.msg)
|
||
|
e.parent = cur
|
||
|
raise e
|