UNPKG

@aggris2/ssz

Version:

Simple Serialize

80 lines 2.55 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.BooleanType = void 0; const persistent_merkle_tree_1 = require("@chainsafe/persistent-merkle-tree"); const basic_1 = require("./basic"); /* eslint-disable @typescript-eslint/member-ordering */ /** * Boolean: True or False * - Notation: `boolean` */ class BooleanType extends basic_1.BasicType { constructor() { super(...arguments); this.typeName = "boolean"; this.byteLength = 1; this.itemsPerChunk = 32; this.fixedSize = 1; this.minSize = 1; this.maxSize = 1; } defaultValue() { return false; } // Serialization + deserialization value_serializeToBytes(output, offset, value) { output.uint8Array[offset] = value ? 1 : 0; return offset + 1; } value_deserializeFromBytes(data, start, end) { this.assertValidSize(end - start); switch (data.uint8Array[start]) { case 1: return true; case 0: return false; default: throw new Error(`Boolean: invalid value: ${data.uint8Array[start]}`); } } tree_serializeToBytes(output, offset, node) { // TODO: Assumes LeafNode has 4 byte uints are primary unit output.uint8Array[offset] = node.getUint(4, 0); return offset + 1; } tree_deserializeFromBytes(data, start, end) { this.assertValidSize(end - start); const value = data.uint8Array[start]; if (value > 1) { throw Error(`Boolean: invalid value ${value}`); } return persistent_merkle_tree_1.LeafNode.fromUint32(value); } // Fast tree opts tree_getFromNode(leafNode) { return leafNode.getUint(4, 0) === 1; } tree_setToNode(leafNode, value) { leafNode.setUint(4, 0, value ? 1 : 0); } tree_getFromPackedNode(leafNode, index) { const offsetBytes = index % this.itemsPerChunk; return leafNode.getUint(1, offsetBytes) !== 0; } tree_setToPackedNode(leafNode, index, value) { const offsetBytes = index % this.itemsPerChunk; leafNode.setUint(1, offsetBytes, value ? 1 : 0); } // JSON fromJson(json) { if (typeof json !== "boolean") { throw Error(`JSON invalid type ${typeof json} expected boolean`); } return json; } toJson(value) { return value; } } exports.BooleanType = BooleanType; //# sourceMappingURL=boolean.js.map