aboutsummaryrefslogtreecommitdiffhomepage
path: root/Firestore/Source/Remote
diff options
context:
space:
mode:
authorGravatar zxu <zxu@google.com>2018-04-12 21:32:19 -0400
committerGravatar GitHub <noreply@github.com>2018-04-12 21:32:19 -0400
commit2ceea9b66eb8ea516702e1ef409e801fec068682 (patch)
tree31de20fc11306df23b41f373c3768c03f2185359 /Firestore/Source/Remote
parentac969c721a129e888177756fa2a6ae52af0dd04a (diff)
Port `Precondition` to C++ (#1040)
* port FieldMask to C++ * address changes * address changes * fix test * address change * Port transform operations (FSTTransformOperation, FSTServerTimestampTransform) to C++ * address changes * address changes * address changes * implement `FieldTransform` in C++ * port `FieldTransform` * make `fieldTransforms` shared inside `context` * Implement Precondition in C++ w/o test yet * add unit test for `Precondition` * port `Precondition` * address changes * address changes * fix bugs for integration test * address changes * fix lint * address changes * address changes
Diffstat (limited to 'Firestore/Source/Remote')
-rw-r--r--Firestore/Source/Remote/FSTSerializerBeta.mm37
1 files changed, 19 insertions, 18 deletions
diff --git a/Firestore/Source/Remote/FSTSerializerBeta.mm b/Firestore/Source/Remote/FSTSerializerBeta.mm
index 1d9ad30..c8b0fa4 100644
--- a/Firestore/Source/Remote/FSTSerializerBeta.mm
+++ b/Firestore/Source/Remote/FSTSerializerBeta.mm
@@ -50,6 +50,7 @@
#include "Firestore/core/src/firebase/firestore/model/field_mask.h"
#include "Firestore/core/src/firebase/firestore/model/field_path.h"
#include "Firestore/core/src/firebase/firestore/model/field_transform.h"
+#include "Firestore/core/src/firebase/firestore/model/precondition.h"
#include "Firestore/core/src/firebase/firestore/model/resource_path.h"
#include "Firestore/core/src/firebase/firestore/model/transform_operations.h"
#include "Firestore/core/src/firebase/firestore/util/string_apple.h"
@@ -61,8 +62,10 @@ using firebase::firestore::model::DocumentKey;
using firebase::firestore::model::FieldMask;
using firebase::firestore::model::FieldPath;
using firebase::firestore::model::FieldTransform;
+using firebase::firestore::model::Precondition;
using firebase::firestore::model::ResourcePath;
using firebase::firestore::model::ServerTimestampTransform;
+using firebase::firestore::model::SnapshotVersion;
using firebase::firestore::model::TransformOperation;
NS_ASSUME_NONNULL_BEGIN
@@ -475,7 +478,7 @@ NS_ASSUME_NONNULL_BEGIN
FSTFail(@"Unknown mutation type %@", NSStringFromClass(mutationClass));
}
- if (!mutation.precondition.isNone) {
+ if (!mutation.precondition.IsNone()) {
proto.currentDocument = [self encodedPrecondition:mutation.precondition];
}
@@ -483,9 +486,9 @@ NS_ASSUME_NONNULL_BEGIN
}
- (FSTMutation *)decodedMutation:(GCFSWrite *)mutation {
- FSTPrecondition *precondition = [mutation hasCurrentDocument]
- ? [self decodedPrecondition:mutation.currentDocument]
- : [FSTPrecondition none];
+ Precondition precondition = [mutation hasCurrentDocument]
+ ? [self decodedPrecondition:mutation.currentDocument]
+ : Precondition::None();
switch (mutation.operationOneOfCase) {
case GCFSWrite_Operation_OneOfCase_Update:
@@ -505,8 +508,7 @@ NS_ASSUME_NONNULL_BEGIN
precondition:precondition];
case GCFSWrite_Operation_OneOfCase_Transform: {
- FSTPreconditionExists exists = precondition.exists;
- FSTAssert(exists == FSTPreconditionExistsYes,
+ FSTAssert(precondition == Precondition::Exists(true),
@"Transforms must have precondition \"exists == true\"");
return [[FSTTransformMutation alloc]
@@ -520,30 +522,29 @@ NS_ASSUME_NONNULL_BEGIN
}
}
-- (GCFSPrecondition *)encodedPrecondition:(FSTPrecondition *)precondition {
- FSTAssert(!precondition.isNone, @"Can't serialize an empty precondition");
+- (GCFSPrecondition *)encodedPrecondition:(const Precondition &)precondition {
+ FSTAssert(!precondition.IsNone(), @"Can't serialize an empty precondition");
GCFSPrecondition *message = [GCFSPrecondition message];
- if (precondition.updateTime) {
- message.updateTime = [self encodedVersion:precondition.updateTime];
- } else if (precondition.exists != FSTPreconditionExistsNotSet) {
- message.exists = precondition.exists == FSTPreconditionExistsYes;
+ if (precondition.type() == Precondition::Type::UpdateTime) {
+ message.updateTime = [self encodedVersion:precondition.update_time()];
+ } else if (precondition.type() == Precondition::Type::Exists) {
+ message.exists = precondition == Precondition::Exists(true);
} else {
- FSTFail(@"Unknown precondition: %@", precondition);
+ FSTFail(@"Unknown precondition: %@", precondition.description());
}
return message;
}
-- (FSTPrecondition *)decodedPrecondition:(GCFSPrecondition *)precondition {
+- (Precondition)decodedPrecondition:(GCFSPrecondition *)precondition {
switch (precondition.conditionTypeOneOfCase) {
case GCFSPrecondition_ConditionType_OneOfCase_GPBUnsetOneOfCase:
- return [FSTPrecondition none];
+ return Precondition::None();
case GCFSPrecondition_ConditionType_OneOfCase_Exists:
- return [FSTPrecondition preconditionWithExists:precondition.exists];
+ return Precondition::Exists(precondition.exists);
case GCFSPrecondition_ConditionType_OneOfCase_UpdateTime:
- return [FSTPrecondition
- preconditionWithUpdateTime:[self decodedVersion:precondition.updateTime]];
+ return Precondition::UpdateTime([self decodedVersion:precondition.updateTime]);
default:
FSTFail(@"Unrecognized Precondition one-of case %@", precondition);