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