aboutsummaryrefslogtreecommitdiff
path: root/core/encoding
diff options
context:
space:
mode:
authorDaniel Gavin <danielgavin5@hotmail.com>2021-11-07 14:35:52 +0100
committerDaniel Gavin <danielgavin5@hotmail.com>2021-11-07 14:35:52 +0100
commit5b074ceee519a97b13d71aa0257defcd04cc4a63 (patch)
treeaf744a9bbca0e6a495761d6754029c9191200c39 /core/encoding
parent40eed2952787415d90d403f11452850286e8c574 (diff)
Add json encoding test + fix enum not being set on success.
Diffstat (limited to 'core/encoding')
-rw-r--r--core/encoding/json/marshal.odin4
-rw-r--r--core/encoding/json/parser.odin7
2 files changed, 6 insertions, 5 deletions
diff --git a/core/encoding/json/marshal.odin b/core/encoding/json/marshal.odin
index 0c95df924..adbcb95be 100644
--- a/core/encoding/json/marshal.odin
+++ b/core/encoding/json/marshal.odin
@@ -18,7 +18,7 @@ Marshal_Error :: union {
marshal :: proc(v: any, allocator := context.allocator) -> (data: []byte, err: Marshal_Error) {
b := strings.make_builder(allocator)
- defer if err != nil || data == nil {
+ defer if err != .None {
strings.destroy_builder(&b)
}
@@ -27,7 +27,7 @@ marshal :: proc(v: any, allocator := context.allocator) -> (data: []byte, err: M
if len(b.buf) != 0 {
data = b.buf[:]
}
- return
+ return data, .None
}
marshal_to_builder :: proc(b: ^strings.Builder, v: any) -> Marshal_Error {
diff --git a/core/encoding/json/parser.odin b/core/encoding/json/parser.odin
index af32e7266..c682ec9bd 100644
--- a/core/encoding/json/parser.odin
+++ b/core/encoding/json/parser.odin
@@ -106,6 +106,7 @@ parse_comma :: proc(p: ^Parser) -> (do_break: bool) {
}
parse_value :: proc(p: ^Parser) -> (value: Value, err: Error) {
+ err = .None
token := p.curr_token
#partial switch token.kind {
case .Null:
@@ -175,6 +176,7 @@ parse_value :: proc(p: ^Parser) -> (value: Value, err: Error) {
}
parse_array :: proc(p: ^Parser) -> (value: Value, err: Error) {
+ err = .None
expect_token(p, .Open_Bracket) or_return
array: Array
@@ -266,15 +268,14 @@ parse_object_body :: proc(p: ^Parser, end_token: Token_Kind) -> (obj: Object, er
break
}
}
- return
+ return obj, .None
}
parse_object :: proc(p: ^Parser) -> (value: Value, err: Error) {
expect_token(p, .Open_Brace) or_return
obj := parse_object_body(p, .Close_Brace) or_return
expect_token(p, .Close_Brace) or_return
- value = obj
- return
+ return obj, .None
}