UNPKG

diffusion

Version:

Diffusion JavaScript client

50 lines (49 loc) 1.75 kB
"use strict"; /** * @module Topics */ Object.defineProperty(exports, "__esModule", { value: true }); exports.write = exports.read = void 0; var Codec = require("./../../io/codec"); var BEES = require("./../../serialisers/byte-encoded-enum-serialiser"); var uint8array_1 = require("./../../util/uint8array"); var topic_specification_1 = require("../../../topics/topic-specification"); var topic_type_1 = require("../../../topics/topic-type"); var cachedTopicSpecification; var cachedHash; var cacheBytesRead; /** * Read a {@link TopicSpecification} from the stream * * @param bis the input stream * @return the {@link TopicSpecification} that was read */ function read(bis) { if (cachedHash) { var newHash = bis.buffer.subarray(bis.pos, bis.pos + cacheBytesRead); if (uint8array_1.isEqualUint8Arrays(newHash, cachedHash)) { bis.readMany(cacheBytesRead); return cachedTopicSpecification; } } var offset = bis.pos; var type = BEES.read(bis, topic_type_1.TopicTypeEnum); var properties = Codec.readDictionary(bis, Codec.readString); var topicSpecification = new topic_specification_1.TopicSpecification(type, properties); cacheBytesRead = bis.pos - offset; cachedHash = Uint8Array.from(bis.buffer.subarray(offset, bis.pos)); cachedTopicSpecification = Object.freeze(topicSpecification); return topicSpecification; } exports.read = read; /** * Write a {@link TopicSpecification} to the stream * * @param bos the output stream * @param value the {@link TopicSpecification} to be written */ function write(bos, value) { BEES.write(bos, value.type); Codec.writeDictionary(bos, value.properties, Codec.writeString); } exports.write = write;