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