/*
 * Copyright 2022 Google LLC
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

// Generated by the protocol buffer compiler.  DO NOT EDIT!
// source: google/firestore/v1/document.proto

#include "google/firestore/v1/document.pb.h"

#include <algorithm>

#include <google/protobuf/io/coded_stream.h>
#include <google/protobuf/extension_set.h>
#include <google/protobuf/wire_format_lite.h>
#include <google/protobuf/descriptor.h>
#include <google/protobuf/generated_message_reflection.h>
#include <google/protobuf/reflection_ops.h>
#include <google/protobuf/wire_format.h>
// @@protoc_insertion_point(includes)
#include <google/protobuf/port_def.inc>
extern PROTOBUF_INTERNAL_EXPORT_google_2ffirestore_2fv1_2fdocument_2eproto ::PROTOBUF_NAMESPACE_ID::internal::SCCInfo<2> scc_info_ArrayValue_google_2ffirestore_2fv1_2fdocument_2eproto;
extern PROTOBUF_INTERNAL_EXPORT_google_2ffirestore_2fv1_2fdocument_2eproto ::PROTOBUF_NAMESPACE_ID::internal::SCCInfo<1> scc_info_Document_FieldsEntry_DoNotUse_google_2ffirestore_2fv1_2fdocument_2eproto;
extern PROTOBUF_INTERNAL_EXPORT_google_2fprotobuf_2ftimestamp_2eproto ::PROTOBUF_NAMESPACE_ID::internal::SCCInfo<0> scc_info_Timestamp_google_2fprotobuf_2ftimestamp_2eproto;
extern PROTOBUF_INTERNAL_EXPORT_google_2ftype_2flatlng_2eproto ::PROTOBUF_NAMESPACE_ID::internal::SCCInfo<0> scc_info_LatLng_google_2ftype_2flatlng_2eproto;
namespace google {
namespace firestore {
namespace v1 {
class Document_FieldsEntry_DoNotUseDefaultTypeInternal {
 public:
  ::PROTOBUF_NAMESPACE_ID::internal::ExplicitlyConstructed<Document_FieldsEntry_DoNotUse> _instance;
} _Document_FieldsEntry_DoNotUse_default_instance_;
class DocumentDefaultTypeInternal {
 public:
  ::PROTOBUF_NAMESPACE_ID::internal::ExplicitlyConstructed<Document> _instance;
} _Document_default_instance_;
class ValueDefaultTypeInternal {
 public:
  ::PROTOBUF_NAMESPACE_ID::internal::ExplicitlyConstructed<Value> _instance;
  int null_value_;
  bool boolean_value_;
  ::PROTOBUF_NAMESPACE_ID::int64 integer_value_;
  double double_value_;
  const PROTOBUF_NAMESPACE_ID::Timestamp* timestamp_value_;
  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr string_value_;
  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr bytes_value_;
  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr reference_value_;
  const ::google::type::LatLng* geo_point_value_;
  const ::google::firestore::v1::ArrayValue* array_value_;
  const ::google::firestore::v1::MapValue* map_value_;
} _Value_default_instance_;
class ArrayValueDefaultTypeInternal {
 public:
  ::PROTOBUF_NAMESPACE_ID::internal::ExplicitlyConstructed<ArrayValue> _instance;
} _ArrayValue_default_instance_;
class MapValue_FieldsEntry_DoNotUseDefaultTypeInternal {
 public:
  ::PROTOBUF_NAMESPACE_ID::internal::ExplicitlyConstructed<MapValue_FieldsEntry_DoNotUse> _instance;
} _MapValue_FieldsEntry_DoNotUse_default_instance_;
class MapValueDefaultTypeInternal {
 public:
  ::PROTOBUF_NAMESPACE_ID::internal::ExplicitlyConstructed<MapValue> _instance;
} _MapValue_default_instance_;
}  // namespace v1
}  // namespace firestore
}  // namespace google
static void InitDefaultsscc_info_ArrayValue_google_2ffirestore_2fv1_2fdocument_2eproto() {
  GOOGLE_PROTOBUF_VERIFY_VERSION;

  {
    void* ptr = &::google::firestore::v1::_Value_default_instance_;
    new (ptr) ::google::firestore::v1::Value();
    ::PROTOBUF_NAMESPACE_ID::internal::OnShutdownDestroyMessage(ptr);
  }
  {
    void* ptr = &::google::firestore::v1::_ArrayValue_default_instance_;
    new (ptr) ::google::firestore::v1::ArrayValue();
    ::PROTOBUF_NAMESPACE_ID::internal::OnShutdownDestroyMessage(ptr);
  }
  {
    void* ptr = &::google::firestore::v1::_MapValue_FieldsEntry_DoNotUse_default_instance_;
    new (ptr) ::google::firestore::v1::MapValue_FieldsEntry_DoNotUse();
  }
  {
    void* ptr = &::google::firestore::v1::_MapValue_default_instance_;
    new (ptr) ::google::firestore::v1::MapValue();
    ::PROTOBUF_NAMESPACE_ID::internal::OnShutdownDestroyMessage(ptr);
  }
  ::google::firestore::v1::Value::InitAsDefaultInstance();
  ::google::firestore::v1::ArrayValue::InitAsDefaultInstance();
  ::google::firestore::v1::MapValue_FieldsEntry_DoNotUse::InitAsDefaultInstance();
  ::google::firestore::v1::MapValue::InitAsDefaultInstance();
}

::PROTOBUF_NAMESPACE_ID::internal::SCCInfo<2> scc_info_ArrayValue_google_2ffirestore_2fv1_2fdocument_2eproto =
    {{ATOMIC_VAR_INIT(::PROTOBUF_NAMESPACE_ID::internal::SCCInfoBase::kUninitialized), 2, 0, InitDefaultsscc_info_ArrayValue_google_2ffirestore_2fv1_2fdocument_2eproto}, {
      &scc_info_Timestamp_google_2fprotobuf_2ftimestamp_2eproto.base,
      &scc_info_LatLng_google_2ftype_2flatlng_2eproto.base,}};

static void InitDefaultsscc_info_Document_google_2ffirestore_2fv1_2fdocument_2eproto() {
  GOOGLE_PROTOBUF_VERIFY_VERSION;

  {
    void* ptr = &::google::firestore::v1::_Document_default_instance_;
    new (ptr) ::google::firestore::v1::Document();
    ::PROTOBUF_NAMESPACE_ID::internal::OnShutdownDestroyMessage(ptr);
  }
  ::google::firestore::v1::Document::InitAsDefaultInstance();
}

::PROTOBUF_NAMESPACE_ID::internal::SCCInfo<2> scc_info_Document_google_2ffirestore_2fv1_2fdocument_2eproto =
    {{ATOMIC_VAR_INIT(::PROTOBUF_NAMESPACE_ID::internal::SCCInfoBase::kUninitialized), 2, 0, InitDefaultsscc_info_Document_google_2ffirestore_2fv1_2fdocument_2eproto}, {
      &scc_info_Document_FieldsEntry_DoNotUse_google_2ffirestore_2fv1_2fdocument_2eproto.base,
      &scc_info_Timestamp_google_2fprotobuf_2ftimestamp_2eproto.base,}};

static void InitDefaultsscc_info_Document_FieldsEntry_DoNotUse_google_2ffirestore_2fv1_2fdocument_2eproto() {
  GOOGLE_PROTOBUF_VERIFY_VERSION;

  {
    void* ptr = &::google::firestore::v1::_Document_FieldsEntry_DoNotUse_default_instance_;
    new (ptr) ::google::firestore::v1::Document_FieldsEntry_DoNotUse();
  }
  ::google::firestore::v1::Document_FieldsEntry_DoNotUse::InitAsDefaultInstance();
}

::PROTOBUF_NAMESPACE_ID::internal::SCCInfo<1> scc_info_Document_FieldsEntry_DoNotUse_google_2ffirestore_2fv1_2fdocument_2eproto =
    {{ATOMIC_VAR_INIT(::PROTOBUF_NAMESPACE_ID::internal::SCCInfoBase::kUninitialized), 1, 0, InitDefaultsscc_info_Document_FieldsEntry_DoNotUse_google_2ffirestore_2fv1_2fdocument_2eproto}, {
      &scc_info_ArrayValue_google_2ffirestore_2fv1_2fdocument_2eproto.base,}};

static ::PROTOBUF_NAMESPACE_ID::Metadata file_level_metadata_google_2ffirestore_2fv1_2fdocument_2eproto[6];
static constexpr ::PROTOBUF_NAMESPACE_ID::EnumDescriptor const** file_level_enum_descriptors_google_2ffirestore_2fv1_2fdocument_2eproto = nullptr;
static constexpr ::PROTOBUF_NAMESPACE_ID::ServiceDescriptor const** file_level_service_descriptors_google_2ffirestore_2fv1_2fdocument_2eproto = nullptr;

const ::PROTOBUF_NAMESPACE_ID::uint32 TableStruct_google_2ffirestore_2fv1_2fdocument_2eproto::offsets[] PROTOBUF_SECTION_VARIABLE(protodesc_cold) = {
  PROTOBUF_FIELD_OFFSET(::google::firestore::v1::Document_FieldsEntry_DoNotUse, _has_bits_),
  PROTOBUF_FIELD_OFFSET(::google::firestore::v1::Document_FieldsEntry_DoNotUse, _internal_metadata_),
  ~0u,  // no _extensions_
  ~0u,  // no _oneof_case_
  ~0u,  // no _weak_field_map_
  PROTOBUF_FIELD_OFFSET(::google::firestore::v1::Document_FieldsEntry_DoNotUse, key_),
  PROTOBUF_FIELD_OFFSET(::google::firestore::v1::Document_FieldsEntry_DoNotUse, value_),
  0,
  1,
  ~0u,  // no _has_bits_
  PROTOBUF_FIELD_OFFSET(::google::firestore::v1::Document, _internal_metadata_),
  ~0u,  // no _extensions_
  ~0u,  // no _oneof_case_
  ~0u,  // no _weak_field_map_
  PROTOBUF_FIELD_OFFSET(::google::firestore::v1::Document, name_),
  PROTOBUF_FIELD_OFFSET(::google::firestore::v1::Document, fields_),
  PROTOBUF_FIELD_OFFSET(::google::firestore::v1::Document, create_time_),
  PROTOBUF_FIELD_OFFSET(::google::firestore::v1::Document, update_time_),
  ~0u,  // no _has_bits_
  PROTOBUF_FIELD_OFFSET(::google::firestore::v1::Value, _internal_metadata_),
  ~0u,  // no _extensions_
  PROTOBUF_FIELD_OFFSET(::google::firestore::v1::Value, _oneof_case_[0]),
  ~0u,  // no _weak_field_map_
  offsetof(::google::firestore::v1::ValueDefaultTypeInternal, null_value_),
  offsetof(::google::firestore::v1::ValueDefaultTypeInternal, boolean_value_),
  offsetof(::google::firestore::v1::ValueDefaultTypeInternal, integer_value_),
  offsetof(::google::firestore::v1::ValueDefaultTypeInternal, double_value_),
  offsetof(::google::firestore::v1::ValueDefaultTypeInternal, timestamp_value_),
  offsetof(::google::firestore::v1::ValueDefaultTypeInternal, string_value_),
  offsetof(::google::firestore::v1::ValueDefaultTypeInternal, bytes_value_),
  offsetof(::google::firestore::v1::ValueDefaultTypeInternal, reference_value_),
  offsetof(::google::firestore::v1::ValueDefaultTypeInternal, geo_point_value_),
  offsetof(::google::firestore::v1::ValueDefaultTypeInternal, array_value_),
  offsetof(::google::firestore::v1::ValueDefaultTypeInternal, map_value_),
  PROTOBUF_FIELD_OFFSET(::google::firestore::v1::Value, value_type_),
  ~0u,  // no _has_bits_
  PROTOBUF_FIELD_OFFSET(::google::firestore::v1::ArrayValue, _internal_metadata_),
  ~0u,  // no _extensions_
  ~0u,  // no _oneof_case_
  ~0u,  // no _weak_field_map_
  PROTOBUF_FIELD_OFFSET(::google::firestore::v1::ArrayValue, values_),
  PROTOBUF_FIELD_OFFSET(::google::firestore::v1::MapValue_FieldsEntry_DoNotUse, _has_bits_),
  PROTOBUF_FIELD_OFFSET(::google::firestore::v1::MapValue_FieldsEntry_DoNotUse, _internal_metadata_),
  ~0u,  // no _extensions_
  ~0u,  // no _oneof_case_
  ~0u,  // no _weak_field_map_
  PROTOBUF_FIELD_OFFSET(::google::firestore::v1::MapValue_FieldsEntry_DoNotUse, key_),
  PROTOBUF_FIELD_OFFSET(::google::firestore::v1::MapValue_FieldsEntry_DoNotUse, value_),
  0,
  1,
  ~0u,  // no _has_bits_
  PROTOBUF_FIELD_OFFSET(::google::firestore::v1::MapValue, _internal_metadata_),
  ~0u,  // no _extensions_
  ~0u,  // no _oneof_case_
  ~0u,  // no _weak_field_map_
  PROTOBUF_FIELD_OFFSET(::google::firestore::v1::MapValue, fields_),
};
static const ::PROTOBUF_NAMESPACE_ID::internal::MigrationSchema schemas[] PROTOBUF_SECTION_VARIABLE(protodesc_cold) = {
  { 0, 7, sizeof(::google::firestore::v1::Document_FieldsEntry_DoNotUse)},
  { 9, -1, sizeof(::google::firestore::v1::Document)},
  { 18, -1, sizeof(::google::firestore::v1::Value)},
  { 35, -1, sizeof(::google::firestore::v1::ArrayValue)},
  { 41, 48, sizeof(::google::firestore::v1::MapValue_FieldsEntry_DoNotUse)},
  { 50, -1, sizeof(::google::firestore::v1::MapValue)},
};

static ::PROTOBUF_NAMESPACE_ID::Message const * const file_default_instances[] = {
  reinterpret_cast<const ::PROTOBUF_NAMESPACE_ID::Message*>(&::google::firestore::v1::_Document_FieldsEntry_DoNotUse_default_instance_),
  reinterpret_cast<const ::PROTOBUF_NAMESPACE_ID::Message*>(&::google::firestore::v1::_Document_default_instance_),
  reinterpret_cast<const ::PROTOBUF_NAMESPACE_ID::Message*>(&::google::firestore::v1::_Value_default_instance_),
  reinterpret_cast<const ::PROTOBUF_NAMESPACE_ID::Message*>(&::google::firestore::v1::_ArrayValue_default_instance_),
  reinterpret_cast<const ::PROTOBUF_NAMESPACE_ID::Message*>(&::google::firestore::v1::_MapValue_FieldsEntry_DoNotUse_default_instance_),
  reinterpret_cast<const ::PROTOBUF_NAMESPACE_ID::Message*>(&::google::firestore::v1::_MapValue_default_instance_),
};

const char descriptor_table_protodef_google_2ffirestore_2fv1_2fdocument_2eproto[] PROTOBUF_SECTION_VARIABLE(protodesc_cold) =
  "\n\"google/firestore/v1/document.proto\022\023go"
  "ogle.firestore.v1\032\034google/protobuf/struc"
  "t.proto\032\037google/protobuf/timestamp.proto"
  "\032\030google/type/latlng.proto\"\200\002\n\010Document\022"
  "\014\n\004name\030\001 \001(\t\0229\n\006fields\030\002 \003(\0132).google.f"
  "irestore.v1.Document.FieldsEntry\022/\n\013crea"
  "te_time\030\003 \001(\0132\032.google.protobuf.Timestam"
  "p\022/\n\013update_time\030\004 \001(\0132\032.google.protobuf"
  ".Timestamp\032I\n\013FieldsEntry\022\013\n\003key\030\001 \001(\t\022)"
  "\n\005value\030\002 \001(\0132\032.google.firestore.v1.Valu"
  "e:\0028\001\"\256\003\n\005Value\0220\n\nnull_value\030\013 \001(\0162\032.go"
  "ogle.protobuf.NullValueH\000\022\027\n\rboolean_val"
  "ue\030\001 \001(\010H\000\022\027\n\rinteger_value\030\002 \001(\003H\000\022\026\n\014d"
  "ouble_value\030\003 \001(\001H\000\0225\n\017timestamp_value\030\n"
  " \001(\0132\032.google.protobuf.TimestampH\000\022\026\n\014st"
  "ring_value\030\021 \001(\tH\000\022\025\n\013bytes_value\030\022 \001(\014H"
  "\000\022\031\n\017reference_value\030\005 \001(\tH\000\022.\n\017geo_poin"
  "t_value\030\010 \001(\0132\023.google.type.LatLngH\000\0226\n\013"
  "array_value\030\t \001(\0132\037.google.firestore.v1."
  "ArrayValueH\000\0222\n\tmap_value\030\006 \001(\0132\035.google"
  ".firestore.v1.MapValueH\000B\014\n\nvalue_type\"8"
  "\n\nArrayValue\022*\n\006values\030\001 \003(\0132\032.google.fi"
  "restore.v1.Value\"\220\001\n\010MapValue\0229\n\006fields\030"
  "\001 \003(\0132).google.firestore.v1.MapValue.Fie"
  "ldsEntry\032I\n\013FieldsEntry\022\013\n\003key\030\001 \001(\t\022)\n\005"
  "value\030\002 \001(\0132\032.google.firestore.v1.Value:"
  "\0028\001B\261\001\n\027com.google.firestore.v1B\rDocumen"
  "tProtoP\001Z<google.golang.org/genproto/goo"
  "gleapis/firestore/v1;firestore\242\002\004GCFS\252\002\036"
  "Google.Cloud.Firestore.V1Beta1\312\002\036Google\\"
  "Cloud\\Firestore\\V1beta1b\006proto3"
  ;
static const ::PROTOBUF_NAMESPACE_ID::internal::DescriptorTable*const descriptor_table_google_2ffirestore_2fv1_2fdocument_2eproto_deps[3] = {
  &::descriptor_table_google_2fprotobuf_2fstruct_2eproto,
  &::descriptor_table_google_2fprotobuf_2ftimestamp_2eproto,
  &::descriptor_table_google_2ftype_2flatlng_2eproto,
};
static ::PROTOBUF_NAMESPACE_ID::internal::SCCInfoBase*const descriptor_table_google_2ffirestore_2fv1_2fdocument_2eproto_sccs[3] = {
  &scc_info_ArrayValue_google_2ffirestore_2fv1_2fdocument_2eproto.base,
  &scc_info_Document_google_2ffirestore_2fv1_2fdocument_2eproto.base,
  &scc_info_Document_FieldsEntry_DoNotUse_google_2ffirestore_2fv1_2fdocument_2eproto.base,
};
static ::PROTOBUF_NAMESPACE_ID::internal::once_flag descriptor_table_google_2ffirestore_2fv1_2fdocument_2eproto_once;
static bool descriptor_table_google_2ffirestore_2fv1_2fdocument_2eproto_initialized = false;
const ::PROTOBUF_NAMESPACE_ID::internal::DescriptorTable descriptor_table_google_2ffirestore_2fv1_2fdocument_2eproto = {
  &descriptor_table_google_2ffirestore_2fv1_2fdocument_2eproto_initialized, descriptor_table_protodef_google_2ffirestore_2fv1_2fdocument_2eproto, "google/firestore/v1/document.proto", 1231,
  &descriptor_table_google_2ffirestore_2fv1_2fdocument_2eproto_once, descriptor_table_google_2ffirestore_2fv1_2fdocument_2eproto_sccs, descriptor_table_google_2ffirestore_2fv1_2fdocument_2eproto_deps, 3, 3,
  schemas, file_default_instances, TableStruct_google_2ffirestore_2fv1_2fdocument_2eproto::offsets,
  file_level_metadata_google_2ffirestore_2fv1_2fdocument_2eproto, 6, file_level_enum_descriptors_google_2ffirestore_2fv1_2fdocument_2eproto, file_level_service_descriptors_google_2ffirestore_2fv1_2fdocument_2eproto,
};

// Force running AddDescriptors() at dynamic initialization time.
static bool dynamic_init_dummy_google_2ffirestore_2fv1_2fdocument_2eproto = (  ::PROTOBUF_NAMESPACE_ID::internal::AddDescriptors(&descriptor_table_google_2ffirestore_2fv1_2fdocument_2eproto), true);
namespace google {
namespace firestore {
namespace v1 {

// ===================================================================

Document_FieldsEntry_DoNotUse::Document_FieldsEntry_DoNotUse() {}
Document_FieldsEntry_DoNotUse::Document_FieldsEntry_DoNotUse(::PROTOBUF_NAMESPACE_ID::Arena* arena)
    : SuperType(arena) {}
void Document_FieldsEntry_DoNotUse::MergeFrom(const Document_FieldsEntry_DoNotUse& other) {
  MergeFromInternal(other);
}
::PROTOBUF_NAMESPACE_ID::Metadata Document_FieldsEntry_DoNotUse::GetMetadata() const {
  return GetMetadataStatic();
}
void Document_FieldsEntry_DoNotUse::MergeFrom(
    const ::PROTOBUF_NAMESPACE_ID::Message& other) {
  ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom(other);
}


// ===================================================================

void Document::InitAsDefaultInstance() {
  ::google::firestore::v1::_Document_default_instance_._instance.get_mutable()->create_time_ = const_cast< PROTOBUF_NAMESPACE_ID::Timestamp*>(
      PROTOBUF_NAMESPACE_ID::Timestamp::internal_default_instance());
  ::google::firestore::v1::_Document_default_instance_._instance.get_mutable()->update_time_ = const_cast< PROTOBUF_NAMESPACE_ID::Timestamp*>(
      PROTOBUF_NAMESPACE_ID::Timestamp::internal_default_instance());
}
class Document::_Internal {
 public:
  static const PROTOBUF_NAMESPACE_ID::Timestamp& create_time(const Document* msg);
  static const PROTOBUF_NAMESPACE_ID::Timestamp& update_time(const Document* msg);
};

const PROTOBUF_NAMESPACE_ID::Timestamp&
Document::_Internal::create_time(const Document* msg) {
  return *msg->create_time_;
}
const PROTOBUF_NAMESPACE_ID::Timestamp&
Document::_Internal::update_time(const Document* msg) {
  return *msg->update_time_;
}
void Document::clear_create_time() {
  if (GetArenaNoVirtual() == nullptr && create_time_ != nullptr) {
    delete create_time_;
  }
  create_time_ = nullptr;
}
void Document::clear_update_time() {
  if (GetArenaNoVirtual() == nullptr && update_time_ != nullptr) {
    delete update_time_;
  }
  update_time_ = nullptr;
}
Document::Document()
  : ::PROTOBUF_NAMESPACE_ID::Message(), _internal_metadata_(nullptr) {
  SharedCtor();
  // @@protoc_insertion_point(constructor:google.firestore.v1.Document)
}
Document::Document(const Document& from)
  : ::PROTOBUF_NAMESPACE_ID::Message(),
      _internal_metadata_(nullptr) {
  _internal_metadata_.MergeFrom(from._internal_metadata_);
  fields_.MergeFrom(from.fields_);
  name_.UnsafeSetDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
  if (!from._internal_name().empty()) {
    name_.AssignWithDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), from.name_);
  }
  if (from._internal_has_create_time()) {
    create_time_ = new PROTOBUF_NAMESPACE_ID::Timestamp(*from.create_time_);
  } else {
    create_time_ = nullptr;
  }
  if (from._internal_has_update_time()) {
    update_time_ = new PROTOBUF_NAMESPACE_ID::Timestamp(*from.update_time_);
  } else {
    update_time_ = nullptr;
  }
  // @@protoc_insertion_point(copy_constructor:google.firestore.v1.Document)
}

void Document::SharedCtor() {
  ::PROTOBUF_NAMESPACE_ID::internal::InitSCC(&scc_info_Document_google_2ffirestore_2fv1_2fdocument_2eproto.base);
  name_.UnsafeSetDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
  ::memset(&create_time_, 0, static_cast<size_t>(
      reinterpret_cast<char*>(&update_time_) -
      reinterpret_cast<char*>(&create_time_)) + sizeof(update_time_));
}

Document::~Document() {
  // @@protoc_insertion_point(destructor:google.firestore.v1.Document)
  SharedDtor();
}

void Document::SharedDtor() {
  name_.DestroyNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
  if (this != internal_default_instance()) delete create_time_;
  if (this != internal_default_instance()) delete update_time_;
}

void Document::SetCachedSize(int size) const {
  _cached_size_.Set(size);
}
const Document& Document::default_instance() {
  ::PROTOBUF_NAMESPACE_ID::internal::InitSCC(&::scc_info_Document_google_2ffirestore_2fv1_2fdocument_2eproto.base);
  return *internal_default_instance();
}


void Document::Clear() {
// @@protoc_insertion_point(message_clear_start:google.firestore.v1.Document)
  ::PROTOBUF_NAMESPACE_ID::uint32 cached_has_bits = 0;
  // Prevent compiler warnings about cached_has_bits being unused
  (void) cached_has_bits;

  fields_.Clear();
  name_.ClearToEmptyNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
  if (GetArenaNoVirtual() == nullptr && create_time_ != nullptr) {
    delete create_time_;
  }
  create_time_ = nullptr;
  if (GetArenaNoVirtual() == nullptr && update_time_ != nullptr) {
    delete update_time_;
  }
  update_time_ = nullptr;
  _internal_metadata_.Clear();
}

const char* Document::_InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) {
#define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure
  while (!ctx->Done(&ptr)) {
    ::PROTOBUF_NAMESPACE_ID::uint32 tag;
    ptr = ::PROTOBUF_NAMESPACE_ID::internal::ReadTag(ptr, &tag);
    CHK_(ptr);
    switch (tag >> 3) {
      // string name = 1;
      case 1:
        if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 10)) {
          auto str = _internal_mutable_name();
          ptr = ::PROTOBUF_NAMESPACE_ID::internal::InlineGreedyStringParser(str, ptr, ctx);
          CHK_(::PROTOBUF_NAMESPACE_ID::internal::VerifyUTF8(str, "google.firestore.v1.Document.name"));
          CHK_(ptr);
        } else goto handle_unusual;
        continue;
      // map<string, .google.firestore.v1.Value> fields = 2;
      case 2:
        if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 18)) {
          ptr -= 1;
          do {
            ptr += 1;
            ptr = ctx->ParseMessage(&fields_, ptr);
            CHK_(ptr);
            if (!ctx->DataAvailable(ptr)) break;
          } while (::PROTOBUF_NAMESPACE_ID::internal::ExpectTag<18>(ptr));
        } else goto handle_unusual;
        continue;
      // .google.protobuf.Timestamp create_time = 3;
      case 3:
        if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 26)) {
          ptr = ctx->ParseMessage(_internal_mutable_create_time(), ptr);
          CHK_(ptr);
        } else goto handle_unusual;
        continue;
      // .google.protobuf.Timestamp update_time = 4;
      case 4:
        if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 34)) {
          ptr = ctx->ParseMessage(_internal_mutable_update_time(), ptr);
          CHK_(ptr);
        } else goto handle_unusual;
        continue;
      default: {
      handle_unusual:
        if ((tag & 7) == 4 || tag == 0) {
          ctx->SetLastTag(tag);
          goto success;
        }
        ptr = UnknownFieldParse(tag, &_internal_metadata_, ptr, ctx);
        CHK_(ptr != nullptr);
        continue;
      }
    }  // switch
  }  // while
success:
  return ptr;
failure:
  ptr = nullptr;
  goto success;
#undef CHK_
}

::PROTOBUF_NAMESPACE_ID::uint8* Document::_InternalSerialize(
    ::PROTOBUF_NAMESPACE_ID::uint8* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const {
  // @@protoc_insertion_point(serialize_to_array_start:google.firestore.v1.Document)
  ::PROTOBUF_NAMESPACE_ID::uint32 cached_has_bits = 0;
  (void) cached_has_bits;

  // string name = 1;
  if (this->name().size() > 0) {
    ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::VerifyUtf8String(
      this->_internal_name().data(), static_cast<int>(this->_internal_name().length()),
      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::SERIALIZE,
      "google.firestore.v1.Document.name");
    target = stream->WriteStringMaybeAliased(
        1, this->_internal_name(), target);
  }

  // map<string, .google.firestore.v1.Value> fields = 2;
  if (!this->_internal_fields().empty()) {
    typedef ::PROTOBUF_NAMESPACE_ID::Map< std::string, ::google::firestore::v1::Value >::const_pointer
        ConstPtr;
    typedef ConstPtr SortItem;
    typedef ::PROTOBUF_NAMESPACE_ID::internal::CompareByDerefFirst<SortItem> Less;
    struct Utf8Check {
      static void Check(ConstPtr p) {
        ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::VerifyUtf8String(
          p->first.data(), static_cast<int>(p->first.length()),
          ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::SERIALIZE,
          "google.firestore.v1.Document.FieldsEntry.key");
      }
    };

    if (stream->IsSerializationDeterministic() &&
        this->_internal_fields().size() > 1) {
      ::std::unique_ptr<SortItem[]> items(
          new SortItem[this->_internal_fields().size()]);
      typedef ::PROTOBUF_NAMESPACE_ID::Map< std::string, ::google::firestore::v1::Value >::size_type size_type;
      size_type n = 0;
      for (::PROTOBUF_NAMESPACE_ID::Map< std::string, ::google::firestore::v1::Value >::const_iterator
          it = this->_internal_fields().begin();
          it != this->_internal_fields().end(); ++it, ++n) {
        items[static_cast<ptrdiff_t>(n)] = SortItem(&*it);
      }
      ::std::sort(&items[0], &items[static_cast<ptrdiff_t>(n)], Less());
      for (size_type i = 0; i < n; i++) {
        target = Document_FieldsEntry_DoNotUse::Funcs::InternalSerialize(2, items[static_cast<ptrdiff_t>(i)]->first, items[static_cast<ptrdiff_t>(i)]->second, target, stream);
        Utf8Check::Check(&(*items[static_cast<ptrdiff_t>(i)]));
      }
    } else {
      for (::PROTOBUF_NAMESPACE_ID::Map< std::string, ::google::firestore::v1::Value >::const_iterator
          it = this->_internal_fields().begin();
          it != this->_internal_fields().end(); ++it) {
        target = Document_FieldsEntry_DoNotUse::Funcs::InternalSerialize(2, it->first, it->second, target, stream);
        Utf8Check::Check(&(*it));
      }
    }
  }

  // .google.protobuf.Timestamp create_time = 3;
  if (this->has_create_time()) {
    target = stream->EnsureSpace(target);
    target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::
      InternalWriteMessage(
        3, _Internal::create_time(this), target, stream);
  }

  // .google.protobuf.Timestamp update_time = 4;
  if (this->has_update_time()) {
    target = stream->EnsureSpace(target);
    target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::
      InternalWriteMessage(
        4, _Internal::update_time(this), target, stream);
  }

  if (PROTOBUF_PREDICT_FALSE(_internal_metadata_.have_unknown_fields())) {
    target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormat::InternalSerializeUnknownFieldsToArray(
        _internal_metadata_.unknown_fields(), target, stream);
  }
  // @@protoc_insertion_point(serialize_to_array_end:google.firestore.v1.Document)
  return target;
}

size_t Document::ByteSizeLong() const {
// @@protoc_insertion_point(message_byte_size_start:google.firestore.v1.Document)
  size_t total_size = 0;

  ::PROTOBUF_NAMESPACE_ID::uint32 cached_has_bits = 0;
  // Prevent compiler warnings about cached_has_bits being unused
  (void) cached_has_bits;

  // map<string, .google.firestore.v1.Value> fields = 2;
  total_size += 1 *
      ::PROTOBUF_NAMESPACE_ID::internal::FromIntSize(this->_internal_fields_size());
  for (::PROTOBUF_NAMESPACE_ID::Map< std::string, ::google::firestore::v1::Value >::const_iterator
      it = this->_internal_fields().begin();
      it != this->_internal_fields().end(); ++it) {
    total_size += Document_FieldsEntry_DoNotUse::Funcs::ByteSizeLong(it->first, it->second);
  }

  // string name = 1;
  if (this->name().size() > 0) {
    total_size += 1 +
      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::StringSize(
        this->_internal_name());
  }

  // .google.protobuf.Timestamp create_time = 3;
  if (this->has_create_time()) {
    total_size += 1 +
      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::MessageSize(
        *create_time_);
  }

  // .google.protobuf.Timestamp update_time = 4;
  if (this->has_update_time()) {
    total_size += 1 +
      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::MessageSize(
        *update_time_);
  }

  if (PROTOBUF_PREDICT_FALSE(_internal_metadata_.have_unknown_fields())) {
    return ::PROTOBUF_NAMESPACE_ID::internal::ComputeUnknownFieldsSize(
        _internal_metadata_, total_size, &_cached_size_);
  }
  int cached_size = ::PROTOBUF_NAMESPACE_ID::internal::ToCachedSize(total_size);
  SetCachedSize(cached_size);
  return total_size;
}

void Document::MergeFrom(const ::PROTOBUF_NAMESPACE_ID::Message& from) {
// @@protoc_insertion_point(generalized_merge_from_start:google.firestore.v1.Document)
  GOOGLE_DCHECK_NE(&from, this);
  const Document* source =
      ::PROTOBUF_NAMESPACE_ID::DynamicCastToGenerated<Document>(
          &from);
  if (source == nullptr) {
  // @@protoc_insertion_point(generalized_merge_from_cast_fail:google.firestore.v1.Document)
    ::PROTOBUF_NAMESPACE_ID::internal::ReflectionOps::Merge(from, this);
  } else {
  // @@protoc_insertion_point(generalized_merge_from_cast_success:google.firestore.v1.Document)
    MergeFrom(*source);
  }
}

void Document::MergeFrom(const Document& from) {
// @@protoc_insertion_point(class_specific_merge_from_start:google.firestore.v1.Document)
  GOOGLE_DCHECK_NE(&from, this);
  _internal_metadata_.MergeFrom(from._internal_metadata_);
  ::PROTOBUF_NAMESPACE_ID::uint32 cached_has_bits = 0;
  (void) cached_has_bits;

  fields_.MergeFrom(from.fields_);
  if (from.name().size() > 0) {

    name_.AssignWithDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), from.name_);
  }
  if (from.has_create_time()) {
    _internal_mutable_create_time()->PROTOBUF_NAMESPACE_ID::Timestamp::MergeFrom(from._internal_create_time());
  }
  if (from.has_update_time()) {
    _internal_mutable_update_time()->PROTOBUF_NAMESPACE_ID::Timestamp::MergeFrom(from._internal_update_time());
  }
}

void Document::CopyFrom(const ::PROTOBUF_NAMESPACE_ID::Message& from) {
// @@protoc_insertion_point(generalized_copy_from_start:google.firestore.v1.Document)
  if (&from == this) return;
  Clear();
  MergeFrom(from);
}

void Document::CopyFrom(const Document& from) {
// @@protoc_insertion_point(class_specific_copy_from_start:google.firestore.v1.Document)
  if (&from == this) return;
  Clear();
  MergeFrom(from);
}

bool Document::IsInitialized() const {
  return true;
}

void Document::InternalSwap(Document* other) {
  using std::swap;
  _internal_metadata_.Swap(&other->_internal_metadata_);
  fields_.Swap(&other->fields_);
  name_.Swap(&other->name_, &::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(),
    GetArenaNoVirtual());
  swap(create_time_, other->create_time_);
  swap(update_time_, other->update_time_);
}

::PROTOBUF_NAMESPACE_ID::Metadata Document::GetMetadata() const {
  return GetMetadataStatic();
}


// ===================================================================

void Value::InitAsDefaultInstance() {
  ::google::firestore::v1::_Value_default_instance_.null_value_ = 0;
  ::google::firestore::v1::_Value_default_instance_.boolean_value_ = false;
  ::google::firestore::v1::_Value_default_instance_.integer_value_ = PROTOBUF_LONGLONG(0);
  ::google::firestore::v1::_Value_default_instance_.double_value_ = 0;
  ::google::firestore::v1::_Value_default_instance_.timestamp_value_ = const_cast< PROTOBUF_NAMESPACE_ID::Timestamp*>(
      PROTOBUF_NAMESPACE_ID::Timestamp::internal_default_instance());
  ::google::firestore::v1::_Value_default_instance_.string_value_.UnsafeSetDefault(
      &::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
  ::google::firestore::v1::_Value_default_instance_.bytes_value_.UnsafeSetDefault(
      &::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
  ::google::firestore::v1::_Value_default_instance_.reference_value_.UnsafeSetDefault(
      &::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
  ::google::firestore::v1::_Value_default_instance_.geo_point_value_ = const_cast< ::google::type::LatLng*>(
      ::google::type::LatLng::internal_default_instance());
  ::google::firestore::v1::_Value_default_instance_.array_value_ = const_cast< ::google::firestore::v1::ArrayValue*>(
      ::google::firestore::v1::ArrayValue::internal_default_instance());
  ::google::firestore::v1::_Value_default_instance_.map_value_ = const_cast< ::google::firestore::v1::MapValue*>(
      ::google::firestore::v1::MapValue::internal_default_instance());
}
class Value::_Internal {
 public:
  static const PROTOBUF_NAMESPACE_ID::Timestamp& timestamp_value(const Value* msg);
  static const ::google::type::LatLng& geo_point_value(const Value* msg);
  static const ::google::firestore::v1::ArrayValue& array_value(const Value* msg);
  static const ::google::firestore::v1::MapValue& map_value(const Value* msg);
};

const PROTOBUF_NAMESPACE_ID::Timestamp&
Value::_Internal::timestamp_value(const Value* msg) {
  return *msg->value_type_.timestamp_value_;
}
const ::google::type::LatLng&
Value::_Internal::geo_point_value(const Value* msg) {
  return *msg->value_type_.geo_point_value_;
}
const ::google::firestore::v1::ArrayValue&
Value::_Internal::array_value(const Value* msg) {
  return *msg->value_type_.array_value_;
}
const ::google::firestore::v1::MapValue&
Value::_Internal::map_value(const Value* msg) {
  return *msg->value_type_.map_value_;
}
void Value::set_allocated_timestamp_value(PROTOBUF_NAMESPACE_ID::Timestamp* timestamp_value) {
  ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaNoVirtual();
  clear_value_type();
  if (timestamp_value) {
    ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena =
      reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(timestamp_value)->GetArena();
    if (message_arena != submessage_arena) {
      timestamp_value = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage(
          message_arena, timestamp_value, submessage_arena);
    }
    set_has_timestamp_value();
    value_type_.timestamp_value_ = timestamp_value;
  }
  // @@protoc_insertion_point(field_set_allocated:google.firestore.v1.Value.timestamp_value)
}
void Value::clear_timestamp_value() {
  if (_internal_has_timestamp_value()) {
    delete value_type_.timestamp_value_;
    clear_has_value_type();
  }
}
void Value::set_allocated_geo_point_value(::google::type::LatLng* geo_point_value) {
  ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaNoVirtual();
  clear_value_type();
  if (geo_point_value) {
    ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena = nullptr;
    if (message_arena != submessage_arena) {
      geo_point_value = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage(
          message_arena, geo_point_value, submessage_arena);
    }
    set_has_geo_point_value();
    value_type_.geo_point_value_ = geo_point_value;
  }
  // @@protoc_insertion_point(field_set_allocated:google.firestore.v1.Value.geo_point_value)
}
void Value::clear_geo_point_value() {
  if (_internal_has_geo_point_value()) {
    delete value_type_.geo_point_value_;
    clear_has_value_type();
  }
}
void Value::set_allocated_array_value(::google::firestore::v1::ArrayValue* array_value) {
  ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaNoVirtual();
  clear_value_type();
  if (array_value) {
    ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena = nullptr;
    if (message_arena != submessage_arena) {
      array_value = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage(
          message_arena, array_value, submessage_arena);
    }
    set_has_array_value();
    value_type_.array_value_ = array_value;
  }
  // @@protoc_insertion_point(field_set_allocated:google.firestore.v1.Value.array_value)
}
void Value::set_allocated_map_value(::google::firestore::v1::MapValue* map_value) {
  ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaNoVirtual();
  clear_value_type();
  if (map_value) {
    ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena = nullptr;
    if (message_arena != submessage_arena) {
      map_value = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage(
          message_arena, map_value, submessage_arena);
    }
    set_has_map_value();
    value_type_.map_value_ = map_value;
  }
  // @@protoc_insertion_point(field_set_allocated:google.firestore.v1.Value.map_value)
}
Value::Value()
  : ::PROTOBUF_NAMESPACE_ID::Message(), _internal_metadata_(nullptr) {
  SharedCtor();
  // @@protoc_insertion_point(constructor:google.firestore.v1.Value)
}
Value::Value(const Value& from)
  : ::PROTOBUF_NAMESPACE_ID::Message(),
      _internal_metadata_(nullptr) {
  _internal_metadata_.MergeFrom(from._internal_metadata_);
  clear_has_value_type();
  switch (from.value_type_case()) {
    case kNullValue: {
      _internal_set_null_value(from._internal_null_value());
      break;
    }
    case kBooleanValue: {
      _internal_set_boolean_value(from._internal_boolean_value());
      break;
    }
    case kIntegerValue: {
      _internal_set_integer_value(from._internal_integer_value());
      break;
    }
    case kDoubleValue: {
      _internal_set_double_value(from._internal_double_value());
      break;
    }
    case kTimestampValue: {
      _internal_mutable_timestamp_value()->PROTOBUF_NAMESPACE_ID::Timestamp::MergeFrom(from._internal_timestamp_value());
      break;
    }
    case kStringValue: {
      _internal_set_string_value(from._internal_string_value());
      break;
    }
    case kBytesValue: {
      _internal_set_bytes_value(from._internal_bytes_value());
      break;
    }
    case kReferenceValue: {
      _internal_set_reference_value(from._internal_reference_value());
      break;
    }
    case kGeoPointValue: {
      _internal_mutable_geo_point_value()->::google::type::LatLng::MergeFrom(from._internal_geo_point_value());
      break;
    }
    case kArrayValue: {
      _internal_mutable_array_value()->::google::firestore::v1::ArrayValue::MergeFrom(from._internal_array_value());
      break;
    }
    case kMapValue: {
      _internal_mutable_map_value()->::google::firestore::v1::MapValue::MergeFrom(from._internal_map_value());
      break;
    }
    case VALUE_TYPE_NOT_SET: {
      break;
    }
  }
  // @@protoc_insertion_point(copy_constructor:google.firestore.v1.Value)
}

void Value::SharedCtor() {
  ::PROTOBUF_NAMESPACE_ID::internal::InitSCC(&scc_info_ArrayValue_google_2ffirestore_2fv1_2fdocument_2eproto.base);
  clear_has_value_type();
}

Value::~Value() {
  // @@protoc_insertion_point(destructor:google.firestore.v1.Value)
  SharedDtor();
}

void Value::SharedDtor() {
  if (has_value_type()) {
    clear_value_type();
  }
}

void Value::SetCachedSize(int size) const {
  _cached_size_.Set(size);
}
const Value& Value::default_instance() {
  ::PROTOBUF_NAMESPACE_ID::internal::InitSCC(&::scc_info_ArrayValue_google_2ffirestore_2fv1_2fdocument_2eproto.base);
  return *internal_default_instance();
}


void Value::clear_value_type() {
// @@protoc_insertion_point(one_of_clear_start:google.firestore.v1.Value)
  switch (value_type_case()) {
    case kNullValue: {
      // No need to clear
      break;
    }
    case kBooleanValue: {
      // No need to clear
      break;
    }
    case kIntegerValue: {
      // No need to clear
      break;
    }
    case kDoubleValue: {
      // No need to clear
      break;
    }
    case kTimestampValue: {
      delete value_type_.timestamp_value_;
      break;
    }
    case kStringValue: {
      value_type_.string_value_.DestroyNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
      break;
    }
    case kBytesValue: {
      value_type_.bytes_value_.DestroyNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
      break;
    }
    case kReferenceValue: {
      value_type_.reference_value_.DestroyNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
      break;
    }
    case kGeoPointValue: {
      delete value_type_.geo_point_value_;
      break;
    }
    case kArrayValue: {
      delete value_type_.array_value_;
      break;
    }
    case kMapValue: {
      delete value_type_.map_value_;
      break;
    }
    case VALUE_TYPE_NOT_SET: {
      break;
    }
  }
  _oneof_case_[0] = VALUE_TYPE_NOT_SET;
}


void Value::Clear() {
// @@protoc_insertion_point(message_clear_start:google.firestore.v1.Value)
  ::PROTOBUF_NAMESPACE_ID::uint32 cached_has_bits = 0;
  // Prevent compiler warnings about cached_has_bits being unused
  (void) cached_has_bits;

  clear_value_type();
  _internal_metadata_.Clear();
}

const char* Value::_InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) {
#define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure
  while (!ctx->Done(&ptr)) {
    ::PROTOBUF_NAMESPACE_ID::uint32 tag;
    ptr = ::PROTOBUF_NAMESPACE_ID::internal::ReadTag(ptr, &tag);
    CHK_(ptr);
    switch (tag >> 3) {
      // bool boolean_value = 1;
      case 1:
        if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 8)) {
          _internal_set_boolean_value(::PROTOBUF_NAMESPACE_ID::internal::ReadVarint(&ptr));
          CHK_(ptr);
        } else goto handle_unusual;
        continue;
      // int64 integer_value = 2;
      case 2:
        if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 16)) {
          _internal_set_integer_value(::PROTOBUF_NAMESPACE_ID::internal::ReadVarint(&ptr));
          CHK_(ptr);
        } else goto handle_unusual;
        continue;
      // double double_value = 3;
      case 3:
        if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 25)) {
          _internal_set_double_value(::PROTOBUF_NAMESPACE_ID::internal::UnalignedLoad<double>(ptr));
          ptr += sizeof(double);
        } else goto handle_unusual;
        continue;
      // string reference_value = 5;
      case 5:
        if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 42)) {
          auto str = _internal_mutable_reference_value();
          ptr = ::PROTOBUF_NAMESPACE_ID::internal::InlineGreedyStringParser(str, ptr, ctx);
          CHK_(::PROTOBUF_NAMESPACE_ID::internal::VerifyUTF8(str, "google.firestore.v1.Value.reference_value"));
          CHK_(ptr);
        } else goto handle_unusual;
        continue;
      // .google.firestore.v1.MapValue map_value = 6;
      case 6:
        if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 50)) {
          ptr = ctx->ParseMessage(_internal_mutable_map_value(), ptr);
          CHK_(ptr);
        } else goto handle_unusual;
        continue;
      // .google.type.LatLng geo_point_value = 8;
      case 8:
        if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 66)) {
          ptr = ctx->ParseMessage(_internal_mutable_geo_point_value(), ptr);
          CHK_(ptr);
        } else goto handle_unusual;
        continue;
      // .google.firestore.v1.ArrayValue array_value = 9;
      case 9:
        if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 74)) {
          ptr = ctx->ParseMessage(_internal_mutable_array_value(), ptr);
          CHK_(ptr);
        } else goto handle_unusual;
        continue;
      // .google.protobuf.Timestamp timestamp_value = 10;
      case 10:
        if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 82)) {
          ptr = ctx->ParseMessage(_internal_mutable_timestamp_value(), ptr);
          CHK_(ptr);
        } else goto handle_unusual;
        continue;
      // .google.protobuf.NullValue null_value = 11;
      case 11:
        if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 88)) {
          ::PROTOBUF_NAMESPACE_ID::uint64 val = ::PROTOBUF_NAMESPACE_ID::internal::ReadVarint(&ptr);
          CHK_(ptr);
          _internal_set_null_value(static_cast<PROTOBUF_NAMESPACE_ID::NullValue>(val));
        } else goto handle_unusual;
        continue;
      // string string_value = 17;
      case 17:
        if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 138)) {
          auto str = _internal_mutable_string_value();
          ptr = ::PROTOBUF_NAMESPACE_ID::internal::InlineGreedyStringParser(str, ptr, ctx);
          CHK_(::PROTOBUF_NAMESPACE_ID::internal::VerifyUTF8(str, "google.firestore.v1.Value.string_value"));
          CHK_(ptr);
        } else goto handle_unusual;
        continue;
      // bytes bytes_value = 18;
      case 18:
        if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 146)) {
          auto str = _internal_mutable_bytes_value();
          ptr = ::PROTOBUF_NAMESPACE_ID::internal::InlineGreedyStringParser(str, ptr, ctx);
          CHK_(ptr);
        } else goto handle_unusual;
        continue;
      default: {
      handle_unusual:
        if ((tag & 7) == 4 || tag == 0) {
          ctx->SetLastTag(tag);
          goto success;
        }
        ptr = UnknownFieldParse(tag, &_internal_metadata_, ptr, ctx);
        CHK_(ptr != nullptr);
        continue;
      }
    }  // switch
  }  // while
success:
  return ptr;
failure:
  ptr = nullptr;
  goto success;
#undef CHK_
}

::PROTOBUF_NAMESPACE_ID::uint8* Value::_InternalSerialize(
    ::PROTOBUF_NAMESPACE_ID::uint8* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const {
  // @@protoc_insertion_point(serialize_to_array_start:google.firestore.v1.Value)
  ::PROTOBUF_NAMESPACE_ID::uint32 cached_has_bits = 0;
  (void) cached_has_bits;

  // bool boolean_value = 1;
  if (_internal_has_boolean_value()) {
    target = stream->EnsureSpace(target);
    target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::WriteBoolToArray(1, this->_internal_boolean_value(), target);
  }

  // int64 integer_value = 2;
  if (_internal_has_integer_value()) {
    target = stream->EnsureSpace(target);
    target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::WriteInt64ToArray(2, this->_internal_integer_value(), target);
  }

  // double double_value = 3;
  if (_internal_has_double_value()) {
    target = stream->EnsureSpace(target);
    target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::WriteDoubleToArray(3, this->_internal_double_value(), target);
  }

  // string reference_value = 5;
  if (_internal_has_reference_value()) {
    ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::VerifyUtf8String(
      this->_internal_reference_value().data(), static_cast<int>(this->_internal_reference_value().length()),
      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::SERIALIZE,
      "google.firestore.v1.Value.reference_value");
    target = stream->WriteStringMaybeAliased(
        5, this->_internal_reference_value(), target);
  }

  // .google.firestore.v1.MapValue map_value = 6;
  if (_internal_has_map_value()) {
    target = stream->EnsureSpace(target);
    target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::
      InternalWriteMessage(
        6, _Internal::map_value(this), target, stream);
  }

  // .google.type.LatLng geo_point_value = 8;
  if (_internal_has_geo_point_value()) {
    target = stream->EnsureSpace(target);
    target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::
      InternalWriteMessage(
        8, _Internal::geo_point_value(this), target, stream);
  }

  // .google.firestore.v1.ArrayValue array_value = 9;
  if (_internal_has_array_value()) {
    target = stream->EnsureSpace(target);
    target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::
      InternalWriteMessage(
        9, _Internal::array_value(this), target, stream);
  }

  // .google.protobuf.Timestamp timestamp_value = 10;
  if (_internal_has_timestamp_value()) {
    target = stream->EnsureSpace(target);
    target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::
      InternalWriteMessage(
        10, _Internal::timestamp_value(this), target, stream);
  }

  // .google.protobuf.NullValue null_value = 11;
  if (_internal_has_null_value()) {
    target = stream->EnsureSpace(target);
    target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::WriteEnumToArray(
      11, this->_internal_null_value(), target);
  }

  // string string_value = 17;
  if (_internal_has_string_value()) {
    ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::VerifyUtf8String(
      this->_internal_string_value().data(), static_cast<int>(this->_internal_string_value().length()),
      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::SERIALIZE,
      "google.firestore.v1.Value.string_value");
    target = stream->WriteStringMaybeAliased(
        17, this->_internal_string_value(), target);
  }

  // bytes bytes_value = 18;
  if (_internal_has_bytes_value()) {
    target = stream->WriteBytesMaybeAliased(
        18, this->_internal_bytes_value(), target);
  }

  if (PROTOBUF_PREDICT_FALSE(_internal_metadata_.have_unknown_fields())) {
    target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormat::InternalSerializeUnknownFieldsToArray(
        _internal_metadata_.unknown_fields(), target, stream);
  }
  // @@protoc_insertion_point(serialize_to_array_end:google.firestore.v1.Value)
  return target;
}

size_t Value::ByteSizeLong() const {
// @@protoc_insertion_point(message_byte_size_start:google.firestore.v1.Value)
  size_t total_size = 0;

  ::PROTOBUF_NAMESPACE_ID::uint32 cached_has_bits = 0;
  // Prevent compiler warnings about cached_has_bits being unused
  (void) cached_has_bits;

  switch (value_type_case()) {
    // .google.protobuf.NullValue null_value = 11;
    case kNullValue: {
      total_size += 1 +
        ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::EnumSize(this->_internal_null_value());
      break;
    }
    // bool boolean_value = 1;
    case kBooleanValue: {
      total_size += 1 + 1;
      break;
    }
    // int64 integer_value = 2;
    case kIntegerValue: {
      total_size += 1 +
        ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::Int64Size(
          this->_internal_integer_value());
      break;
    }
    // double double_value = 3;
    case kDoubleValue: {
      total_size += 1 + 8;
      break;
    }
    // .google.protobuf.Timestamp timestamp_value = 10;
    case kTimestampValue: {
      total_size += 1 +
        ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::MessageSize(
          *value_type_.timestamp_value_);
      break;
    }
    // string string_value = 17;
    case kStringValue: {
      total_size += 2 +
        ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::StringSize(
          this->_internal_string_value());
      break;
    }
    // bytes bytes_value = 18;
    case kBytesValue: {
      total_size += 2 +
        ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::BytesSize(
          this->_internal_bytes_value());
      break;
    }
    // string reference_value = 5;
    case kReferenceValue: {
      total_size += 1 +
        ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::StringSize(
          this->_internal_reference_value());
      break;
    }
    // .google.type.LatLng geo_point_value = 8;
    case kGeoPointValue: {
      total_size += 1 +
        ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::MessageSize(
          *value_type_.geo_point_value_);
      break;
    }
    // .google.firestore.v1.ArrayValue array_value = 9;
    case kArrayValue: {
      total_size += 1 +
        ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::MessageSize(
          *value_type_.array_value_);
      break;
    }
    // .google.firestore.v1.MapValue map_value = 6;
    case kMapValue: {
      total_size += 1 +
        ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::MessageSize(
          *value_type_.map_value_);
      break;
    }
    case VALUE_TYPE_NOT_SET: {
      break;
    }
  }
  if (PROTOBUF_PREDICT_FALSE(_internal_metadata_.have_unknown_fields())) {
    return ::PROTOBUF_NAMESPACE_ID::internal::ComputeUnknownFieldsSize(
        _internal_metadata_, total_size, &_cached_size_);
  }
  int cached_size = ::PROTOBUF_NAMESPACE_ID::internal::ToCachedSize(total_size);
  SetCachedSize(cached_size);
  return total_size;
}

void Value::MergeFrom(const ::PROTOBUF_NAMESPACE_ID::Message& from) {
// @@protoc_insertion_point(generalized_merge_from_start:google.firestore.v1.Value)
  GOOGLE_DCHECK_NE(&from, this);
  const Value* source =
      ::PROTOBUF_NAMESPACE_ID::DynamicCastToGenerated<Value>(
          &from);
  if (source == nullptr) {
  // @@protoc_insertion_point(generalized_merge_from_cast_fail:google.firestore.v1.Value)
    ::PROTOBUF_NAMESPACE_ID::internal::ReflectionOps::Merge(from, this);
  } else {
  // @@protoc_insertion_point(generalized_merge_from_cast_success:google.firestore.v1.Value)
    MergeFrom(*source);
  }
}

void Value::MergeFrom(const Value& from) {
// @@protoc_insertion_point(class_specific_merge_from_start:google.firestore.v1.Value)
  GOOGLE_DCHECK_NE(&from, this);
  _internal_metadata_.MergeFrom(from._internal_metadata_);
  ::PROTOBUF_NAMESPACE_ID::uint32 cached_has_bits = 0;
  (void) cached_has_bits;

  switch (from.value_type_case()) {
    case kNullValue: {
      _internal_set_null_value(from._internal_null_value());
      break;
    }
    case kBooleanValue: {
      _internal_set_boolean_value(from._internal_boolean_value());
      break;
    }
    case kIntegerValue: {
      _internal_set_integer_value(from._internal_integer_value());
      break;
    }
    case kDoubleValue: {
      _internal_set_double_value(from._internal_double_value());
      break;
    }
    case kTimestampValue: {
      _internal_mutable_timestamp_value()->PROTOBUF_NAMESPACE_ID::Timestamp::MergeFrom(from._internal_timestamp_value());
      break;
    }
    case kStringValue: {
      _internal_set_string_value(from._internal_string_value());
      break;
    }
    case kBytesValue: {
      _internal_set_bytes_value(from._internal_bytes_value());
      break;
    }
    case kReferenceValue: {
      _internal_set_reference_value(from._internal_reference_value());
      break;
    }
    case kGeoPointValue: {
      _internal_mutable_geo_point_value()->::google::type::LatLng::MergeFrom(from._internal_geo_point_value());
      break;
    }
    case kArrayValue: {
      _internal_mutable_array_value()->::google::firestore::v1::ArrayValue::MergeFrom(from._internal_array_value());
      break;
    }
    case kMapValue: {
      _internal_mutable_map_value()->::google::firestore::v1::MapValue::MergeFrom(from._internal_map_value());
      break;
    }
    case VALUE_TYPE_NOT_SET: {
      break;
    }
  }
}

void Value::CopyFrom(const ::PROTOBUF_NAMESPACE_ID::Message& from) {
// @@protoc_insertion_point(generalized_copy_from_start:google.firestore.v1.Value)
  if (&from == this) return;
  Clear();
  MergeFrom(from);
}

void Value::CopyFrom(const Value& from) {
// @@protoc_insertion_point(class_specific_copy_from_start:google.firestore.v1.Value)
  if (&from == this) return;
  Clear();
  MergeFrom(from);
}

bool Value::IsInitialized() const {
  return true;
}

void Value::InternalSwap(Value* other) {
  using std::swap;
  _internal_metadata_.Swap(&other->_internal_metadata_);
  swap(value_type_, other->value_type_);
  swap(_oneof_case_[0], other->_oneof_case_[0]);
}

::PROTOBUF_NAMESPACE_ID::Metadata Value::GetMetadata() const {
  return GetMetadataStatic();
}


// ===================================================================

void ArrayValue::InitAsDefaultInstance() {
}
class ArrayValue::_Internal {
 public:
};

ArrayValue::ArrayValue()
  : ::PROTOBUF_NAMESPACE_ID::Message(), _internal_metadata_(nullptr) {
  SharedCtor();
  // @@protoc_insertion_point(constructor:google.firestore.v1.ArrayValue)
}
ArrayValue::ArrayValue(const ArrayValue& from)
  : ::PROTOBUF_NAMESPACE_ID::Message(),
      _internal_metadata_(nullptr),
      values_(from.values_) {
  _internal_metadata_.MergeFrom(from._internal_metadata_);
  // @@protoc_insertion_point(copy_constructor:google.firestore.v1.ArrayValue)
}

void ArrayValue::SharedCtor() {
  ::PROTOBUF_NAMESPACE_ID::internal::InitSCC(&scc_info_ArrayValue_google_2ffirestore_2fv1_2fdocument_2eproto.base);
}

ArrayValue::~ArrayValue() {
  // @@protoc_insertion_point(destructor:google.firestore.v1.ArrayValue)
  SharedDtor();
}

void ArrayValue::SharedDtor() {
}

void ArrayValue::SetCachedSize(int size) const {
  _cached_size_.Set(size);
}
const ArrayValue& ArrayValue::default_instance() {
  ::PROTOBUF_NAMESPACE_ID::internal::InitSCC(&::scc_info_ArrayValue_google_2ffirestore_2fv1_2fdocument_2eproto.base);
  return *internal_default_instance();
}


void ArrayValue::Clear() {
// @@protoc_insertion_point(message_clear_start:google.firestore.v1.ArrayValue)
  ::PROTOBUF_NAMESPACE_ID::uint32 cached_has_bits = 0;
  // Prevent compiler warnings about cached_has_bits being unused
  (void) cached_has_bits;

  values_.Clear();
  _internal_metadata_.Clear();
}

const char* ArrayValue::_InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) {
#define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure
  while (!ctx->Done(&ptr)) {
    ::PROTOBUF_NAMESPACE_ID::uint32 tag;
    ptr = ::PROTOBUF_NAMESPACE_ID::internal::ReadTag(ptr, &tag);
    CHK_(ptr);
    switch (tag >> 3) {
      // repeated .google.firestore.v1.Value values = 1;
      case 1:
        if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 10)) {
          ptr -= 1;
          do {
            ptr += 1;
            ptr = ctx->ParseMessage(_internal_add_values(), ptr);
            CHK_(ptr);
            if (!ctx->DataAvailable(ptr)) break;
          } while (::PROTOBUF_NAMESPACE_ID::internal::ExpectTag<10>(ptr));
        } else goto handle_unusual;
        continue;
      default: {
      handle_unusual:
        if ((tag & 7) == 4 || tag == 0) {
          ctx->SetLastTag(tag);
          goto success;
        }
        ptr = UnknownFieldParse(tag, &_internal_metadata_, ptr, ctx);
        CHK_(ptr != nullptr);
        continue;
      }
    }  // switch
  }  // while
success:
  return ptr;
failure:
  ptr = nullptr;
  goto success;
#undef CHK_
}

::PROTOBUF_NAMESPACE_ID::uint8* ArrayValue::_InternalSerialize(
    ::PROTOBUF_NAMESPACE_ID::uint8* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const {
  // @@protoc_insertion_point(serialize_to_array_start:google.firestore.v1.ArrayValue)
  ::PROTOBUF_NAMESPACE_ID::uint32 cached_has_bits = 0;
  (void) cached_has_bits;

  // repeated .google.firestore.v1.Value values = 1;
  for (unsigned int i = 0,
      n = static_cast<unsigned int>(this->_internal_values_size()); i < n; i++) {
    target = stream->EnsureSpace(target);
    target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::
      InternalWriteMessage(1, this->_internal_values(i), target, stream);
  }

  if (PROTOBUF_PREDICT_FALSE(_internal_metadata_.have_unknown_fields())) {
    target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormat::InternalSerializeUnknownFieldsToArray(
        _internal_metadata_.unknown_fields(), target, stream);
  }
  // @@protoc_insertion_point(serialize_to_array_end:google.firestore.v1.ArrayValue)
  return target;
}

size_t ArrayValue::ByteSizeLong() const {
// @@protoc_insertion_point(message_byte_size_start:google.firestore.v1.ArrayValue)
  size_t total_size = 0;

  ::PROTOBUF_NAMESPACE_ID::uint32 cached_has_bits = 0;
  // Prevent compiler warnings about cached_has_bits being unused
  (void) cached_has_bits;

  // repeated .google.firestore.v1.Value values = 1;
  total_size += 1UL * this->_internal_values_size();
  for (const auto& msg : this->values_) {
    total_size +=
      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::MessageSize(msg);
  }

  if (PROTOBUF_PREDICT_FALSE(_internal_metadata_.have_unknown_fields())) {
    return ::PROTOBUF_NAMESPACE_ID::internal::ComputeUnknownFieldsSize(
        _internal_metadata_, total_size, &_cached_size_);
  }
  int cached_size = ::PROTOBUF_NAMESPACE_ID::internal::ToCachedSize(total_size);
  SetCachedSize(cached_size);
  return total_size;
}

void ArrayValue::MergeFrom(const ::PROTOBUF_NAMESPACE_ID::Message& from) {
// @@protoc_insertion_point(generalized_merge_from_start:google.firestore.v1.ArrayValue)
  GOOGLE_DCHECK_NE(&from, this);
  const ArrayValue* source =
      ::PROTOBUF_NAMESPACE_ID::DynamicCastToGenerated<ArrayValue>(
          &from);
  if (source == nullptr) {
  // @@protoc_insertion_point(generalized_merge_from_cast_fail:google.firestore.v1.ArrayValue)
    ::PROTOBUF_NAMESPACE_ID::internal::ReflectionOps::Merge(from, this);
  } else {
  // @@protoc_insertion_point(generalized_merge_from_cast_success:google.firestore.v1.ArrayValue)
    MergeFrom(*source);
  }
}

void ArrayValue::MergeFrom(const ArrayValue& from) {
// @@protoc_insertion_point(class_specific_merge_from_start:google.firestore.v1.ArrayValue)
  GOOGLE_DCHECK_NE(&from, this);
  _internal_metadata_.MergeFrom(from._internal_metadata_);
  ::PROTOBUF_NAMESPACE_ID::uint32 cached_has_bits = 0;
  (void) cached_has_bits;

  values_.MergeFrom(from.values_);
}

void ArrayValue::CopyFrom(const ::PROTOBUF_NAMESPACE_ID::Message& from) {
// @@protoc_insertion_point(generalized_copy_from_start:google.firestore.v1.ArrayValue)
  if (&from == this) return;
  Clear();
  MergeFrom(from);
}

void ArrayValue::CopyFrom(const ArrayValue& from) {
// @@protoc_insertion_point(class_specific_copy_from_start:google.firestore.v1.ArrayValue)
  if (&from == this) return;
  Clear();
  MergeFrom(from);
}

bool ArrayValue::IsInitialized() const {
  return true;
}

void ArrayValue::InternalSwap(ArrayValue* other) {
  using std::swap;
  _internal_metadata_.Swap(&other->_internal_metadata_);
  values_.InternalSwap(&other->values_);
}

::PROTOBUF_NAMESPACE_ID::Metadata ArrayValue::GetMetadata() const {
  return GetMetadataStatic();
}


// ===================================================================

MapValue_FieldsEntry_DoNotUse::MapValue_FieldsEntry_DoNotUse() {}
MapValue_FieldsEntry_DoNotUse::MapValue_FieldsEntry_DoNotUse(::PROTOBUF_NAMESPACE_ID::Arena* arena)
    : SuperType(arena) {}
void MapValue_FieldsEntry_DoNotUse::MergeFrom(const MapValue_FieldsEntry_DoNotUse& other) {
  MergeFromInternal(other);
}
::PROTOBUF_NAMESPACE_ID::Metadata MapValue_FieldsEntry_DoNotUse::GetMetadata() const {
  return GetMetadataStatic();
}
void MapValue_FieldsEntry_DoNotUse::MergeFrom(
    const ::PROTOBUF_NAMESPACE_ID::Message& other) {
  ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom(other);
}


// ===================================================================

void MapValue::InitAsDefaultInstance() {
}
class MapValue::_Internal {
 public:
};

MapValue::MapValue()
  : ::PROTOBUF_NAMESPACE_ID::Message(), _internal_metadata_(nullptr) {
  SharedCtor();
  // @@protoc_insertion_point(constructor:google.firestore.v1.MapValue)
}
MapValue::MapValue(const MapValue& from)
  : ::PROTOBUF_NAMESPACE_ID::Message(),
      _internal_metadata_(nullptr) {
  _internal_metadata_.MergeFrom(from._internal_metadata_);
  fields_.MergeFrom(from.fields_);
  // @@protoc_insertion_point(copy_constructor:google.firestore.v1.MapValue)
}

void MapValue::SharedCtor() {
  ::PROTOBUF_NAMESPACE_ID::internal::InitSCC(&scc_info_ArrayValue_google_2ffirestore_2fv1_2fdocument_2eproto.base);
}

MapValue::~MapValue() {
  // @@protoc_insertion_point(destructor:google.firestore.v1.MapValue)
  SharedDtor();
}

void MapValue::SharedDtor() {
}

void MapValue::SetCachedSize(int size) const {
  _cached_size_.Set(size);
}
const MapValue& MapValue::default_instance() {
  ::PROTOBUF_NAMESPACE_ID::internal::InitSCC(&::scc_info_ArrayValue_google_2ffirestore_2fv1_2fdocument_2eproto.base);
  return *internal_default_instance();
}


void MapValue::Clear() {
// @@protoc_insertion_point(message_clear_start:google.firestore.v1.MapValue)
  ::PROTOBUF_NAMESPACE_ID::uint32 cached_has_bits = 0;
  // Prevent compiler warnings about cached_has_bits being unused
  (void) cached_has_bits;

  fields_.Clear();
  _internal_metadata_.Clear();
}

const char* MapValue::_InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) {
#define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure
  while (!ctx->Done(&ptr)) {
    ::PROTOBUF_NAMESPACE_ID::uint32 tag;
    ptr = ::PROTOBUF_NAMESPACE_ID::internal::ReadTag(ptr, &tag);
    CHK_(ptr);
    switch (tag >> 3) {
      // map<string, .google.firestore.v1.Value> fields = 1;
      case 1:
        if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 10)) {
          ptr -= 1;
          do {
            ptr += 1;
            ptr = ctx->ParseMessage(&fields_, ptr);
            CHK_(ptr);
            if (!ctx->DataAvailable(ptr)) break;
          } while (::PROTOBUF_NAMESPACE_ID::internal::ExpectTag<10>(ptr));
        } else goto handle_unusual;
        continue;
      default: {
      handle_unusual:
        if ((tag & 7) == 4 || tag == 0) {
          ctx->SetLastTag(tag);
          goto success;
        }
        ptr = UnknownFieldParse(tag, &_internal_metadata_, ptr, ctx);
        CHK_(ptr != nullptr);
        continue;
      }
    }  // switch
  }  // while
success:
  return ptr;
failure:
  ptr = nullptr;
  goto success;
#undef CHK_
}

::PROTOBUF_NAMESPACE_ID::uint8* MapValue::_InternalSerialize(
    ::PROTOBUF_NAMESPACE_ID::uint8* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const {
  // @@protoc_insertion_point(serialize_to_array_start:google.firestore.v1.MapValue)
  ::PROTOBUF_NAMESPACE_ID::uint32 cached_has_bits = 0;
  (void) cached_has_bits;

  // map<string, .google.firestore.v1.Value> fields = 1;
  if (!this->_internal_fields().empty()) {
    typedef ::PROTOBUF_NAMESPACE_ID::Map< std::string, ::google::firestore::v1::Value >::const_pointer
        ConstPtr;
    typedef ConstPtr SortItem;
    typedef ::PROTOBUF_NAMESPACE_ID::internal::CompareByDerefFirst<SortItem> Less;
    struct Utf8Check {
      static void Check(ConstPtr p) {
        ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::VerifyUtf8String(
          p->first.data(), static_cast<int>(p->first.length()),
          ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::SERIALIZE,
          "google.firestore.v1.MapValue.FieldsEntry.key");
      }
    };

    if (stream->IsSerializationDeterministic() &&
        this->_internal_fields().size() > 1) {
      ::std::unique_ptr<SortItem[]> items(
          new SortItem[this->_internal_fields().size()]);
      typedef ::PROTOBUF_NAMESPACE_ID::Map< std::string, ::google::firestore::v1::Value >::size_type size_type;
      size_type n = 0;
      for (::PROTOBUF_NAMESPACE_ID::Map< std::string, ::google::firestore::v1::Value >::const_iterator
          it = this->_internal_fields().begin();
          it != this->_internal_fields().end(); ++it, ++n) {
        items[static_cast<ptrdiff_t>(n)] = SortItem(&*it);
      }
      ::std::sort(&items[0], &items[static_cast<ptrdiff_t>(n)], Less());
      for (size_type i = 0; i < n; i++) {
        target = MapValue_FieldsEntry_DoNotUse::Funcs::InternalSerialize(1, items[static_cast<ptrdiff_t>(i)]->first, items[static_cast<ptrdiff_t>(i)]->second, target, stream);
        Utf8Check::Check(&(*items[static_cast<ptrdiff_t>(i)]));
      }
    } else {
      for (::PROTOBUF_NAMESPACE_ID::Map< std::string, ::google::firestore::v1::Value >::const_iterator
          it = this->_internal_fields().begin();
          it != this->_internal_fields().end(); ++it) {
        target = MapValue_FieldsEntry_DoNotUse::Funcs::InternalSerialize(1, it->first, it->second, target, stream);
        Utf8Check::Check(&(*it));
      }
    }
  }

  if (PROTOBUF_PREDICT_FALSE(_internal_metadata_.have_unknown_fields())) {
    target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormat::InternalSerializeUnknownFieldsToArray(
        _internal_metadata_.unknown_fields(), target, stream);
  }
  // @@protoc_insertion_point(serialize_to_array_end:google.firestore.v1.MapValue)
  return target;
}

size_t MapValue::ByteSizeLong() const {
// @@protoc_insertion_point(message_byte_size_start:google.firestore.v1.MapValue)
  size_t total_size = 0;

  ::PROTOBUF_NAMESPACE_ID::uint32 cached_has_bits = 0;
  // Prevent compiler warnings about cached_has_bits being unused
  (void) cached_has_bits;

  // map<string, .google.firestore.v1.Value> fields = 1;
  total_size += 1 *
      ::PROTOBUF_NAMESPACE_ID::internal::FromIntSize(this->_internal_fields_size());
  for (::PROTOBUF_NAMESPACE_ID::Map< std::string, ::google::firestore::v1::Value >::const_iterator
      it = this->_internal_fields().begin();
      it != this->_internal_fields().end(); ++it) {
    total_size += MapValue_FieldsEntry_DoNotUse::Funcs::ByteSizeLong(it->first, it->second);
  }

  if (PROTOBUF_PREDICT_FALSE(_internal_metadata_.have_unknown_fields())) {
    return ::PROTOBUF_NAMESPACE_ID::internal::ComputeUnknownFieldsSize(
        _internal_metadata_, total_size, &_cached_size_);
  }
  int cached_size = ::PROTOBUF_NAMESPACE_ID::internal::ToCachedSize(total_size);
  SetCachedSize(cached_size);
  return total_size;
}

void MapValue::MergeFrom(const ::PROTOBUF_NAMESPACE_ID::Message& from) {
// @@protoc_insertion_point(generalized_merge_from_start:google.firestore.v1.MapValue)
  GOOGLE_DCHECK_NE(&from, this);
  const MapValue* source =
      ::PROTOBUF_NAMESPACE_ID::DynamicCastToGenerated<MapValue>(
          &from);
  if (source == nullptr) {
  // @@protoc_insertion_point(generalized_merge_from_cast_fail:google.firestore.v1.MapValue)
    ::PROTOBUF_NAMESPACE_ID::internal::ReflectionOps::Merge(from, this);
  } else {
  // @@protoc_insertion_point(generalized_merge_from_cast_success:google.firestore.v1.MapValue)
    MergeFrom(*source);
  }
}

void MapValue::MergeFrom(const MapValue& from) {
// @@protoc_insertion_point(class_specific_merge_from_start:google.firestore.v1.MapValue)
  GOOGLE_DCHECK_NE(&from, this);
  _internal_metadata_.MergeFrom(from._internal_metadata_);
  ::PROTOBUF_NAMESPACE_ID::uint32 cached_has_bits = 0;
  (void) cached_has_bits;

  fields_.MergeFrom(from.fields_);
}

void MapValue::CopyFrom(const ::PROTOBUF_NAMESPACE_ID::Message& from) {
// @@protoc_insertion_point(generalized_copy_from_start:google.firestore.v1.MapValue)
  if (&from == this) return;
  Clear();
  MergeFrom(from);
}

void MapValue::CopyFrom(const MapValue& from) {
// @@protoc_insertion_point(class_specific_copy_from_start:google.firestore.v1.MapValue)
  if (&from == this) return;
  Clear();
  MergeFrom(from);
}

bool MapValue::IsInitialized() const {
  return true;
}

void MapValue::InternalSwap(MapValue* other) {
  using std::swap;
  _internal_metadata_.Swap(&other->_internal_metadata_);
  fields_.Swap(&other->fields_);
}

::PROTOBUF_NAMESPACE_ID::Metadata MapValue::GetMetadata() const {
  return GetMetadataStatic();
}


// @@protoc_insertion_point(namespace_scope)
}  // namespace v1
}  // namespace firestore
}  // namespace google
PROTOBUF_NAMESPACE_OPEN
template<> PROTOBUF_NOINLINE ::google::firestore::v1::Document_FieldsEntry_DoNotUse* Arena::CreateMaybeMessage< ::google::firestore::v1::Document_FieldsEntry_DoNotUse >(Arena* arena) {
  return Arena::CreateInternal< ::google::firestore::v1::Document_FieldsEntry_DoNotUse >(arena);
}
template<> PROTOBUF_NOINLINE ::google::firestore::v1::Document* Arena::CreateMaybeMessage< ::google::firestore::v1::Document >(Arena* arena) {
  return Arena::CreateInternal< ::google::firestore::v1::Document >(arena);
}
template<> PROTOBUF_NOINLINE ::google::firestore::v1::Value* Arena::CreateMaybeMessage< ::google::firestore::v1::Value >(Arena* arena) {
  return Arena::CreateInternal< ::google::firestore::v1::Value >(arena);
}
template<> PROTOBUF_NOINLINE ::google::firestore::v1::ArrayValue* Arena::CreateMaybeMessage< ::google::firestore::v1::ArrayValue >(Arena* arena) {
  return Arena::CreateInternal< ::google::firestore::v1::ArrayValue >(arena);
}
template<> PROTOBUF_NOINLINE ::google::firestore::v1::MapValue_FieldsEntry_DoNotUse* Arena::CreateMaybeMessage< ::google::firestore::v1::MapValue_FieldsEntry_DoNotUse >(Arena* arena) {
  return Arena::CreateInternal< ::google::firestore::v1::MapValue_FieldsEntry_DoNotUse >(arena);
}
template<> PROTOBUF_NOINLINE ::google::firestore::v1::MapValue* Arena::CreateMaybeMessage< ::google::firestore::v1::MapValue >(Arena* arena) {
  return Arena::CreateInternal< ::google::firestore::v1::MapValue >(arena);
}
PROTOBUF_NAMESPACE_CLOSE

// @@protoc_insertion_point(global_scope)
#include <google/protobuf/port_undef.inc>
