FSTDatabaseID.m 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. /*
  2. * Copyright 2017 Google
  3. *
  4. * Licensed under the Apache License, Version 2.0 (the "License");
  5. * you may not use this file except in compliance with the License.
  6. * You may obtain a copy of the License at
  7. *
  8. * http://www.apache.org/licenses/LICENSE-2.0
  9. *
  10. * Unless required by applicable law or agreed to in writing, software
  11. * distributed under the License is distributed on an "AS IS" BASIS,
  12. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  13. * See the License for the specific language governing permissions and
  14. * limitations under the License.
  15. */
  16. #import "Firestore/Source/Model/FSTDatabaseID.h"
  17. #import "Firestore/Source/Util/FSTAssert.h"
  18. NS_ASSUME_NONNULL_BEGIN
  19. /** The default name for "unset" database ID in resource names. */
  20. NSString *const kDefaultDatabaseID = @"(default)";
  21. #pragma mark - FSTDatabaseID
  22. @implementation FSTDatabaseID
  23. + (instancetype)databaseIDWithProject:(NSString *)projectID database:(NSString *)databaseID {
  24. return [[FSTDatabaseID alloc] initWithProject:projectID database:databaseID];
  25. }
  26. /**
  27. * Designated initializer.
  28. *
  29. * @param projectID The project for the database.
  30. * @param databaseID The database in the datastore.
  31. */
  32. - (instancetype)initWithProject:(NSString *)projectID database:(NSString *)databaseID {
  33. if (self = [super init]) {
  34. FSTAssert(databaseID, @"databaseID cannot be nil");
  35. _projectID = [projectID copy];
  36. _databaseID = [databaseID copy];
  37. }
  38. return self;
  39. }
  40. - (BOOL)isEqual:(id)other {
  41. if (other == self) return YES;
  42. if (!other || ![[other class] isEqual:[self class]]) return NO;
  43. return [self isEqualToDatabaseId:other];
  44. }
  45. - (NSUInteger)hash {
  46. NSUInteger hash = [self.projectID hash];
  47. hash = hash * 31u + [self.databaseID hash];
  48. return hash;
  49. }
  50. - (NSString *)description {
  51. return [NSString
  52. stringWithFormat:@"<FSTDatabaseID: project:%@ database:%@>", self.projectID, self.databaseID];
  53. }
  54. - (NSComparisonResult)compare:(FSTDatabaseID *)other {
  55. NSComparisonResult cmp = [self.projectID compare:other.projectID];
  56. return cmp == NSOrderedSame ? [self.databaseID compare:other.databaseID] : cmp;
  57. }
  58. - (BOOL)isDefaultDatabase {
  59. return [self.databaseID isEqualToString:kDefaultDatabaseID];
  60. }
  61. - (BOOL)isEqualToDatabaseId:(FSTDatabaseID *)databaseID {
  62. if (self == databaseID) return YES;
  63. if (databaseID == nil) return NO;
  64. if (self.projectID != databaseID.projectID &&
  65. ![self.projectID isEqualToString:databaseID.projectID])
  66. return NO;
  67. if (self.databaseID != databaseID.databaseID &&
  68. ![self.databaseID isEqualToString:databaseID.databaseID])
  69. return NO;
  70. return YES;
  71. }
  72. @end
  73. NS_ASSUME_NONNULL_END