@ckb-lumos/codec
Version:
Make your own molecule binding in JavaScript(TypeScript)
56 lines (53 loc) • 1.43 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.byteArrayOf = byteArrayOf;
exports.byteOf = byteOf;
exports.byteVecOf = byteVecOf;
var _utils = require("../utils");
var _bytes = require("../bytes");
var _base = require("../base");
var _number = require("../number");
/**
* a helper function to create custom codec of `array SomeType [byte; n]`
* @param codec
*/
function byteArrayOf(codec) {
const byteLength = codec.byteLength;
return (0, _base.createFixedBytesCodec)({
byteLength,
pack: packable => codec.pack(packable),
unpack: buf => codec.unpack(buf)
});
}
/**
* a helper function to create custom codec of `byte`
* @param codec
*/
function byteOf(codec) {
return byteArrayOf({
...codec,
byteLength: 1
});
}
/**
* a helper function to create custom codec of `vector Bytes <byte>`
* @param codec
*/
function byteVecOf(codec) {
return (0, _base.createBytesCodec)({
pack(unpacked) {
const payload = codec.pack(unpacked);
const header = _number.Uint32LE.pack(payload.byteLength);
return (0, _bytes.concat)(header, payload);
},
unpack(packed) {
(0, _utils.assertMinBufferLength)(packed, 4);
const header = _number.Uint32LE.unpack(packed.slice(0, 4));
(0, _utils.assertBufferLength)(packed.slice(4), header);
return codec.unpack(packed.slice(4));
}
});
}
//# sourceMappingURL=helper.js.map