aboutsummaryrefslogtreecommitdiffhomepage
path: root/Firestore/core/src/firebase/firestore/remote
diff options
context:
space:
mode:
authorGravatar rsgowman <rgowman@google.com>2018-06-21 13:59:56 -0400
committerGravatar GitHub <noreply@github.com>2018-06-21 13:59:56 -0400
commitb271a6e25144be8cf872d028bb82336b5da2074c (patch)
treefba5841dcf2ad065a32c7fc992c81a090e22675b /Firestore/core/src/firebase/firestore/remote
parent11abb976702341e0b67c1030a3f23f57c8534517 (diff)
Initial creation of the local serializer. (#1415)
Added a single, basic test as a motivator.
Diffstat (limited to 'Firestore/core/src/firebase/firestore/remote')
-rw-r--r--Firestore/core/src/firebase/firestore/remote/serializer.cc55
-rw-r--r--Firestore/core/src/firebase/firestore/remote/serializer.h17
2 files changed, 53 insertions, 19 deletions
diff --git a/Firestore/core/src/firebase/firestore/remote/serializer.cc b/Firestore/core/src/firebase/firestore/remote/serializer.cc
index 19a068b..fc8b312 100644
--- a/Firestore/core/src/firebase/firestore/remote/serializer.cc
+++ b/Firestore/core/src/firebase/firestore/remote/serializer.cc
@@ -63,11 +63,11 @@ using firebase::firestore::util::StatusOr;
namespace {
void EncodeMapValue(Writer* writer, const ObjectValue& object_value);
-void EncodeObjectMap(Writer* writer,
- const ObjectValue::Map& object_value_map,
- uint32_t map_tag,
- uint32_t key_tag,
- uint32_t value_tag);
+void EncodeObjectMapImpl(Writer* writer,
+ const ObjectValue::Map& object_value_map,
+ uint32_t map_tag,
+ uint32_t key_tag,
+ uint32_t value_tag);
ObjectValue::Map DecodeMapValue(Reader* reader);
@@ -336,11 +336,11 @@ ObjectValue::Map::value_type DecodeDocumentFieldsEntry(Reader* reader) {
google_firestore_v1beta1_Document_FieldsEntry_value_tag);
}
-void EncodeObjectMap(Writer* writer,
- const ObjectValue::Map& object_value_map,
- uint32_t map_tag,
- uint32_t key_tag,
- uint32_t value_tag) {
+void EncodeObjectMapImpl(Writer* writer,
+ const ObjectValue::Map& object_value_map,
+ uint32_t map_tag,
+ uint32_t key_tag,
+ uint32_t value_tag) {
// Write each FieldsEntry (i.e. key-value pair.)
for (const auto& kv : object_value_map) {
writer->WriteTag({PB_WT_STRING, map_tag});
@@ -351,10 +351,10 @@ void EncodeObjectMap(Writer* writer,
}
void EncodeMapValue(Writer* writer, const ObjectValue& object_value) {
- EncodeObjectMap(writer, object_value.internal_value,
- google_firestore_v1beta1_MapValue_fields_tag,
- google_firestore_v1beta1_MapValue_FieldsEntry_key_tag,
- google_firestore_v1beta1_MapValue_FieldsEntry_value_tag);
+ EncodeObjectMapImpl(writer, object_value.internal_value,
+ google_firestore_v1beta1_MapValue_fields_tag,
+ google_firestore_v1beta1_MapValue_FieldsEntry_key_tag,
+ google_firestore_v1beta1_MapValue_FieldsEntry_value_tag);
}
ObjectValue::Map DecodeMapValue(Reader* reader) {
@@ -499,10 +499,11 @@ void Serializer::EncodeDocument(Writer* writer,
// Encode Document.fields (unless it's empty)
if (!object_value.internal_value.empty()) {
- EncodeObjectMap(writer, object_value.internal_value,
- google_firestore_v1beta1_Document_fields_tag,
- google_firestore_v1beta1_Document_FieldsEntry_key_tag,
- google_firestore_v1beta1_Document_FieldsEntry_value_tag);
+ EncodeObjectMapImpl(
+ writer, object_value.internal_value,
+ google_firestore_v1beta1_Document_fields_tag,
+ google_firestore_v1beta1_Document_FieldsEntry_key_tag,
+ google_firestore_v1beta1_Document_FieldsEntry_value_tag);
}
// Skip Document.create_time and Document.update_time, since they're
@@ -667,6 +668,24 @@ std::unique_ptr<Document> Serializer::DecodeDocument(Reader* reader) const {
/*has_local_modifications=*/false);
}
+void Serializer::EncodeObjectMap(
+ nanopb::Writer* writer,
+ const model::ObjectValue::Map& object_value_map,
+ uint32_t map_tag,
+ uint32_t key_tag,
+ uint32_t value_tag) {
+ // TODO(rsgowman): Move the implementation of EncodeObjectMapImpl here and
+ // eliminate that function. The only reason I'm (temporarily) keeping it, is
+ // that performing that refactoring now will cause a cascade of things that
+ // need to move into the local serializer class (as private functions).
+ EncodeObjectMapImpl(writer, object_value_map, map_tag, key_tag, value_tag);
+}
+
+void Serializer::EncodeVersion(nanopb::Writer* writer,
+ const model::SnapshotVersion& version) {
+ EncodeTimestamp(writer, version.timestamp());
+}
+
} // namespace remote
} // namespace firestore
} // namespace firebase
diff --git a/Firestore/core/src/firebase/firestore/remote/serializer.h b/Firestore/core/src/firebase/firestore/remote/serializer.h
index 379069c..3b72693 100644
--- a/Firestore/core/src/firebase/firestore/remote/serializer.h
+++ b/Firestore/core/src/firebase/firestore/remote/serializer.h
@@ -38,6 +38,11 @@
namespace firebase {
namespace firestore {
+
+namespace local {
+class LocalSerializer;
+}
+
namespace remote {
/**
@@ -158,13 +163,23 @@ class Serializer {
return DecodeMaybeDocument(bytes.data(), bytes.size());
}
+ std::unique_ptr<model::Document> DecodeDocument(nanopb::Reader* reader) const;
+
+ static void EncodeObjectMap(nanopb::Writer* writer,
+ const model::ObjectValue::Map& object_value_map,
+ uint32_t map_tag,
+ uint32_t key_tag,
+ uint32_t value_tag);
+
+ static void EncodeVersion(nanopb::Writer* writer,
+ const model::SnapshotVersion& version);
+
private:
void EncodeDocument(nanopb::Writer* writer,
const model::DocumentKey& key,
const model::ObjectValue& object_value) const;
std::unique_ptr<model::MaybeDocument> DecodeBatchGetDocumentsResponse(
nanopb::Reader* reader) const;
- std::unique_ptr<model::Document> DecodeDocument(nanopb::Reader* reader) const;
const firebase::firestore::model::DatabaseId& database_id_;
};