diffusion
Version:
Diffusion JavaScript client
50 lines (49 loc) • 1.75 kB
JavaScript
;
/**
* @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;