mirror of https://github.com/status-im/NimYAML.git
62 lines
1.9 KiB
Nim
62 lines
1.9 KiB
Nim
# NimYAML - YAML implementation in Nim
|
|
# (c) Copyright 2015 Felix Krause
|
|
#
|
|
# See the file "copying.txt", included in this
|
|
# distribution, for details about the copyright.
|
|
|
|
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()
|
|
echo cur.getStackTrace()
|
|
var e = newException(YamlStreamError, cur.msg)
|
|
e.parent = cur
|
|
raise e |