@@ -30,41 +30,41 @@ using Type = FieldValue::Type;
30
30
// Constructors
31
31
32
32
FieldValueInternal::FieldValueInternal (bool value) : type_{Type::kBoolean } {
33
- auto proto = absl::get<SharedMessage<google_firestore_v1_Value>>(value_ );
33
+ auto & proto = GetProtoValue ( );
34
34
proto->which_value_type = google_firestore_v1_Value_boolean_value_tag;
35
35
proto->boolean_value = value;
36
36
}
37
37
38
38
FieldValueInternal::FieldValueInternal (int64_t value) : type_{Type::kInteger } {
39
- auto proto = absl::get<SharedMessage<google_firestore_v1_Value>>(value_ );
39
+ auto & proto = GetProtoValue ( );
40
40
proto->which_value_type = google_firestore_v1_Value_integer_value_tag;
41
41
proto->integer_value = value;
42
42
}
43
43
44
44
FieldValueInternal::FieldValueInternal (double value) : type_{Type::kDouble } {
45
- auto proto = absl::get<SharedMessage<google_firestore_v1_Value>>(value_ );
45
+ auto & proto = GetProtoValue ( );
46
46
proto->which_value_type = google_firestore_v1_Value_double_value_tag;
47
47
proto->double_value = value;
48
48
}
49
49
50
50
FieldValueInternal::FieldValueInternal (Timestamp value)
51
51
: type_{Type::kTimestamp } {
52
- auto proto = absl::get<SharedMessage<google_firestore_v1_Value>>(value_ );
52
+ auto & proto = GetProtoValue ( );
53
53
proto->which_value_type = google_firestore_v1_Value_timestamp_value_tag;
54
54
proto->timestamp_value .seconds = value.seconds ();
55
55
proto->timestamp_value .nanos = value.nanoseconds ();
56
56
}
57
57
58
58
FieldValueInternal::FieldValueInternal (std::string value)
59
59
: type_{Type::kString } {
60
- auto proto = absl::get<SharedMessage<google_firestore_v1_Value>>(value_ );
60
+ auto & proto = GetProtoValue ( );
61
61
proto->which_value_type = google_firestore_v1_Value_string_value_tag;
62
62
proto->string_value = MakeBytesArray (value);
63
63
}
64
64
65
65
FieldValueInternal::FieldValueInternal (const uint8_t * value, size_t size)
66
66
: type_{Type::kBlob } {
67
- auto proto = absl::get<SharedMessage<google_firestore_v1_Value>>(value_ );
67
+ auto & proto = GetProtoValue ( );
68
68
proto->which_value_type = google_firestore_v1_Value_bytes_value_tag;
69
69
proto->bytes_value = MakeBytesArray (value, size);
70
70
}
@@ -74,7 +74,7 @@ FieldValueInternal::FieldValueInternal(DocumentReference value)
74
74
75
75
FieldValueInternal::FieldValueInternal (GeoPoint value)
76
76
: type_{Type::kGeoPoint } {
77
- auto proto = absl::get<SharedMessage<google_firestore_v1_Value>>(value_ );
77
+ auto & proto = GetProtoValue ( );
78
78
proto->which_value_type = google_firestore_v1_Value_geo_point_value_tag;
79
79
proto->geo_point_value .latitude = value.latitude ();
80
80
proto->geo_point_value .longitude = value.longitude ();
@@ -90,47 +90,39 @@ FieldValueInternal::FieldValueInternal(MapFieldValue value)
90
90
91
91
bool FieldValueInternal::boolean_value () const {
92
92
SIMPLE_HARD_ASSERT (type_ == Type::kBoolean );
93
- return absl::get<SharedMessage<google_firestore_v1_Value>>(value_)
94
- ->boolean_value ;
93
+ return GetProtoValue ()->boolean_value ;
95
94
}
96
95
97
96
int64_t FieldValueInternal::integer_value () const {
98
97
SIMPLE_HARD_ASSERT (type_ == Type::kInteger );
99
- return absl::get<SharedMessage<google_firestore_v1_Value>>(value_)
100
- ->integer_value ;
98
+ return GetProtoValue ()->integer_value ;
101
99
}
102
100
103
101
double FieldValueInternal::double_value () const {
104
102
SIMPLE_HARD_ASSERT (type_ == Type::kDouble );
105
- return absl::get<SharedMessage<google_firestore_v1_Value>>(value_)
106
- ->double_value ;
103
+ return GetProtoValue ()->double_value ;
107
104
}
108
105
109
106
Timestamp FieldValueInternal::timestamp_value () const {
110
107
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 ;
114
109
return Timestamp{value.seconds , value.nanos };
115
110
}
116
111
117
112
std::string FieldValueInternal::string_value () const {
118
113
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 );
121
115
}
122
116
123
117
const uint8_t * FieldValueInternal::blob_value () const {
124
118
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 ;
127
120
return value ? value->bytes : nullptr ;
128
121
}
129
122
130
123
size_t FieldValueInternal::blob_size () const {
131
124
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 ;
134
126
return value ? value->size : 0 ;
135
127
}
136
128
@@ -141,9 +133,7 @@ DocumentReference FieldValueInternal::reference_value() const {
141
133
142
134
GeoPoint FieldValueInternal::geo_point_value () const {
143
135
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 ;
147
137
return GeoPoint{value.latitude , value.longitude };
148
138
}
149
139
@@ -164,14 +154,12 @@ std::vector<FieldValue> FieldValueInternal::array_transform_value() const {
164
154
165
155
std::int64_t FieldValueInternal::integer_increment_value () const {
166
156
SIMPLE_HARD_ASSERT (type_ == Type::kIncrementInteger );
167
- return absl::get<SharedMessage<google_firestore_v1_Value>>(value_)
168
- ->integer_value ;
157
+ return GetProtoValue ()->integer_value ;
169
158
}
170
159
171
160
double FieldValueInternal::double_increment_value () const {
172
161
SIMPLE_HARD_ASSERT (type_ == Type::kIncrementDouble );
173
- return absl::get<SharedMessage<google_firestore_v1_Value>>(value_)
174
- ->double_value ;
162
+ return GetProtoValue ()->double_value ;
175
163
}
176
164
177
165
// Creating sentinels
@@ -304,5 +292,11 @@ std::string Describe(Type type) {
304
292
}
305
293
}
306
294
295
+ // Helpers
296
+
297
+ SharedMessage<google_firestore_v1_Value>& GetProtoValue () {
298
+ return absl::get<SharedMessage<google_firestore_v1_Value>>(value_);
299
+ }
300
+
307
301
} // namespace firestore
308
302
} // namespace firebase
0 commit comments