import { JSON } from "../.."; import { serializeArray } from "./array"; import { serializeBool } from "./bool"; import { serializeInteger } from "./integer"; import { serializeString } from "./string"; export function serializeArbitrary(src: JSON.Value): void { switch (src.type) { case JSON.Types.U8: serializeInteger(src.get()); break; case JSON.Types.U16: serializeInteger(src.get()); break; case JSON.Types.U32: serializeInteger(src.get()); break; case JSON.Types.U64: serializeInteger(src.get()); break; case JSON.Types.String: serializeString(src.get()); break; case JSON.Types.Bool: serializeBool(src.get()); case JSON.Types.Array: { serializeArray(src.get()); break; } default: { const fn = JSON.Value.METHODS.get(src.type - JSON.Types.Struct); const value = src.get(); call_indirect(fn, 0, value); } } }