aboutsummaryrefslogtreecommitdiffhomepage
path: root/Firestore/Source/Remote/FSTSerializerBeta.mm
diff options
context:
space:
mode:
authorGravatar zxu <zxu@google.com>2018-02-06 13:51:11 -0500
committerGravatar GitHub <noreply@github.com>2018-02-06 13:51:11 -0500
commita441190635d494f128cf02e07566ae2003af4e08 (patch)
tree618e6b0ecdb5d243f6e97f319f98f09dc9ca0a7e /Firestore/Source/Remote/FSTSerializerBeta.mm
parent7cac9dc47a8c6b7321ebf5fc13fa7140e784c8ca (diff)
Implement Firestore DatabaseInfo and port both Database{Id,Info} C++ to the iOS code (#738)
* implement Firestore DatabaseInfo in C++ * temporary stash changes; blocking on the massive renaming of .m to .mm * add database_info_test to project * finish port DatabaseId and fix style, modular fixing DatabaseInfo * port DatabaseInfo * remove FSTDatabase{ID,Info} and their tests from project * fix unit test * use namespace alias * use namespace alias, leftover * address more changes * refactoring to use raw pointer instead of value for property * address changes * remove self-> * fix style * remove the name suffix Alloc * fix a bug
Diffstat (limited to 'Firestore/Source/Remote/FSTSerializerBeta.mm')
-rw-r--r--Firestore/Source/Remote/FSTSerializerBeta.mm45
1 files changed, 33 insertions, 12 deletions
diff --git a/Firestore/Source/Remote/FSTSerializerBeta.mm b/Firestore/Source/Remote/FSTSerializerBeta.mm
index cf200ca..35ab637 100644
--- a/Firestore/Source/Remote/FSTSerializerBeta.mm
+++ b/Firestore/Source/Remote/FSTSerializerBeta.mm
@@ -34,7 +34,6 @@
#import "Firestore/Source/Core/FSTSnapshotVersion.h"
#import "Firestore/Source/Core/FSTTimestamp.h"
#import "Firestore/Source/Local/FSTQueryData.h"
-#import "Firestore/Source/Model/FSTDatabaseID.h"
#import "Firestore/Source/Model/FSTDocument.h"
#import "Firestore/Source/Model/FSTDocumentKey.h"
#import "Firestore/Source/Model/FSTFieldValue.h"
@@ -45,15 +44,22 @@
#import "Firestore/Source/Remote/FSTWatchChange.h"
#import "Firestore/Source/Util/FSTAssert.h"
+#include "Firestore/core/src/firebase/firestore/model/database_id.h"
+#include "Firestore/core/src/firebase/firestore/util/string_apple.h"
+
+namespace util = firebase::firestore::util;
+using firebase::firestore::model::DatabaseId;
+
NS_ASSUME_NONNULL_BEGIN
@interface FSTSerializerBeta ()
-@property(nonatomic, strong, readonly) FSTDatabaseID *databaseID;
+// Does not own this DatabaseId.
+@property(nonatomic, assign, readonly) const DatabaseId *databaseID;
@end
@implementation FSTSerializerBeta
-- (instancetype)initWithDatabaseID:(FSTDatabaseID *)databaseID {
+- (instancetype)initWithDatabaseID:(const DatabaseId *)databaseID {
self = [super init];
if (self) {
_databaseID = databaseID;
@@ -103,14 +109,16 @@ NS_ASSUME_NONNULL_BEGIN
- (FSTDocumentKey *)decodedDocumentKey:(NSString *)name {
FSTResourcePath *path = [self decodedResourcePathWithDatabaseID:name];
- FSTAssert([[path segmentAtIndex:1] isEqualToString:self.databaseID.projectID],
+ FSTAssert([[path segmentAtIndex:1]
+ isEqualToString:util::WrapNSStringNoCopy(self.databaseID->project_id())],
@"Tried to deserialize key from different project.");
- FSTAssert([[path segmentAtIndex:3] isEqualToString:self.databaseID.databaseID],
+ FSTAssert([[path segmentAtIndex:3]
+ isEqualToString:util::WrapNSStringNoCopy(self.databaseID->database_id())],
@"Tried to deserialize key from different datbase.");
return [FSTDocumentKey keyWithPath:[self localResourcePathForQualifiedResourcePath:path]];
}
-- (NSString *)encodedResourcePathForDatabaseID:(FSTDatabaseID *)databaseID
+- (NSString *)encodedResourcePathForDatabaseID:(const DatabaseId *)databaseID
path:(FSTResourcePath *)path {
return [[[[self encodedResourcePathForDatabaseID:databaseID] pathByAppendingSegment:@"documents"]
pathByAppendingPath:path] canonicalString];
@@ -139,9 +147,11 @@ NS_ASSUME_NONNULL_BEGIN
}
}
-- (FSTResourcePath *)encodedResourcePathForDatabaseID:(FSTDatabaseID *)databaseID {
- return [FSTResourcePath
- pathWithSegments:@[ @"projects", databaseID.projectID, @"databases", databaseID.databaseID ]];
+- (FSTResourcePath *)encodedResourcePathForDatabaseID:(const DatabaseId *)databaseID {
+ return [FSTResourcePath pathWithSegments:@[
+ @"projects", util::WrapNSStringNoCopy(databaseID->project_id()), @"databases",
+ util::WrapNSStringNoCopy(databaseID->database_id())
+ ]];
}
- (FSTResourcePath *)localResourcePathForQualifiedResourcePath:(FSTResourcePath *)resourceName {
@@ -295,8 +305,13 @@ NS_ASSUME_NONNULL_BEGIN
return result;
}
-- (GCFSValue *)encodedReferenceValueForDatabaseID:(FSTDatabaseID *)databaseID
+- (GCFSValue *)encodedReferenceValueForDatabaseID:(const DatabaseId *)databaseID
key:(FSTDocumentKey *)key {
+ FSTAssert(*databaseID == *self.databaseID, @"Database %@:%@ cannot encode reference from %@:%@",
+ util::WrapNSStringNoCopy(self.databaseID->project_id()),
+ util::WrapNSStringNoCopy(self.databaseID->database_id()),
+ util::WrapNSStringNoCopy(databaseID->project_id()),
+ util::WrapNSStringNoCopy(databaseID->database_id()));
GCFSValue *result = [GCFSValue message];
result.referenceValue = [self encodedResourcePathForDatabaseID:databaseID path:key.path];
return result;
@@ -306,10 +321,16 @@ NS_ASSUME_NONNULL_BEGIN
FSTResourcePath *path = [self decodedResourcePathWithDatabaseID:resourceName];
NSString *project = [path segmentAtIndex:1];
NSString *database = [path segmentAtIndex:3];
- FSTDatabaseID *databaseID = [FSTDatabaseID databaseIDWithProject:project database:database];
FSTDocumentKey *key =
[FSTDocumentKey keyWithPath:[self localResourcePathForQualifiedResourcePath:path]];
- return [FSTReferenceValue referenceValue:key databaseID:databaseID];
+
+ const DatabaseId database_id(util::MakeStringView(project), util::MakeStringView(database));
+ FSTAssert(database_id == *self.databaseID, @"Database %@:%@ cannot encode reference from %@:%@",
+ util::WrapNSStringNoCopy(self.databaseID->project_id()),
+ util::WrapNSStringNoCopy(self.databaseID->database_id()),
+ util::WrapNSStringNoCopy(database_id.project_id()),
+ util::WrapNSStringNoCopy(database_id.database_id()));
+ return [FSTReferenceValue referenceValue:key databaseID:self.databaseID];
}
- (GCFSArrayValue *)encodedArrayValue:(FSTArrayValue *)arrayValue {