Skip to content

Commit dcdfd5f

Browse files
committed
Revert "Merge pull request #273 from agarmash/remove-custom-result-type"
This reverts commit 43ab355, reversing changes made to 87bf5e0.
1 parent db09aa3 commit dcdfd5f

File tree

5 files changed

+51
-27
lines changed

5 files changed

+51
-27
lines changed

Cache.xcodeproj/project.pbxproj

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,9 @@
101101
D28A1D241F6FFEF60030DF81 /* ObjectConverterTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = D285143E1F6FFE1F00C674D1 /* ObjectConverterTests.swift */; };
102102
D28C9BAC1F67ECD400C180C1 /* TestHelper+iOS.swift in Sources */ = {isa = PBXBuildFile; fileRef = D5291CDF1C28374800B702C9 /* TestHelper+iOS.swift */; };
103103
D28C9BAF1F67EF8300C180C1 /* UIImage+ExtensionsTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = D5291DA01C28405900B702C9 /* UIImage+ExtensionsTests.swift */; };
104+
D292DAFD1F6A970B0060F614 /* CacheResult.swift in Sources */ = {isa = PBXBuildFile; fileRef = D292DAFC1F6A970B0060F614 /* CacheResult.swift */; };
105+
D292DAFE1F6A970B0060F614 /* CacheResult.swift in Sources */ = {isa = PBXBuildFile; fileRef = D292DAFC1F6A970B0060F614 /* CacheResult.swift */; };
106+
D292DAFF1F6A970B0060F614 /* CacheResult.swift in Sources */ = {isa = PBXBuildFile; fileRef = D292DAFC1F6A970B0060F614 /* CacheResult.swift */; };
104107
D2CF981E1F69427C00CE8F68 /* TestCase+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = D2CF981B1F69427C00CE8F68 /* TestCase+Extensions.swift */; };
105108
D2CF981F1F69427C00CE8F68 /* TestCase+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = D2CF981B1F69427C00CE8F68 /* TestCase+Extensions.swift */; };
106109
D2CF98201F69427C00CE8F68 /* TestCase+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = D2CF981B1F69427C00CE8F68 /* TestCase+Extensions.swift */; };
@@ -203,6 +206,7 @@
203206
D27014A420D129EB003B45C7 /* TransformerFactory.swift */ = {isa = PBXFileReference; indentWidth = 4; lastKnownFileType = sourcecode.swift; path = TransformerFactory.swift; sourceTree = "<group>"; tabWidth = 4; };
204207
D285143E1F6FFE1F00C674D1 /* ObjectConverterTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ObjectConverterTests.swift; sourceTree = "<group>"; };
205208
D28897041F8B79B300C61DEE /* JSONDecoder+Extensions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "JSONDecoder+Extensions.swift"; sourceTree = "<group>"; };
209+
D292DAFC1F6A970B0060F614 /* CacheResult.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CacheResult.swift; sourceTree = "<group>"; };
206210
D292DB001F6AA06B0060F614 /* SyncStorageTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SyncStorageTests.swift; sourceTree = "<group>"; };
207211
D292DB031F6AA0730060F614 /* AsyncStorageTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AsyncStorageTests.swift; sourceTree = "<group>"; };
208212
D2CF981B1F69427C00CE8F68 /* TestCase+Extensions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "TestCase+Extensions.swift"; sourceTree = "<group>"; };
@@ -351,6 +355,7 @@
351355
D2CF98571F694FFA00CE8F68 /* ImageWrapper.swift */,
352356
D2CF98591F694FFA00CE8F68 /* StorageError.swift */,
353357
D2CF98861F695B8F00CE8F68 /* Types.swift */,
358+
D292DAFC1F6A970B0060F614 /* CacheResult.swift */,
354359
D2D4CC151FA3145000E4A2D5 /* MD5.swift */,
355360
D2D4CC1F1FA3411300E4A2D5 /* JSONDictionaryWrapper.swift */,
356361
D2D4CC231FA3426B00E4A2D5 /* JSONArrayWrapper.swift */,
@@ -798,6 +803,7 @@
798803
D27014A720D129EB003B45C7 /* TransformerFactory.swift in Sources */,
799804
D270147E20D107DA003B45C7 /* SyncStorage.swift in Sources */,
800805
2292AB7D252A14520031F3B9 /* URL+Extensions.swift in Sources */,
806+
D292DAFF1F6A970B0060F614 /* CacheResult.swift in Sources */,
801807
D21B669A1F6A724300125DE1 /* Date+Extensions.swift in Sources */,
802808
0E79164C250E2AA500A71666 /* Hasher+constantAccrossExecutions.swift in Sources */,
803809
D21B66891F6A723C00125DE1 /* ImageWrapper.swift in Sources */,
@@ -887,6 +893,7 @@
887893
D27014A620D129EB003B45C7 /* TransformerFactory.swift in Sources */,
888894
D270147D20D107DA003B45C7 /* SyncStorage.swift in Sources */,
889895
2292AB7C252A14520031F3B9 /* URL+Extensions.swift in Sources */,
896+
D292DAFE1F6A970B0060F614 /* CacheResult.swift in Sources */,
890897
D21B66991F6A724200125DE1 /* Date+Extensions.swift in Sources */,
891898
0E79164B250E2AA500A71666 /* Hasher+constantAccrossExecutions.swift in Sources */,
892899
D21B66801F6A723C00125DE1 /* ImageWrapper.swift in Sources */,
@@ -938,6 +945,7 @@
938945
D270148C20D113EA003B45C7 /* Optional+Extension.swift in Sources */,
939946
D2CF98601F694FFA00CE8F68 /* DiskConfig.swift in Sources */,
940947
D270147020D1018A003B45C7 /* Transformer.swift in Sources */,
948+
D292DAFD1F6A970B0060F614 /* CacheResult.swift in Sources */,
941949
D27014A520D129EB003B45C7 /* TransformerFactory.swift in Sources */,
942950
D2D4CC241FA3426B00E4A2D5 /* JSONArrayWrapper.swift in Sources */,
943951
2292AB7B252A14520031F3B9 /* URL+Extensions.swift in Sources */,
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
import Foundation
2+
3+
/// Used for callback in async operations.
4+
public enum CacheResult<T> {
5+
case value(T)
6+
case error(Error)
7+
8+
public func map<U>(_ transform: (T) -> U) -> CacheResult<U> {
9+
switch self {
10+
case .value(let value):
11+
return CacheResult<U>.value(transform(value))
12+
case .error(let error):
13+
return CacheResult<U>.error(error)
14+
}
15+
}
16+
}

