UNPKG

@aeternity/aepp-calldata

Version:
57 lines (56 loc) 2.69 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var RLPInt = _interopRequireWildcard(require("../utils/RLPInt.cjs")); var _FateTag = _interopRequireDefault(require("../FateTag.cjs")); var _FateList = _interopRequireDefault(require("../types/FateList.cjs")); var _BaseSerializer = _interopRequireDefault(require("./BaseSerializer.cjs")); function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; } function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); } function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; } class ListSerializer extends _BaseSerializer.default { serialize(list) { const serializedElements = list.items.map(e => { return this.globalSerializer.serialize(e); }).flat(Infinity); const len = list.items.length; if (len < 16) { const prefix = len << 4 | _FateTag.default.SHORT_LIST; return [prefix, ...serializedElements]; } return [_FateTag.default.LONG_LIST, ...RLPInt.encode(len - 16), ...serializedElements]; } deserializeStream(data, typeInfo) { const buffer = new Uint8Array(data); const prefix = buffer[0]; let len = 0n; let rest = buffer.slice(1); if (prefix === _FateTag.default.LONG_LIST) { [len, rest] = RLPInt.decode(buffer.slice(1)); len += 16n; } if ((prefix & 0x0F) === _FateTag.default.SHORT_LIST) { len = BigInt((prefix & 0xF0) >> 4); } let itemsType; if (typeof typeInfo !== 'undefined') { itemsType = typeInfo.valuesType; } let el; const elements = []; for (let i = 0n; i < len; i++) { [el, rest] = this.globalSerializer.deserializeStream(rest, itemsType); elements.push(el); } if (len === 0n) { return [new _FateList.default(), rest]; } if (typeof typeInfo === 'undefined') { itemsType = elements[0].type; } return [new _FateList.default(itemsType, elements), rest]; } } var _default = exports.default = ListSerializer;