diff options
author | zxu <zxu@google.com> | 2018-02-06 13:51:11 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-02-06 13:51:11 -0500 |
commit | a441190635d494f128cf02e07566ae2003af4e08 (patch) | |
tree | 618e6b0ecdb5d243f6e97f319f98f09dc9ca0a7e /Firestore/Source/Remote/FSTSerializerBeta.mm | |
parent | 7cac9dc47a8c6b7321ebf5fc13fa7140e784c8ca (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.mm | 45 |
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 { |