private void LogWeights([NotNull] ReplicaWeights weights)
        {
            if (!log.IsEnabledForDebug())
            {
                return;
            }

            var builder = new StringBuilder();

            if (weights.Count == 0)
            {
                builder.Append("[empty]");
            }
            else
            {
                foreach (var pair in weights)
                {
                    builder.Append("\n\t");
                    builder.Append(pair.Key.DnsSafeHost);
                    builder.Append(":");
                    builder.Append(pair.Key.Port);
                    builder.Append(" - ");
                    builder.Append(pair.Value.Value.ToString("F4"));
                }
            }

            log.Debug(
                "Updated weights for topology '{Topology}' in environment '{Environment}': {Weights}",
                application,
                environment,
                builder.ToString());
        }
        public static ReplicaWeights Deserialize([NotNull] byte[] data)
        {
            var reader = new BinaryBufferReader(data, 0);

            var count = reader.ReadInt32();

            var weights = new ReplicaWeights(count);

            for (var i = 0; i < count; i++)
            {
                var replica = ReadReplica(reader);
                var weight  = ReadWeight(reader);

                weights[replica] = weight;
            }

            return(weights);
        }