UNPKG

@aeternity/aepp-calldata

Version:
41 lines (39 loc) 1.65 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _FateTag = _interopRequireDefault(require("../FateTag.cjs")); var _BaseSerializer = _interopRequireDefault(require("./BaseSerializer.cjs")); var _FateByteArray = _interopRequireDefault(require("../types/FateByteArray.cjs")); var _IntSerializer = _interopRequireDefault(require("./IntSerializer.cjs")); function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; } const intSerializer = new _IntSerializer.default(); class ByteArraySerializer extends _BaseSerializer.default { serialize(data) { if (data.length === 0) { return [_FateTag.default.EMPTY_STRING]; } if (data.length < 64) { const prefix = data.length << 2 | _FateTag.default.SHORT_STRING; return [prefix, ...data.valueOf()]; } return [_FateTag.default.LONG_STRING, ...intSerializer.serialize(data.length - 64), ...data.valueOf()]; } deserializeStream(stream) { const data = new Uint8Array(stream); const prefix = data[0]; if (prefix === _FateTag.default.EMPTY_STRING) { return [new _FateByteArray.default(), data.slice(1)]; } if (prefix === _FateTag.default.LONG_STRING) { const [fateLen, rest] = intSerializer.deserializeStream(data.slice(1)); const len = Number(fateLen.valueOf()) + 64; return [new _FateByteArray.default(rest.slice(0, len)), rest.slice(len)]; } // short string const offset = (prefix >> 2) + 1; return [new _FateByteArray.default(data.slice(1, offset)), data.slice(offset)]; } } var _default = exports.default = ByteArraySerializer;