aboutsummaryrefslogtreecommitdiff
path: root/src/server/unmarshal.odin
diff options
context:
space:
mode:
Diffstat (limited to 'src/server/unmarshal.odin')
-rw-r--r--src/server/unmarshal.odin13
1 files changed, 13 insertions, 0 deletions
diff --git a/src/server/unmarshal.odin b/src/server/unmarshal.odin
index d7efe63..d93663c 100644
--- a/src/server/unmarshal.odin
+++ b/src/server/unmarshal.odin
@@ -60,6 +60,19 @@ unmarshal :: proc(json_value: json.Value, v: any, allocator: mem.Allocator) -> j
}
case json.Array:
#partial switch variant in type_info.variant {
+ case Type_Info_Slice:
+ array := (^mem.Raw_Slice)(v.data)
+ data := mem.alloc(variant.elem.size * int(len(j)), variant.elem.align, allocator) or_else panic("OOM")
+ array.data = data
+ array.len = len(j)
+
+ for i in 0 ..< array.len {
+ a := any{rawptr(uintptr(array.data) + uintptr(variant.elem_size * i)), variant.elem.id}
+
+ if ret := unmarshal(j[i], a, allocator); ret != nil {
+ return ret
+ }
+ }
case Type_Info_Dynamic_Array:
array := (^mem.Raw_Dynamic_Array)(v.data)
if array.data == nil {