mirror of
https://github.com/status-im/NimYAML.git
synced 2025-01-27 11:34:56 +00:00
Added jester-based YAML parsing webservice
* Added server/server.nim * Fixed a problem in presenter that made it crash when outputting a root map to JSON
This commit is contained in:
parent
f3f6f5de9e
commit
68f0ba0cc7
@ -34,3 +34,7 @@ task bench, "Benchmarking":
|
|||||||
task clean, "Remove all generated files":
|
task clean, "Remove all generated files":
|
||||||
exec "rm -f yaml.html libyaml.* test/tests test/parsing test/lexing"
|
exec "rm -f yaml.html libyaml.* test/tests test/parsing test/lexing"
|
||||||
setCommand "nop"
|
setCommand "nop"
|
||||||
|
|
||||||
|
task server, "Compile server daemon":
|
||||||
|
--d:release
|
||||||
|
setCommand "c", "server/server"
|
@ -323,7 +323,7 @@ proc present*(s: YamlStream, target: Stream, tagLib: YamlTagLibrary,
|
|||||||
of ypsCanonical:
|
of ypsCanonical:
|
||||||
nextState = dFlowExplicitMapStart
|
nextState = dFlowExplicitMapStart
|
||||||
of ypsJson:
|
of ypsJson:
|
||||||
if levels[levels.high] in
|
if levels.len > 0 and levels[levels.high] in
|
||||||
[dFlowImplicitMapStart, dFlowImplicitMapValue]:
|
[dFlowImplicitMapStart, dFlowImplicitMapValue]:
|
||||||
raise newException(YamlPresenterJsonError,
|
raise newException(YamlPresenterJsonError,
|
||||||
"Cannot have map as map key in JSON output!")
|
"Cannot have map as map key in JSON output!")
|
||||||
|
48
server/server.nim
Normal file
48
server/server.nim
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
# NimYAML - YAML implementation in Nim
|
||||||
|
# (c) Copyright 2015 Felix Krause
|
||||||
|
#
|
||||||
|
# See the file "copying.txt", included in this
|
||||||
|
# distribution, for details about the copyright.
|
||||||
|
|
||||||
|
import jester, asyncdispatch, json, streams
|
||||||
|
import yaml
|
||||||
|
|
||||||
|
routes:
|
||||||
|
get "/":
|
||||||
|
headers["Content-Type"] = "text/plain"
|
||||||
|
resp "I am a friendly NimYAML parser webservice."
|
||||||
|
post "/":
|
||||||
|
var style: YamlPresentationStyle
|
||||||
|
case @"style"
|
||||||
|
of "minimal": style = ypsMinimal
|
||||||
|
of "canonical": style = ypsCanonical
|
||||||
|
of "default": style = ypsDefault
|
||||||
|
of "json": style = ypsJson
|
||||||
|
of "blocks": style = ypsBlockOnly
|
||||||
|
var
|
||||||
|
output = newStringStream()
|
||||||
|
resultNode = newJObject()
|
||||||
|
headers["Access-Control-Allow-Origin"] = "flyx.github.io"
|
||||||
|
try:
|
||||||
|
try:
|
||||||
|
transform(newStringStream(@"input"), output, style)
|
||||||
|
resultNode["code"] = %0
|
||||||
|
resultNode["output"] = %output.data
|
||||||
|
except YamlParserError:
|
||||||
|
let e = (ref YamlParserError)(getCurrentException())
|
||||||
|
resultNode["code"] = %1
|
||||||
|
resultNode["line"] = %e.line
|
||||||
|
resultNode["column"] = %e.column
|
||||||
|
resultNode["message"] = %e.msg
|
||||||
|
resultNode["detail"] = %e.lineContent
|
||||||
|
except YamlPresenterJsonError:
|
||||||
|
let e = (ref YamlPresenterJsonError)(getCurrentException())
|
||||||
|
resultNode["code"] = %2
|
||||||
|
resultNode["message"] = %e.msg
|
||||||
|
headers["Content-Type"] = "application/json"
|
||||||
|
resp resultNode.pretty
|
||||||
|
except:
|
||||||
|
status = Http500
|
||||||
|
resp getCurrentException().repr
|
||||||
|
|
||||||
|
runForever()
|
Loading…
x
Reference in New Issue
Block a user