diff options
Diffstat (limited to 'src/server')
| -rw-r--r-- | src/server/marshal.odin | 12 | ||||
| -rw-r--r-- | src/server/unmarshal.odin | 21 |
2 files changed, 17 insertions, 16 deletions
diff --git a/src/server/marshal.odin b/src/server/marshal.odin index 1f18545..cb9d946 100644 --- a/src/server/marshal.odin +++ b/src/server/marshal.odin @@ -2,14 +2,14 @@ package server import "base:runtime" -import "core:mem" +import "core:encoding/json" +import "core:io" +import "core:log" import "core:math/bits" +import "core:mem" +import "core:reflect" import "core:strconv" import "core:strings" -import "core:reflect" -import "core:io" -import "core:encoding/json" -import "core:log" Marshal_Data_Error :: enum { None, @@ -419,7 +419,7 @@ marshal_to_writer :: proc( case runtime.Type_Info_Struct: opt_write_start(w, opt, '{') or_return - for name, i in info.names { + for name, i in info.names[0:info.field_count] { id := info.types[i].id data := rawptr(uintptr(v.data) + info.offsets[i]) diff --git a/src/server/unmarshal.odin b/src/server/unmarshal.odin index 7ad68c6..dea7d15 100644 --- a/src/server/unmarshal.odin +++ b/src/server/unmarshal.odin @@ -3,9 +3,9 @@ package server import "base:runtime" import "core:encoding/json" -import "core:strings" -import "core:mem" import "core:fmt" +import "core:mem" +import "core:strings" /* Right now union handling is type specific so you can only have one struct type, int type, etc. @@ -33,8 +33,8 @@ unmarshal :: proc( case json.Object: #partial switch variant in type_info.variant { case Type_Info_Struct: - for field, i in variant.names { - a := any{ + for field, i in variant.names[0:variant.field_count] { + a := any { rawptr(uintptr(v.data) + uintptr(variant.offsets[i])), variant.types[i].id, } @@ -78,11 +78,12 @@ unmarshal :: proc( case Type_Info_Dynamic_Array: array := (^mem.Raw_Dynamic_Array)(v.data) if array.data == nil { - array.data = mem.alloc( - len(j) * variant.elem_size, - variant.elem.align, - allocator, - ) or_else panic("OOM") + array.data = + mem.alloc( + len(j) * variant.elem_size, + variant.elem.align, + allocator, + ) or_else panic("OOM") array.len = len(j) array.cap = len(j) array.allocator = allocator @@ -91,7 +92,7 @@ unmarshal :: proc( } for i in 0 ..< array.len { - a := any{ + a := any { rawptr( uintptr(array.data) + uintptr(variant.elem_size * i), ), |