@aeternity/aepp-calldata
Version:
Aeternity data serialization library
57 lines (56 loc) • 2.69 kB
JavaScript
;
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;