Skip to content

Commit 0f2a0bf

Browse files
authored
Use C++ serializer for communicating with the backend (#4013)
Replace all uses of `FSTSerializerBeta` in `remote_objc_bridge.{h,mm}` with the C++ `Serializer`. Also, make most of `remote/` sources pure C++ and remove no-longer-used methods in `FSTSerializerBeta`. All integration tests pass, under Address Sanitizer as well. Unfortunately, pretty-printing is still delegated to Objective-C, so that `remote_objc_bridge.mm` still has to be an Objective-C++ source (and which prevents inlining `remote_objc_bridge` into the streams). #no-changelog Will add a changelog entry when local serializer is ported, too.
1 parent 5a7e177 commit 0f2a0bf

30 files changed

+848
-477
lines changed

Firestore/Example/Firestore.xcodeproj/project.pbxproj

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
009CDC6F03AC92F3E345085E /* collection_spec_test.json in Resources */ = {isa = PBXBuildFile; fileRef = 54DA129C1F315EE100DD57A1 /* collection_spec_test.json */; };
1414
009F5174BD172716AFE9F20A /* string_apple_test.mm in Sources */ = {isa = PBXBuildFile; fileRef = 0EE5300F8233D14025EF0456 /* string_apple_test.mm */; };
1515
00B7AFE2A7C158DD685EB5EE /* FIRCollectionReferenceTests.mm in Sources */ = {isa = PBXBuildFile; fileRef = 5492E045202154AA00B64F25 /* FIRCollectionReferenceTests.mm */; };
16+
00F1CB487E8E0DA48F2E8FEC /* message_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = CE37875365497FFA8687B745 /* message_test.cc */; };
1617
00FB77925C843B7DCA944712 /* FSTLevelDBTransactionTests.mm in Sources */ = {isa = PBXBuildFile; fileRef = 132E36BB104830BD806351AC /* FSTLevelDBTransactionTests.mm */; };
1718
01C0A2CF788A93EF2CEB6100 /* memory_index_manager_test.mm in Sources */ = {isa = PBXBuildFile; fileRef = 73F1F7392210F3D800E1F692 /* memory_index_manager_test.mm */; };
1819
01D9704C3AAA13FAD2F962AB /* statusor_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = 54A0352D20A3B3D7003E0143 /* statusor_test.cc */; };
@@ -168,6 +169,7 @@
168169
25FE27330996A59F31713A0C /* FIRDocumentReferenceTests.mm in Sources */ = {isa = PBXBuildFile; fileRef = 5492E049202154AA00B64F25 /* FIRDocumentReferenceTests.mm */; };
169170
2620644052E960310DADB298 /* FIRFieldValueTests.mm in Sources */ = {isa = PBXBuildFile; fileRef = 5492E04A202154AA00B64F25 /* FIRFieldValueTests.mm */; };
170171
2634E1C1971C05790B505824 /* resource_path_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = B686F2B02024FFD70028D6BE /* resource_path_test.cc */; };
172+
26777815544F549DD18D87AF /* message_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = CE37875365497FFA8687B745 /* message_test.cc */; };
171173
268FC3360157A2DCAF89F92D /* snapshot_version_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = ABA495B9202B7E79008A7851 /* snapshot_version_test.cc */; };
172174
26B52236C9D049847042E1BD /* FSTMockDatastore.mm in Sources */ = {isa = PBXBuildFile; fileRef = 5492E02D20213FFC00B64F25 /* FSTMockDatastore.mm */; };
173175
26CB3D7C871BC56456C6021E /* timestamp_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = ABF6506B201131F8005F2C74 /* timestamp_test.cc */; };
@@ -182,11 +184,13 @@
182184
29954A3172DDFE5133D91E24 /* FSTLevelDBSpecTests.mm in Sources */ = {isa = PBXBuildFile; fileRef = 5492E02C20213FFB00B64F25 /* FSTLevelDBSpecTests.mm */; };
183185
29FDE0C0BA643E3804D8546C /* FSTMemoryLRUGarbageCollectorTests.mm in Sources */ = {isa = PBXBuildFile; fileRef = 5CC9650420A0E9BD00A2D6A1 /* FSTMemoryLRUGarbageCollectorTests.mm */; };
184186
29FE1E36F5A7D70EF0977619 /* FSTMemoryRemoteDocumentCacheTests.mm in Sources */ = {isa = PBXBuildFile; fileRef = 5492E08C2021552B00B64F25 /* FSTMemoryRemoteDocumentCacheTests.mm */; };
187+
2A499CFB2831612A045977CD /* message_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = CE37875365497FFA8687B745 /* message_test.cc */; };
185188
2AAEABFD550255271E3BAC91 /* to_string_apple_test.mm in Sources */ = {isa = PBXBuildFile; fileRef = B68B1E002213A764008977EF /* to_string_apple_test.mm */; };
186189
2ABA80088D70E7A58F95F7D8 /* delayed_constructor_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = D0A6E9136804A41CEC9D55D4 /* delayed_constructor_test.cc */; };
187190
2AD8EE91928AE68DF268BEDA /* limbo_spec_test.json in Resources */ = {isa = PBXBuildFile; fileRef = 54DA129E1F315EE100DD57A1 /* limbo_spec_test.json */; };
188191
2B1E95FAFD350C191B525F3B /* empty_credentials_provider_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = AB38D93620239689000A432D /* empty_credentials_provider_test.cc */; };
189192
2B4021C3E663DDDDD512E961 /* objc_type_traits_apple_test.mm in Sources */ = {isa = PBXBuildFile; fileRef = 2A0CF41BA5AED6049B0BEB2C /* objc_type_traits_apple_test.mm */; };
193+
2B4D0509577E5CE0B0B8CEDF /* message_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = CE37875365497FFA8687B745 /* message_test.cc */; };
190194
2B7764F81BA762BE1D791851 /* objc_class_test_helper.mm in Sources */ = {isa = PBXBuildFile; fileRef = B5748BD89DF96FB1B20272F3 /* objc_class_test_helper.mm */; };
191195
2BBFAD893295881057E6C1FD /* FSTMockDatastore.mm in Sources */ = {isa = PBXBuildFile; fileRef = 5492E02D20213FFC00B64F25 /* FSTMockDatastore.mm */; };
192196
2C5E4D9FDE7615AD0F63909E /* async_testing.cc in Sources */ = {isa = PBXBuildFile; fileRef = 872C92ABD71B12784A1C5520 /* async_testing.cc */; };
@@ -1096,6 +1100,7 @@
10961100
ECED3B60C5718B085AAB14FB /* to_string_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = B696858D2214B53900271095 /* to_string_test.cc */; };
10971101
ED420D8F49DA5C41EEF93913 /* FIRSnapshotMetadataTests.mm in Sources */ = {isa = PBXBuildFile; fileRef = 5492E04D202154AA00B64F25 /* FIRSnapshotMetadataTests.mm */; };
10981102
ED4E2AC80CAF2A8FDDAC3DEE /* field_mask_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = 549CCA5320A36E1F00BCEB75 /* field_mask_test.cc */; };
1103+
ED9DF1EB20025227B38736EC /* message_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = CE37875365497FFA8687B745 /* message_test.cc */; };
10991104
EF1C9EA3F95E18B42751C28B /* FSTLRUGarbageCollectorTests.mm in Sources */ = {isa = PBXBuildFile; fileRef = 5CC9650220A0E93200A2D6A1 /* FSTLRUGarbageCollectorTests.mm */; };
11001105
EF2252BD881DA4FD09223CF1 /* memory_index_manager_test.mm in Sources */ = {isa = PBXBuildFile; fileRef = 73F1F7392210F3D800E1F692 /* memory_index_manager_test.mm */; };
11011106
EF3518F84255BAF3EBD317F6 /* exponential_backoff_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = B6D1B68420E2AB1A00B35856 /* exponential_backoff_test.cc */; };
@@ -1133,6 +1138,7 @@
11331138
FABE084FA7DA6E216A41EE80 /* status_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = 54A0352C20A3B3D7003E0143 /* status_test.cc */; };
11341139
FAE5DA6ED3E1842DC21453EE /* fake_target_metadata_provider.cc in Sources */ = {isa = PBXBuildFile; fileRef = 71140E5D09C6E76F7C71B2FC /* fake_target_metadata_provider.cc */; };
11351140
FB2111D9205822CC8E7368C2 /* FIRDocumentReferenceTests.mm in Sources */ = {isa = PBXBuildFile; fileRef = 5492E049202154AA00B64F25 /* FIRDocumentReferenceTests.mm */; };
1141+
FB3D9E01547436163C456A3C /* message_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = CE37875365497FFA8687B745 /* message_test.cc */; };
11361142
FBBB13329D3B5827C21AE7AB /* reference_set_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = 132E32997D781B896672D30A /* reference_set_test.cc */; };
11371143
FCA48FB54FC50BFDFDA672CD /* array_sorted_map_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = 54EB764C202277B30088B8F3 /* array_sorted_map_test.cc */; };
11381144
FCF8E7F5268F6842C07B69CF /* write.pb.cc in Sources */ = {isa = PBXBuildFile; fileRef = 544129D921C2DDC800EFB9CC /* write.pb.cc */; };
@@ -1507,6 +1513,7 @@
15071513
C8522DE226C467C54E6788D8 /* mutation_test.cc */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; path = mutation_test.cc; sourceTree = "<group>"; };
15081514
CC572A9168BBEF7B83E4BBC5 /* view_snapshot_test.cc */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; path = view_snapshot_test.cc; sourceTree = "<group>"; };
15091515
CD422AF3E4515FB8E9BE67A0 /* equals_tester.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = equals_tester.h; sourceTree = "<group>"; };
1516+
CE37875365497FFA8687B745 /* message_test.cc */ = {isa = PBXFileReference; includeInIndex = 1; name = message_test.cc; path = nanopb/message_test.cc; sourceTree = "<group>"; };
15101517
D0A6E9136804A41CEC9D55D4 /* delayed_constructor_test.cc */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; path = delayed_constructor_test.cc; sourceTree = "<group>"; };
15111518
D3CC3DC5338DCAF43A211155 /* README.md */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = net.daringfireball.markdown; name = README.md; path = ../README.md; sourceTree = "<group>"; };
15121519
D5B2593BCB52957D62F1C9D3 /* perf_spec_test.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = perf_spec_test.json; sourceTree = "<group>"; };
@@ -1892,6 +1899,7 @@
18921899
isa = PBXGroup;
18931900
children = (
18941901
5342CDDB137B4E93E2E85CCA /* byte_string_test.cc */,
1902+
CE37875365497FFA8687B745 /* message_test.cc */,
18951903
2DAA26538D1A93A39F8AC373 /* nanopb_testing.h */,
18961904
BC3C788D290A935C353CEAA1 /* writer_test.cc */,
18971905
);
@@ -3454,6 +3462,7 @@
34543462
DBDC8E997E909804F1B43E92 /* log_test.cc in Sources */,
34553463
12158DFCEE09D24B7988A340 /* maybe_document.pb.cc in Sources */,
34563464
D44DA2F61B854E8771E4E446 /* memory_index_manager_test.mm in Sources */,
3465+
FB3D9E01547436163C456A3C /* message_test.cc in Sources */,
34573466
C5F1E2220E30ED5EAC9ABD9E /* mutation.pb.cc in Sources */,
34583467
1CC9BABDD52B2A1E37E2698D /* mutation_test.cc in Sources */,
34593468
051D3E20184AF195266EF678 /* no_document_test.cc in Sources */,
@@ -3627,6 +3636,7 @@
36273636
12BB9ED1CA98AA52B92F497B /* log_test.cc in Sources */,
36283637
88FD82A1FC5FEC5D56B481D8 /* maybe_document.pb.cc in Sources */,
36293638
01C0A2CF788A93EF2CEB6100 /* memory_index_manager_test.mm in Sources */,
3639+
ED9DF1EB20025227B38736EC /* message_test.cc in Sources */,
36303640
153F3E4E9E3A0174E29550B4 /* mutation.pb.cc in Sources */,
36313641
5E6F9184B271F6D5312412FF /* mutation_test.cc in Sources */,
36323642
FEF55ECFB0CA317B351179AB /* no_document_test.cc in Sources */,
@@ -3811,6 +3821,7 @@
38113821
CAFB1E0ED514FEF4641E3605 /* log_test.cc in Sources */,
38123822
6F511ABFD023AEB81F92DB12 /* maybe_document.pb.cc in Sources */,
38133823
EF2252BD881DA4FD09223CF1 /* memory_index_manager_test.mm in Sources */,
3824+
00F1CB487E8E0DA48F2E8FEC /* message_test.cc in Sources */,
38143825
BBDFE0000C4D7E529E296ED4 /* mutation.pb.cc in Sources */,
38153826
F5A654E92FF6F3FF16B93E6B /* mutation_test.cc in Sources */,
38163827
1E1683C9F65658270745EDCD /* no_document_test.cc in Sources */,
@@ -3995,6 +4006,7 @@
39954006
6B94E0AE1002C5C9EA0F5582 /* log_test.cc in Sources */,
39964007
C19214F5B43AA745A7FC2FC1 /* maybe_document.pb.cc in Sources */,
39974008
70E78AA49D365D31B211CB0B /* memory_index_manager_test.mm in Sources */,
4009+
2A499CFB2831612A045977CD /* message_test.cc in Sources */,
39984010
85D61BDC7FB99B6E0DD3AFCA /* mutation.pb.cc in Sources */,
39994011
795A0E11B3951ACEA2859C8A /* mutation_test.cc in Sources */,
40004012
E9430D3EBDAE12E9016B708F /* no_document_test.cc in Sources */,
@@ -4190,6 +4202,7 @@
41904202
54C2294F1FECABAE007D065B /* log_test.cc in Sources */,
41914203
618BBEA720B89AAC00B5BCE7 /* maybe_document.pb.cc in Sources */,
41924204
73F1F73C2210F3D800E1F692 /* memory_index_manager_test.mm in Sources */,
4205+
2B4D0509577E5CE0B0B8CEDF /* message_test.cc in Sources */,
41934206
618BBEA820B89AAC00B5BCE7 /* mutation.pb.cc in Sources */,
41944207
32F022CB75AEE48CDDAF2982 /* mutation_test.cc in Sources */,
41954208
AB6B908820322E8800CC290A /* no_document_test.cc in Sources */,
@@ -4393,6 +4406,7 @@
43934406
677C833244550767B71DB1BA /* log_test.cc in Sources */,
43944407
12E04A12ABD5533B616D552A /* maybe_document.pb.cc in Sources */,
43954408
F66650439F7B638789EFB810 /* memory_index_manager_test.mm in Sources */,
4409+
26777815544F549DD18D87AF /* message_test.cc in Sources */,
43964410
C393D6984614D8E4D8C336A2 /* mutation.pb.cc in Sources */,
43974411
D18DBCE3FE34BF5F14CF8ABD /* mutation_test.cc in Sources */,
43984412
9073AFB51EA26A818C29131E /* no_document_test.cc in Sources */,

