public void MergeFrom(MetricValue other)
        {
            if (other == null)
            {
                return;
            }
            labels_.Add(other.labels_);
            if (other.startTime_ != null)
            {
                if (startTime_ == null)
                {
                    StartTime = new global::Google.Protobuf.WellKnownTypes.Timestamp();
                }
                StartTime.MergeFrom(other.StartTime);
            }
            if (other.endTime_ != null)
            {
                if (endTime_ == null)
                {
                    EndTime = new global::Google.Protobuf.WellKnownTypes.Timestamp();
                }
                EndTime.MergeFrom(other.EndTime);
            }
            switch (other.ValueCase)
            {
            case ValueOneofCase.BoolValue:
                BoolValue = other.BoolValue;
                break;

            case ValueOneofCase.Int64Value:
                Int64Value = other.Int64Value;
                break;

            case ValueOneofCase.DoubleValue:
                DoubleValue = other.DoubleValue;
                break;

            case ValueOneofCase.StringValue:
                StringValue = other.StringValue;
                break;

            case ValueOneofCase.DistributionValue:
                if (DistributionValue == null)
                {
                    DistributionValue = new global::Google.Cloud.ServiceControl.V1.Distribution();
                }
                DistributionValue.MergeFrom(other.DistributionValue);
                break;
            }

            _unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields);
        }
        void pb::IBufferMessage.InternalMergeFrom(ref pb::ParseContext input)
        {
            uint tag;

            while ((tag = input.ReadTag()) != 0)
            {
                switch (tag)
                {
                default:
                    _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, ref input);
                    break;

                case 10: {
                    labels_.AddEntriesFrom(ref input, _map_labels_codec);
                    break;
                }

                case 18: {
                    if (startTime_ == null)
                    {
                        StartTime = new global::Google.Protobuf.WellKnownTypes.Timestamp();
                    }
                    input.ReadMessage(StartTime);
                    break;
                }

                case 26: {
                    if (endTime_ == null)
                    {
                        EndTime = new global::Google.Protobuf.WellKnownTypes.Timestamp();
                    }
                    input.ReadMessage(EndTime);
                    break;
                }

                case 32: {
                    BoolValue = input.ReadBool();
                    break;
                }

                case 40: {
                    Int64Value = input.ReadInt64();
                    break;
                }

                case 49: {
                    DoubleValue = input.ReadDouble();
                    break;
                }

                case 58: {
                    StringValue = input.ReadString();
                    break;
                }

                case 66: {
                    global::Google.Cloud.ServiceControl.V1.Distribution subBuilder = new global::Google.Cloud.ServiceControl.V1.Distribution();
                    if (valueCase_ == ValueOneofCase.DistributionValue)
                    {
                        subBuilder.MergeFrom(DistributionValue);
                    }
                    input.ReadMessage(subBuilder);
                    DistributionValue = subBuilder;
                    break;
                }
                }
            }
        }
        public void MergeFrom(pb::CodedInputStream input)
        {
    #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
            input.ReadRawMessage(this);
    #else
            uint tag;
            while ((tag = input.ReadTag()) != 0)
            {
                switch (tag)
                {
                default:
                    _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input);
                    break;

                case 10: {
                    labels_.AddEntriesFrom(input, _map_labels_codec);
                    break;
                }

                case 18: {
                    if (startTime_ == null)
                    {
                        StartTime = new global::Google.Protobuf.WellKnownTypes.Timestamp();
                    }
                    input.ReadMessage(StartTime);
                    break;
                }

                case 26: {
                    if (endTime_ == null)
                    {
                        EndTime = new global::Google.Protobuf.WellKnownTypes.Timestamp();
                    }
                    input.ReadMessage(EndTime);
                    break;
                }

                case 32: {
                    BoolValue = input.ReadBool();
                    break;
                }

                case 40: {
                    Int64Value = input.ReadInt64();
                    break;
                }

                case 49: {
                    DoubleValue = input.ReadDouble();
                    break;
                }

                case 58: {
                    StringValue = input.ReadString();
                    break;
                }

                case 66: {
                    global::Google.Cloud.ServiceControl.V1.Distribution subBuilder = new global::Google.Cloud.ServiceControl.V1.Distribution();
                    if (valueCase_ == ValueOneofCase.DistributionValue)
                    {
                        subBuilder.MergeFrom(DistributionValue);
                    }
                    input.ReadMessage(subBuilder);
                    DistributionValue = subBuilder;
                    break;
                }
                }
            }
    #endif
        }