Skip to content

Commit baed896

Browse files
Feedback
1 parent e5c1837 commit baed896

File tree

5 files changed

+34
-36
lines changed

5 files changed

+34
-36
lines changed

firestore/src/main/document_snapshot_main.cc

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,7 @@ FieldValue DocumentSnapshotInternal::ConvertObject(
110110
for (pb_size_t i = 0; i < object.fields_count; ++i) {
111111
std::string key = MakeString(object.fields[i].key);
112112
const google_firestore_v1_Value& value = object.fields[i].value;
113-
result[key] = ConvertAnyValue(value, stb);
113+
result[std::move(key)] = ConvertAnyValue(value, stb);
114114
}
115115

116116
return FieldValue::Map(std::move(result));
@@ -174,7 +174,7 @@ FieldValue DocumentSnapshotInternal::ConvertReference(
174174
SIMPLE_HARD_ASSERT(database_id == firestore_internal()->database_id(),
175175
"Converted reference is from another database");
176176

177-
api::DocumentReference api_reference{key, snapshot_.firestore()};
177+
api::DocumentReference api_reference{std::move(key), snapshot_.firestore()};
178178
return FieldValue::Reference(MakePublic(std::move(api_reference)));
179179
}
180180

firestore/src/main/field_value_main.cc

Lines changed: 23 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -30,41 +30,41 @@ using Type = FieldValue::Type;
3030
// Constructors
3131

3232
FieldValueInternal::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

3838
FieldValueInternal::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

4444
FieldValueInternal::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

5050
FieldValueInternal::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

5858
FieldValueInternal::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

6565
FieldValueInternal::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

7575
FieldValueInternal::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

9191
bool 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

9796
int64_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

103101
double 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

109106
Timestamp 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

117112
std::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

123117
const 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

130123
size_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

142134
GeoPoint 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

165155
std::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

171160
double 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

firestore/src/main/field_value_main.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,9 @@ class FieldValueInternal {
7373
explicit FieldValueInternal(FieldValue::Type type, T value)
7474
: type_{type}, value_{std::move(value)} {}
7575

76+
/** Returns the underlying value as a google_firestore_v1_Value proto. */
77+
nanopb::SharedMessage<google_firestore_v1_Value>& GetProtoValue();
78+
7679
FieldValue::Type type_ = FieldValue::Type::kNull;
7780
// Note: it's impossible to roundtrip between a `DocumentReference` and
7881
// `google_firestore_v1_ReferenceValue`, because the latter omits some

firestore/src/main/query_main.cc

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -257,7 +257,8 @@ Message<google_firestore_v1_Value> QueryInternal::ConvertDocumentId(
257257
SimpleThrowInvalidArgument(
258258
"Invalid query. Expected a string for the document ID.");
259259
}
260-
const std::string& document_id = MakeString(from->string_value);
260+
261+
std::string document_id = MakeString(from->string_value);
261262

262263
if (!internal_query.IsCollectionGroupQuery() &&
263264
document_id.find('/') != std::string::npos) {

firestore/src/main/user_data_converter_main.cc

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -338,16 +338,16 @@ Message<google_firestore_v1_Value> UserDataConverter::ParseMap(
338338
const std::string& key = kv.first;
339339
const FieldValue& value = kv.second;
340340

341-
auto parsedValue = ParseData(value, context.ChildContext(key));
342-
if (parsedValue) {
341+
auto parsed_value = ParseData(value, context.ChildContext(key));
342+
if (parsed_value) {
343343
result->map_value.fields[index].key = nanopb::MakeBytesArray(key);
344-
result->map_value.fields[index].value = *parsedValue->release();
344+
result->map_value.fields[index].value = *parsed_value->release();
345345
++index;
346346
}
347347
}
348348
}
349349

350-
return std::move(result);
350+
return result;
351351
}
352352

353353
void UserDataConverter::ParseSentinel(const FieldValue& value,

0 commit comments

Comments
 (0)