UNPKG

json-as

Version:

The only JSON library you'll need for AssemblyScript. SIMD enabled

45 lines (37 loc) 1.38 kB
import { bs } from "../../../lib/as-bs"; import { JSON } from "../.."; import { BRACE_LEFT, BRACE_RIGHT, QUOTE } from "../../custom/chars"; import { bytes } from "../../util"; export function serializeObject(data: JSON.Obj): void { if (!data.size) { bs.proposeSize(4); store<u32>(bs.offset, 8192123); bs.offset += 4; return; } bs.proposeSize(load<u32>(changetype<usize>(data), offsetof<JSON.Obj>("stackSize")) - 2); const keys = data.keys(); const values = data.values(); // console.log(" Keys " + keys.join(" ")); // console.log(" Values " + values.map<string>(v => v.toString()).join(" ")) store<u16>(bs.offset, BRACE_LEFT); bs.offset += 2; const firstKey = unchecked(keys[0]); const keySize = bytes(firstKey); store<u16>(bs.offset, QUOTE); memory.copy(bs.offset + 2, changetype<usize>(firstKey), keySize); store<u32>((bs.offset += keySize + 2), 3801122); // ": bs.offset += 4; JSON.__serialize(unchecked(values[0])); for (let i = 1; i < keys.length; i++) { const key = unchecked(keys[i]); const keySize = bytes(key); store<u32>(bs.offset, 2228268); // ," memory.copy(bs.offset + 4, changetype<usize>(key), keySize); store<u32>((bs.offset += keySize + 4), 3801122); // ": bs.offset += 4; JSON.__serialize(unchecked(values[i])); } store<u16>(bs.offset, BRACE_RIGHT); bs.offset += 2; }