Source/Shared/Storage/AsyncStorage.swift

Lines changed: 24 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -14,34 +14,34 @@ public class AsyncStorage<Key: Hashable, Value> {
1414
}
1515

1616
extension AsyncStorage {
17-
public func entry(forKey key: Key, completion: @escaping (Result<Entry<Value>, Error>) -> Void) {
17+
public func entry(forKey key: Key, completion: @escaping (CacheResult<Entry<Value>>) -> Void) {
1818
serialQueue.async { [weak self] in
1919
guard let `self` = self else {
20-
completion(.failure(StorageError.deallocated))
20+
completion(CacheResult.error(StorageError.deallocated))
2121
return
2222
}
2323

2424
do {
2525
let anEntry = try self.innerStorage.entry(forKey: key)
26-
completion(.success(anEntry))
26+
completion(CacheResult.value(anEntry))
2727
} catch {
28-
completion(.failure(error))
28+
completion(CacheResult.error(error))
2929
}
3030
}
3131
}
3232

33-
public func removeObject(forKey key: Key, completion: @escaping (Result<(), Error>) -> Void) {
33+
public func removeObject(forKey key: Key, completion: @escaping (CacheResult<()>) -> Void) {
3434
serialQueue.async { [weak self] in
3535
guard let `self` = self else {
36-
completion(.failure(StorageError.deallocated))
36+
completion(CacheResult.error(StorageError.deallocated))
3737
return
3838
}
3939

4040
do {
4141
try self.innerStorage.removeObject(forKey: key)
42-
completion(.success(()))
42+
completion(CacheResult.value(()))
4343
} catch {
44-
completion(.failure(error))
44+
completion(CacheResult.error(error))
4545
}
4646
}
4747
}
@@ -50,56 +50,56 @@ extension AsyncStorage {
5050
_ object: Value,
5151
forKey key: Key,
5252
expiry: Expiry? = nil,
53-
completion: @escaping (Result<(), Error>) -> Void) {
53+
completion: @escaping (CacheResult<()>) -> Void) {
5454
serialQueue.async { [weak self] in
5555
guard let `self` = self else {
56-
completion(.failure(StorageError.deallocated))
56+
completion(CacheResult.error(StorageError.deallocated))
5757
return
5858
}
5959

6060
do {
6161
try self.innerStorage.setObject(object, forKey: key, expiry: expiry)
62-
completion(.success(()))
62+
completion(CacheResult.value(()))
6363
} catch {
64-
completion(.failure(error))
64+
completion(CacheResult.error(error))
6565
}
6666
}
6767
}
6868

69-
public func removeAll(completion: @escaping (Result<(), Error>) -> Void) {
69+
public func removeAll(completion: @escaping (CacheResult<()>) -> Void) {
7070
serialQueue.async { [weak self] in
7171
guard let `self` = self else {
72-
completion(.failure(StorageError.deallocated))
72+
completion(CacheResult.error(StorageError.deallocated))
7373
return
7474
}
7575

7676
do {
7777
try self.innerStorage.removeAll()
78-
completion(.success(()))
78+
completion(CacheResult.value(()))
7979
} catch {
80-
completion(.failure(error))
80+
completion(CacheResult.error(error))
8181
}
8282
}
8383
}
8484

85-
public func removeExpiredObjects(completion: @escaping (Result<(), Error>) -> Void) {
85+
public func removeExpiredObjects(completion: @escaping (CacheResult<()>) -> Void) {
8686
serialQueue.async { [weak self] in
8787
guard let `self` = self else {
88-
completion(.failure(StorageError.deallocated))
88+
completion(CacheResult.error(StorageError.deallocated))
8989
return
9090
}
9191

9292
do {
9393
try self.innerStorage.removeExpiredObjects()
94-
completion(.success(()))
94+
completion(CacheResult.value(()))
9595
} catch {
96-
completion(.failure(error))
96+
completion(CacheResult.error(error))
9797
}
9898
}
9999
}
100100

101-
public func object(forKey key: Key, completion: @escaping (Result<Value, Error>) -> Void) {
102-
entry(forKey: key, completion: { (result: Result<Entry<Value>, Error>) in
101+
public func object(forKey key: Key, completion: @escaping (CacheResult<Value>) -> Void) {
102+
entry(forKey: key, completion: { (result: CacheResult<Entry<Value>>) in
103103
completion(result.map({ entry in
104104
return entry.object
105105
}))
@@ -108,8 +108,8 @@ extension AsyncStorage {
108108

109109
public func existsObject(
110110
forKey key: Key,
111-
completion: @escaping (Result<Bool, Error>) -> Void) {
112-
object(forKey: key, completion: { (result: Result<Value, Error>) in
111+
completion: @escaping (CacheResult<Bool>) -> Void) {
112+
object(forKey: key, completion: { (result: CacheResult<Value>) in
113113
completion(result.map({ _ in
114114
return true
115115
}))

Tests/iOS/Tests/Storage/AsyncStorageTests.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ final class AsyncStorageTests: XCTestCase {
2525
storage.setObject(user, forKey: "user", completion: { _ in })
2626
storage.object(forKey: "user", completion: { result in
2727
switch result {
28-
case .success(let cachedUser):
28+
case .value(let cachedUser):
2929
XCTAssertEqual(cachedUser, self.user)
3030
expectation.fulfill()
3131
default:
@@ -52,7 +52,7 @@ final class AsyncStorageTests: XCTestCase {
5252
then("all are removed") {
5353
intStorage.existsObject(forKey: "key-99", completion: { result in
5454
switch result {
55-
case .success:
55+
case .value:
5656
XCTFail()
5757
default:
5858
expectation.fulfill()

Tests/iOS/Tests/Storage/StorageTests.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ final class StorageTests: XCTestCase {
3333

3434
storage.async.object(forKey: "user", completion: { result in
3535
switch result {
36-
case .success(let cachedUser):
36+
case .value(let cachedUser):
3737
XCTAssertEqual(cachedUser, self.user)
3838
expectation.fulfill()
3939
default:

0 commit comments

Comments
 (0)