@@ -30,41 +30,41 @@ using Type = FieldValue::Type;
3030// Constructors
3131
3232FieldValueInternal::FieldValueInternal (bool value) : type_{Type::kBoolean } {
33- auto proto = absl::get<SharedMessage<google_firestore_v1_Value>>(value_ );
33+ auto & proto = GetProtoValue ( );
3434 proto->which_value_type = google_firestore_v1_Value_boolean_value_tag;
3535 proto->boolean_value = value;
3636}
3737
3838FieldValueInternal::FieldValueInternal (int64_t value) : type_{Type::kInteger } {
39- auto proto = absl::get<SharedMessage<google_firestore_v1_Value>>(value_ );
39+ auto & proto = GetProtoValue ( );
4040 proto->which_value_type = google_firestore_v1_Value_integer_value_tag;
4141 proto->integer_value = value;
4242}
4343
4444FieldValueInternal::FieldValueInternal (double value) : type_{Type::kDouble } {
45- auto proto = absl::get<SharedMessage<google_firestore_v1_Value>>(value_ );
45+ auto & proto = GetProtoValue ( );
4646 proto->which_value_type = google_firestore_v1_Value_double_value_tag;
4747 proto->double_value = value;
4848}
4949
5050FieldValueInternal::FieldValueInternal (Timestamp value)
5151 : type_{Type::kTimestamp } {
52- auto proto = absl::get<SharedMessage<google_firestore_v1_Value>>(value_ );
52+ auto & proto = GetProtoValue ( );
5353 proto->which_value_type = google_firestore_v1_Value_timestamp_value_tag;
5454 proto->timestamp_value .seconds = value.seconds ();
5555 proto->timestamp_value .nanos = value.nanoseconds ();
5656}
5757
5858FieldValueInternal::FieldValueInternal (std::string value)
5959 : type_{Type::kString } {
60- auto proto = absl::get<SharedMessage<google_firestore_v1_Value>>(value_ );
60+ auto & proto = GetProtoValue ( );
6161 proto->which_value_type = google_firestore_v1_Value_string_value_tag;
6262 proto->string_value = MakeBytesArray (value);
6363}
6464
6565FieldValueInternal::FieldValueInternal (const uint8_t * value, size_t size)
6666 : type_{Type::kBlob } {
67- auto proto = absl::get<SharedMessage<google_firestore_v1_Value>>(value_ );
67+ auto & proto = GetProtoValue ( );
6868 proto->which_value_type = google_firestore_v1_Value_bytes_value_tag;
6969 proto->bytes_value = MakeBytesArray (value, size);
7070}
@@ -74,7 +74,7 @@ FieldValueInternal::FieldValueInternal(DocumentReference value)
7474
7575FieldValueInternal::FieldValueInternal (GeoPoint value)
7676 : type_{Type::kGeoPoint } {
77- auto proto = absl::get<SharedMessage<google_firestore_v1_Value>>(value_ );
77+ auto & proto = GetProtoValue ( );
7878 proto->which_value_type = google_firestore_v1_Value_geo_point_value_tag;
7979 proto->geo_point_value .latitude = value.latitude ();
8080 proto->geo_point_value .longitude = value.longitude ();
@@ -90,47 +90,39 @@ FieldValueInternal::FieldValueInternal(MapFieldValue value)
9090
9191bool FieldValueInternal::boolean_value () const {
9292 SIMPLE_HARD_ASSERT (type_ == Type::kBoolean );
93- return absl::get<SharedMessage<google_firestore_v1_Value>>(value_)
94- ->boolean_value ;
93+ return GetProtoValue ()->boolean_value ;
9594}
9695
9796int64_t FieldValueInternal::integer_value () const {
9897 SIMPLE_HARD_ASSERT (type_ == Type::kInteger );
99- return absl::get<SharedMessage<google_firestore_v1_Value>>(value_)
100- ->integer_value ;
98+ return GetProtoValue ()->integer_value ;
10199}
102100
103101double FieldValueInternal::double_value () const {
104102 SIMPLE_HARD_ASSERT (type_ == Type::kDouble );
105- return absl::get<SharedMessage<google_firestore_v1_Value>>(value_)
106- ->double_value ;
103+ return GetProtoValue ()->double_value ;
107104}
108105
109106Timestamp FieldValueInternal::timestamp_value () const {
110107 SIMPLE_HARD_ASSERT (type_ == Type::kTimestamp );
111- const auto & value =
112- absl::get<SharedMessage<google_firestore_v1_Value>>(value_)
113- ->timestamp_value ;
108+ auto & value = GetProtoValue ()->timestamp_value ;
114109 return Timestamp{value.seconds , value.nanos };
115110}
116111
117112std::string FieldValueInternal::string_value () const {
118113 SIMPLE_HARD_ASSERT (type_ == Type::kString );
119- return MakeString (absl::get<SharedMessage<google_firestore_v1_Value>>(value_)
120- ->string_value );
114+ return MakeString (GetProtoValue ()->string_value );
121115}
122116
123117const uint8_t * FieldValueInternal::blob_value () const {
124118 SIMPLE_HARD_ASSERT (type_ == Type::kBlob );
125- auto value =
126- absl::get<SharedMessage<google_firestore_v1_Value>>(value_)->bytes_value ;
119+ auto * value = GetProtoValue ()->bytes_value ;
127120 return value ? value->bytes : nullptr ;
128121}
129122
130123size_t FieldValueInternal::blob_size () const {
131124 SIMPLE_HARD_ASSERT (type_ == Type::kBlob );
132- auto value =
133- absl::get<SharedMessage<google_firestore_v1_Value>>(value_)->bytes_value ;
125+ auto * value = GetProtoValue ()->bytes_value ;
134126 return value ? value->size : 0 ;
135127}
136128
@@ -141,9 +133,7 @@ DocumentReference FieldValueInternal::reference_value() const {
141133
142134GeoPoint FieldValueInternal::geo_point_value () const {
143135 SIMPLE_HARD_ASSERT (type_ == Type::kGeoPoint );
144- const auto & value =
145- absl::get<SharedMessage<google_firestore_v1_Value>>(value_)
146- ->geo_point_value ;
136+ auto & value = GetProtoValue ()->geo_point_value ;
147137 return GeoPoint{value.latitude , value.longitude };
148138}
149139
@@ -164,14 +154,12 @@ std::vector<FieldValue> FieldValueInternal::array_transform_value() const {
164154
165155std::int64_t FieldValueInternal::integer_increment_value () const {
166156 SIMPLE_HARD_ASSERT (type_ == Type::kIncrementInteger );
167- return absl::get<SharedMessage<google_firestore_v1_Value>>(value_)
168- ->integer_value ;
157+ return GetProtoValue ()->integer_value ;
169158}
170159
171160double FieldValueInternal::double_increment_value () const {
172161 SIMPLE_HARD_ASSERT (type_ == Type::kIncrementDouble );
173- return absl::get<SharedMessage<google_firestore_v1_Value>>(value_)
174- ->double_value ;
162+ return GetProtoValue ()->double_value ;
175163}
176164
177165// Creating sentinels
@@ -304,5 +292,11 @@ std::string Describe(Type type) {
304292 }
305293}
306294
295+ // Helpers
296+
297+ SharedMessage<google_firestore_v1_Value>& GetProtoValue () {
298+ return absl::get<SharedMessage<google_firestore_v1_Value>>(value_);
299+ }
300+
307301} // namespace firestore
308302} // namespace firebase
0 commit comments