private byte[] EncodeOffsetCommitRequest(OffsetCommitRequest request)
        {
            var message = new WriteByteStream();

            if (request.OffsetCommits == null)
            {
                request.OffsetCommits = new List <OffsetCommit>();
            }

            message.Pack(EncodeHeader(request));
            message.Pack(request.ConsumerGroup.ToInt16SizedBytes());

            var topicGroups = request.OffsetCommits.GroupBy(x => x.Topic).ToList();

            message.Pack(topicGroups.Count.ToBytes());

            foreach (var topicGroup in topicGroups)
            {
                var partitions = topicGroup.GroupBy(x => x.PartitionId).ToList();
                message.Pack(topicGroup.Key.ToInt16SizedBytes(), partitions.Count.ToBytes());

                foreach (var partition in partitions)
                {
                    foreach (var commit in partition)
                    {
                        message.Pack(partition.Key.ToBytes(), commit.Offset.ToBytes(), commit.TimeStamp.ToBytes(), commit.Metadata.ToInt16SizedBytes());
                    }
                }
            }

            message.Prepend(message.Length().ToBytes());

            return(message.Payload());
        }
        private byte[] EncodeOffsetCommitRequest(OffsetCommitRequest request)
        {
            if (request.OffsetCommits == null)
            {
                request.OffsetCommits = new List <OffsetCommit>();
            }

            using (var message = EncodeHeader(request).Pack(request.ConsumerGroup, StringPrefixEncoding.Int16))
            {
                var topicGroups = request.OffsetCommits.GroupBy(x => x.Topic).ToList();
                message.Pack(topicGroups.Count);

                foreach (var topicGroup in topicGroups)
                {
                    var partitions = topicGroup.GroupBy(x => x.PartitionId).ToList();
                    message.Pack(topicGroup.Key, StringPrefixEncoding.Int16)
                    .Pack(partitions.Count);

                    foreach (var partition in partitions)
                    {
                        foreach (var commit in partition)
                        {
                            message.Pack(partition.Key)
                            .Pack(commit.Offset)
                            .Pack(commit.TimeStamp)
                            .Pack(commit.Metadata, StringPrefixEncoding.Int16);
                        }
                    }
                }

                return(message.Payload());
            }
        }