import { JSON } from "../../.."; import { BRACKET_LEFT, BRACKET_RIGHT, COMMA } from "../../../custom/chars"; import { isSpace } from "../../../util"; import { scanValueEnd } from "../../../util/scanValueEnd"; export function deserializeGenericArray( srcStart: usize, srcEnd: usize, dst: usize, ): T { const out = changetype>( dst || changetype(instantiate()), ); out.length = 0; while (srcEnd > srcStart && isSpace(load(srcEnd - 2))) srcEnd -= 2; if (srcStart >= srcEnd) throw new Error("Input string had zero length or was all whitespace"); if (load(srcStart) != BRACKET_LEFT) throw new Error("Expected '[' at start of array"); srcStart += 2; while (srcStart < srcEnd) { while (srcStart < srcEnd && isSpace(load(srcStart))) srcStart += 2; if (srcStart >= srcEnd) break; if (load(srcStart) == BRACKET_RIGHT) return out; const valueEnd = scanValueEnd(srcStart, srcEnd); if (!valueEnd || valueEnd <= srcStart) break; out.push(JSON.__deserialize>(srcStart, valueEnd)); srcStart = valueEnd; while (srcStart < srcEnd && isSpace(load(srcStart))) srcStart += 2; if (srcStart >= srcEnd) break; const code = load(srcStart); if (code == COMMA) { srcStart += 2; continue; } if (code == BRACKET_RIGHT) return out; break; } throw new Error("Failed to parse JSON!"); }