diff options
author | Adam Chlipala <adam@chlipala.net> | 2020-01-15 12:07:44 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-01-15 12:07:44 -0500 |
commit | 5cce43a484bdde0053820b8ae408bcba830b25ba (patch) | |
tree | 9d5719046e082337e3ed057e6a495db3faca2c8a /src/fromjson.sml | |
parent | 11bf1e86020f99893cd987eb1a15952e517248cf (diff) | |
parent | 483115ee395c26ba7b52ac84757c8a1de4fe2d33 (diff) |
Merge pull request #186 from FrigoEU/lsp
Language Server Protocol (LSP)
Diffstat (limited to 'src/fromjson.sml')
-rw-r--r-- | src/fromjson.sml | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/src/fromjson.sml b/src/fromjson.sml new file mode 100644 index 00000000..6a9bd71b --- /dev/null +++ b/src/fromjson.sml @@ -0,0 +1,35 @@ +structure FromJson :> FROMJSON = struct +fun getO (s: string) (l: Json.json): Json.json option = + case l of + Json.Obj pairs => + (case List.find (fn tup => #1 tup = s) pairs of + NONE => NONE + | SOME tup => SOME (#2 tup)) + | _ => raise Fail ("Expected JSON object, got: " ^ Json.print l) +fun get (s: string) (l: Json.json): Json.json = + (case getO s l of + NONE => raise Fail ("Failed to find JSON object key " ^ s ^ " in " ^ Json.print l) + | SOME a => a) + +fun asInt (j: Json.json): int = + case j of + Json.Int i => i + | _ => raise Fail ("Expected JSON int, got: " ^ Json.print j) + +fun asString (j: Json.json): string = + case j of + Json.String s => s + | _ => raise Fail ("Expected JSON string, got: " ^ Json.print j) + +fun asOptionalInt (j: Json.json): int option = + case j of + Json.Null => NONE + | Json.Int i => SOME i + | _ => raise Fail ("Expected JSON int or null, got: " ^ Json.print j) + +fun asOptionalString (j: Json.json): string option = + case j of + Json.Null => NONE + | Json.String s => SOME s + | _ => raise Fail ("Expected JSON string or null, got: " ^ Json.print j) +end |