UNPKG

kafkajs

Version:

A modern Apache Kafka client for node.js

88 lines (80 loc) 2.25 kB
const Encoder = require('../protocol/encoder') const Decoder = require('../protocol/decoder') const MemberMetadata = { /** * @param {Object} metadata * @param {number} metadata.version * @param {Array<string>} metadata.topics * @param {Buffer} [metadata.userData=Buffer.alloc(0)] * * @returns Buffer */ encode({ version, topics, userData = Buffer.alloc(0) }) { return new Encoder() .writeInt16(version) .writeArray(topics) .writeBytes(userData).buffer }, /** * @param {Buffer} buffer * @returns {Object} */ decode(buffer) { const decoder = new Decoder(buffer) return { version: decoder.readInt16(), topics: decoder.readArray(d => d.readString()), userData: decoder.readBytes(), } }, } const MemberAssignment = { /** * @param {object} options * @param {number} options.version * @param {Object<String,Array>} options.assignment, example: * { * 'topic-A': [0, 2, 4, 6], * 'topic-B': [0, 2], * } * @param {Buffer} [options.userData=Buffer.alloc(0)] * * @returns Buffer */ encode({ version, assignment, userData = Buffer.alloc(0) }) { return new Encoder() .writeInt16(version) .writeArray( Object.keys(assignment).map(topic => new Encoder().writeString(topic).writeArray(assignment[topic]) ) ) .writeBytes(userData).buffer }, /** * @param {Buffer} buffer * @returns {Object|null} */ decode(buffer) { const decoder = new Decoder(buffer) const decodePartitions = d => d.readInt32() const decodeAssignment = d => ({ topic: d.readString(), partitions: d.readArray(decodePartitions), }) const indexAssignment = (obj, { topic, partitions }) => Object.assign(obj, { [topic]: partitions }) if (!decoder.canReadInt16()) { return null } return { version: decoder.readInt16(), assignment: decoder.readArray(decodeAssignment).reduce(indexAssignment, {}), userData: decoder.readBytes(), } }, } module.exports = { MemberMetadata, MemberAssignment, }