Firestore/Example/Tests/SpecTests/FSTMockDatastore.mm

Lines changed: 14 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,6 @@
2121
#include <queue>
2222
#include <utility>
2323

24-
#import "Firestore/Source/Remote/FSTSerializerBeta.h"
25-
2624
#include "Firestore/core/src/firebase/firestore/auth/credentials_provider.h"
2725
#include "Firestore/core/src/firebase/firestore/auth/empty_credentials_provider.h"
2826
#include "Firestore/core/src/firebase/firestore/core/database_info.h"
@@ -32,6 +30,7 @@
3230
#include "Firestore/core/src/firebase/firestore/remote/connectivity_monitor.h"
3331
#include "Firestore/core/src/firebase/firestore/remote/datastore.h"
3432
#include "Firestore/core/src/firebase/firestore/remote/grpc_connection.h"
33+
#include "Firestore/core/src/firebase/firestore/remote/serializer.h"
3534
#include "Firestore/core/src/firebase/firestore/remote/stream.h"
3635
#include "Firestore/core/src/firebase/firestore/util/async_queue.h"
3736
#include "Firestore/core/src/firebase/firestore/util/log.h"
@@ -69,11 +68,12 @@
6968
public:
7069
MockWatchStream(const std::shared_ptr<AsyncQueue>& worker_queue,
7170
std::shared_ptr<CredentialsProvider> credentials_provider,
72-
FSTSerializerBeta* serializer,
71+
Serializer serializer,
7372
GrpcConnection* grpc_connection,
7473
WatchStreamCallback* callback,
7574
MockDatastore* datastore)
76-
: WatchStream{worker_queue, credentials_provider, serializer, grpc_connection, callback},
75+
: WatchStream{worker_queue, credentials_provider, std::move(serializer), grpc_connection,
76+
callback},
7777
datastore_{datastore},
7878
callback_{callback} {
7979
}
@@ -140,7 +140,7 @@ void WriteWatchChange(const WatchChange& change, SnapshotVersion snap) {
140140

141141
if (!targetChange.target_ids().empty()) {
142142
// If the list of target IDs is not empty, we reset the snapshot version to NONE as
143-
// done in `FSTSerializerBeta.versionFromListenResponse:`.
143+
// done in `Serializer::DecodeVersion:`.
144144
snap = SnapshotVersion::None();
145145
}
146146
}
@@ -159,11 +159,12 @@ void WriteWatchChange(const WatchChange& change, SnapshotVersion snap) {
159159
public:
160160
MockWriteStream(const std::shared_ptr<AsyncQueue>& worker_queue,
161161
std::shared_ptr<CredentialsProvider> credentials_provider,
162-
FSTSerializerBeta* serializer,
162+
Serializer serializer,
163163
GrpcConnection* grpc_connection,
164164
WriteStreamCallback* callback,
165165
MockDatastore* datastore)
166-
: WriteStream{worker_queue, credentials_provider, serializer, grpc_connection, callback},
166+
: WriteStream{worker_queue, credentials_provider, std::move(serializer), grpc_connection,
167+
callback},
167168
datastore_{datastore},
168169
callback_{callback} {
169170
}
@@ -249,19 +250,17 @@ int sent_mutations_count() const {
249250
}
250251

251252
std::shared_ptr<WatchStream> MockDatastore::CreateWatchStream(WatchStreamCallback* callback) {
252-
watch_stream_ = std::make_shared<MockWatchStream>(
253-
worker_queue_, credentials_,
254-
[[FSTSerializerBeta alloc] initWithDatabaseID:database_info_->database_id()],
255-
grpc_connection(), callback, this);
253+
watch_stream_ = std::make_shared<MockWatchStream>(worker_queue_, credentials_,
254+
Serializer{database_info_->database_id()},
255+
grpc_connection(), callback, this);
256256

257257
return watch_stream_;
258258
}
259259

260260
std::shared_ptr<WriteStream> MockDatastore::CreateWriteStream(WriteStreamCallback* callback) {
261-
write_stream_ = std::make_shared<MockWriteStream>(
262-
worker_queue_, credentials_,
263-
[[FSTSerializerBeta alloc] initWithDatabaseID:database_info_->database_id()],
264-
grpc_connection(), callback, this);
261+
write_stream_ = std::make_shared<MockWriteStream>(worker_queue_, credentials_,
262+
Serializer{database_info_->database_id()},
263+
grpc_connection(), callback, this);
265264

266265
return write_stream_;
267266
}

Firestore/Source/API/FIRTransaction.mm

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
#include "Firestore/core/src/firebase/firestore/util/exception.h"
3232
#include "Firestore/core/src/firebase/firestore/util/hard_assert.h"
3333
#include "Firestore/core/src/firebase/firestore/util/status.h"
34+
#include "Firestore/core/src/firebase/firestore/util/statusor.h"
3435

3536
using firebase::firestore::core::ParsedSetData;
3637
using firebase::firestore::core::ParsedUpdateData;
@@ -39,6 +40,7 @@
3940
using firebase::firestore::model::MaybeDocument;
4041
using firebase::firestore::util::MakeNSError;
4142
using firebase::firestore::util::Status;
43+
using firebase::firestore::util::StatusOr;
4244
using firebase::firestore::util::ThrowInvalidArgument;
4345

4446
NS_ASSUME_NONNULL_BEGIN
@@ -119,13 +121,14 @@ - (void)getDocument:(FIRDocumentReference *)document
119121
NSError *_Nullable error))completion {
120122
[self validateReference:document];
121123
_internalTransaction->Lookup(
122-
{document.key}, [self, document, completion](const std::vector<MaybeDocument> &documents,
123-
const Status &status) {
124-
if (!status.ok()) {
125-
completion(nil, MakeNSError(status));
124+
{document.key},
125+
[self, document, completion](const StatusOr<std::vector<MaybeDocument>> &maybe_documents) {
126+
if (!maybe_documents.ok()) {
127+
completion(nil, MakeNSError(maybe_documents.status()));
126128
return;
127129
}
128130

131+
const auto &documents = maybe_documents.ValueOrDie();
129132
HARD_ASSERT(documents.size() == 1, "Mismatch in docs returned from document lookup.");
130133
const MaybeDocument &internalDoc = documents.front();
131134
if (internalDoc.is_no_document()) {

Firestore/core/src/firebase/firestore/core/transaction.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
#include "Firestore/core/src/firebase/firestore/model/precondition.h"
2929
#include "Firestore/core/src/firebase/firestore/model/snapshot_version.h"
3030
#include "Firestore/core/src/firebase/firestore/util/status.h"
31+
#include "Firestore/core/src/firebase/firestore/util/statusor.h"
3132
#include "absl/types/any.h"
3233
#include "absl/types/optional.h"
3334

@@ -46,9 +47,8 @@ class ParsedUpdateData;
4647

4748
class Transaction {
4849
public:
49-
// TODO(varconst): change this to take a single `StatusOr` parameter.
5050
using LookupCallback = std::function<void(
51-
const std::vector<model::MaybeDocument>&, const util::Status&)>;
51+
const util::StatusOr<std::vector<model::MaybeDocument>>&)>;
5252

5353
Transaction() = default;
5454
explicit Transaction(remote::Datastore* transaction);

Firestore/core/src/firebase/firestore/core/transaction.mm

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -83,27 +83,30 @@
8383
Status lookup_error = Status{Error::InvalidArgument,
8484
"Firestore transactions require all reads to "
8585
"be executed before all writes"};
86-
callback({}, lookup_error);
86+
callback(lookup_error);
8787
return;
8888
}
8989

9090
datastore_->LookupDocuments(
91-
keys, [this, callback](const std::vector<MaybeDocument>& documents,
92-
const Status& status) {
93-
if (!status.ok()) {
94-
callback({}, status);
91+
keys, [this, callback](
92+
const StatusOr<std::vector<MaybeDocument>>& maybe_documents) {
93+
if (!maybe_documents.ok()) {
94+
callback(maybe_documents.status());
9595
return;
9696
}
9797

98+
const auto& documents = maybe_documents.ValueOrDie();
9899
for (const MaybeDocument& doc : documents) {
99100
Status record_error = RecordVersion(doc);
100101
if (!record_error.ok()) {
101-
callback({}, record_error);
102+
callback(record_error);
102103
return;
103104
}
104105
}
105106

106-
callback(documents, Status::OK());
107+
// TODO(varconst): see if `maybe_documents` can be moved into the
108+
// callback.
109+
callback(maybe_documents);
107110
});
108111
}
109112

Firestore/core/src/firebase/firestore/local/local_serializer.h

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -62,15 +62,6 @@ class LocalSerializer {
6262
: rpc_serializer_(rpc_serializer) {
6363
}
6464

65-
/**
66-
* Release memory allocated by the Encode* methods that return protos.
67-
*
68-
* This essentially wraps calls to nanopb's pb_release() method.
69-
*/
70-
static void FreeNanopbMessage(const pb_field_t fields[], void* dest_struct) {
71-
remote::Serializer::FreeNanopbMessage(fields, dest_struct);
72-
}
73-
7465
/**
7566
* @brief Encodes a MaybeDocument model to the equivalent nanopb proto for
7667
* local storage.

Firestore/core/src/firebase/firestore/nanopb/CMakeLists.txt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@ cc_library(
1717
SOURCES
1818
byte_string.cc
1919
byte_string.h
20+
message.cc
21+
message.h
2022
nanopb_util.cc
2123
nanopb_util.h
2224
reader.cc
@@ -27,8 +29,10 @@ cc_library(
2729
# TODO(b/111328563) Force nanopb first to work around ODR violations
2830
protobuf-nanopb-static
2931

32+
firebase_firestore_model
3033
firebase_firestore_util
3134
firebase_firestore_protos_nanopb
35+
grpc++
3236
)
3337

3438
target_compile_definitions(

0 commit comments

Comments
 (0)