diff options
author | zxu <zxu@google.com> | 2018-04-12 21:32:19 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-04-12 21:32:19 -0400 |
commit | 2ceea9b66eb8ea516702e1ef409e801fec068682 (patch) | |
tree | 31de20fc11306df23b41f373c3768c03f2185359 /Firestore/Source/Remote | |
parent | ac969c721a129e888177756fa2a6ae52af0dd04a (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.mm | 37 |
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); |