import { JSON } from "../.."; import { deserializeArbitraryArray } from "./array/arbitrary"; import { deserializeArrayArray } from "./array/array"; import { deserializeBooleanArray } from "./array/bool"; import { deserializeFloatArray_NAIVE } from "./array/float"; import { deserializeGenericArray } from "./array/generic"; import { deserializeIntegerArray_NAIVE } from "./array/integer"; import { deserializeMapArray } from "./array/map"; import { deserializeStructArray } from "./array/struct"; import { deserializeStringArray_NAIVE } from "./array/string"; import { deserializeObjectArray } from "./array/object"; import { deserializeBoxArray } from "./array/box"; import { deserializeRawArray } from "./array/raw"; // @ts-ignore: Decorator valid here export function deserializeArray( srcStart: usize, srcEnd: usize, dst: usize, ): T { if (isString>()) { return deserializeStringArray_NAIVE(srcStart, srcEnd, dst); } else if (isBoolean>()) { // @ts-ignore return deserializeBooleanArray(srcStart, srcEnd, dst); } else if (isInteger>()) { // @ts-ignore return deserializeIntegerArray_NAIVE(srcStart, srcEnd, dst); } else if (isFloat>()) { // @ts-ignore return deserializeFloatArray_NAIVE(srcStart, srcEnd, dst); } else if (isArray>()) { // @ts-ignore: type return deserializeArrayArray(srcStart, srcEnd, dst); } else if (isManaged>() || isReference>()) { const type = changetype>>(0); if (type instanceof JSON.Value) { // @ts-ignore: type return deserializeArbitraryArray(srcStart, srcEnd, dst); } else if (type instanceof JSON.Box) { // @ts-ignore: type return deserializeBoxArray(srcStart, srcEnd, dst); } else if (type instanceof JSON.Obj) { // @ts-ignore: type return deserializeObjectArray(srcStart, srcEnd, dst); } else if (type instanceof JSON.Raw) { // @ts-ignore: type return deserializeRawArray(srcStart, srcEnd, dst); } else if (type instanceof Date) { // @ts-ignore: type return deserializeGenericArray(srcStart, srcEnd, dst); } else if (type instanceof Set) { // @ts-ignore: type return deserializeGenericArray(srcStart, srcEnd, dst); } else if (type instanceof Map) { // @ts-ignore: type return deserializeMapArray(srcStart, srcEnd, dst); // @ts-ignore: defined by transform } else if (isDefined(type.__DESERIALIZE_CUSTOM)) { return deserializeStructArray(srcStart, srcEnd, dst); // @ts-ignore: defined by transform } else if ( isDefined(type.__DESERIALIZE_SLOW) || isDefined(type.__DESERIALIZE_FAST) ) { return deserializeStructArray(srcStart, srcEnd, dst); } throw new Error("Could not parse array of type " + nameof() + "!"); } else { throw new Error("Could not parse array of type " + nameof() + "!"); } }