UNPKG

@aeternity/aepp-calldata

Version:
59 lines (58 loc) 2.77 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _FateTag = _interopRequireDefault(require("../FateTag.cjs")); var _FateTuple = _interopRequireDefault(require("../types/FateTuple.cjs")); var _BaseSerializer = _interopRequireDefault(require("./BaseSerializer.cjs")); var RLPInt = _interopRequireWildcard(require("../utils/RLPInt.cjs")); 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; } function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; } class TupleSerializer extends _BaseSerializer.default { serialize(tuple) { const len = tuple.size; if (len === 0) { return [_FateTag.default.EMPTY_TUPLE]; } const elements = tuple.items.map(e => this.globalSerializer.serialize(e)).flat(Infinity); if (len < 16) { const prefix = len << 4 | _FateTag.default.SHORT_TUPLE; return [prefix, ...elements]; } return [_FateTag.default.LONG_TUPLE, ...RLPInt.encode(len - 16), ...elements]; } deserializeStream(data, typeInfo) { const buffer = new Uint8Array(data); const prefix = buffer[0]; let len = 0n; let rest = buffer.slice(1); if (prefix === _FateTag.default.EMPTY_TUPLE) { return [new _FateTuple.default(), rest]; } if ((prefix & 0x0F) === _FateTag.default.SHORT_TUPLE) { len = (prefix & 0xF0) >> 4; } if (prefix === _FateTag.default.LONG_TUPLE) { [len, rest] = RLPInt.decode(buffer.slice(1)); len += 16n; } let valueTypes = []; if (typeof typeInfo !== 'undefined') { valueTypes = typeInfo.valueTypes; } const elements = []; let el = null; for (let i = 0n; i < len; i++) { [el, rest] = this.globalSerializer.deserializeStream(rest, valueTypes[i]); elements.push(el); } let type = typeInfo; if (typeof typeInfo === 'undefined') { type = elements.map(e => e.type); } return [new _FateTuple.default(type, elements), rest]; } } var _default = exports.default = TupleSerializer;