Revert "Merge pull request #273 from agarmash/remove-custom-result-type"

This reverts commit 43ab355b9e, reversing
changes made to 87bf5e0a1d.
This commit is contained in:
Elvis Nunez
2020-11-01 09:51:00 +01:00
parent db09aa310d
commit dcdfd5f8cf
5 changed files with 51 additions and 27 deletions
+8
View File
@@ -101,6 +101,9 @@
D28A1D241F6FFEF60030DF81 /* ObjectConverterTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = D285143E1F6FFE1F00C674D1 /* ObjectConverterTests.swift */; };
D28C9BAC1F67ECD400C180C1 /* TestHelper+iOS.swift in Sources */ = {isa = PBXBuildFile; fileRef = D5291CDF1C28374800B702C9 /* TestHelper+iOS.swift */; };
D28C9BAF1F67EF8300C180C1 /* UIImage+ExtensionsTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = D5291DA01C28405900B702C9 /* UIImage+ExtensionsTests.swift */; };
D292DAFD1F6A970B0060F614 /* CacheResult.swift in Sources */ = {isa = PBXBuildFile; fileRef = D292DAFC1F6A970B0060F614 /* CacheResult.swift */; };
D292DAFE1F6A970B0060F614 /* CacheResult.swift in Sources */ = {isa = PBXBuildFile; fileRef = D292DAFC1F6A970B0060F614 /* CacheResult.swift */; };
D292DAFF1F6A970B0060F614 /* CacheResult.swift in Sources */ = {isa = PBXBuildFile; fileRef = D292DAFC1F6A970B0060F614 /* CacheResult.swift */; };
D2CF981E1F69427C00CE8F68 /* TestCase+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = D2CF981B1F69427C00CE8F68 /* TestCase+Extensions.swift */; };
D2CF981F1F69427C00CE8F68 /* TestCase+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = D2CF981B1F69427C00CE8F68 /* TestCase+Extensions.swift */; };
D2CF98201F69427C00CE8F68 /* TestCase+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = D2CF981B1F69427C00CE8F68 /* TestCase+Extensions.swift */; };
@@ -203,6 +206,7 @@
D27014A420D129EB003B45C7 /* TransformerFactory.swift */ = {isa = PBXFileReference; indentWidth = 4; lastKnownFileType = sourcecode.swift; path = TransformerFactory.swift; sourceTree = "<group>"; tabWidth = 4; };
D285143E1F6FFE1F00C674D1 /* ObjectConverterTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ObjectConverterTests.swift; sourceTree = "<group>"; };
D28897041F8B79B300C61DEE /* JSONDecoder+Extensions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "JSONDecoder+Extensions.swift"; sourceTree = "<group>"; };
D292DAFC1F6A970B0060F614 /* CacheResult.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CacheResult.swift; sourceTree = "<group>"; };
D292DB001F6AA06B0060F614 /* SyncStorageTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SyncStorageTests.swift; sourceTree = "<group>"; };
D292DB031F6AA0730060F614 /* AsyncStorageTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AsyncStorageTests.swift; sourceTree = "<group>"; };
D2CF981B1F69427C00CE8F68 /* TestCase+Extensions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "TestCase+Extensions.swift"; sourceTree = "<group>"; };
@@ -351,6 +355,7 @@
D2CF98571F694FFA00CE8F68 /* ImageWrapper.swift */,
D2CF98591F694FFA00CE8F68 /* StorageError.swift */,
D2CF98861F695B8F00CE8F68 /* Types.swift */,
D292DAFC1F6A970B0060F614 /* CacheResult.swift */,
D2D4CC151FA3145000E4A2D5 /* MD5.swift */,
D2D4CC1F1FA3411300E4A2D5 /* JSONDictionaryWrapper.swift */,
D2D4CC231FA3426B00E4A2D5 /* JSONArrayWrapper.swift */,
@@ -798,6 +803,7 @@
D27014A720D129EB003B45C7 /* TransformerFactory.swift in Sources */,
D270147E20D107DA003B45C7 /* SyncStorage.swift in Sources */,
2292AB7D252A14520031F3B9 /* URL+Extensions.swift in Sources */,
D292DAFF1F6A970B0060F614 /* CacheResult.swift in Sources */,
D21B669A1F6A724300125DE1 /* Date+Extensions.swift in Sources */,
0E79164C250E2AA500A71666 /* Hasher+constantAccrossExecutions.swift in Sources */,
D21B66891F6A723C00125DE1 /* ImageWrapper.swift in Sources */,
@@ -887,6 +893,7 @@
D27014A620D129EB003B45C7 /* TransformerFactory.swift in Sources */,
D270147D20D107DA003B45C7 /* SyncStorage.swift in Sources */,
2292AB7C252A14520031F3B9 /* URL+Extensions.swift in Sources */,
D292DAFE1F6A970B0060F614 /* CacheResult.swift in Sources */,
D21B66991F6A724200125DE1 /* Date+Extensions.swift in Sources */,
0E79164B250E2AA500A71666 /* Hasher+constantAccrossExecutions.swift in Sources */,
D21B66801F6A723C00125DE1 /* ImageWrapper.swift in Sources */,
@@ -938,6 +945,7 @@
D270148C20D113EA003B45C7 /* Optional+Extension.swift in Sources */,
D2CF98601F694FFA00CE8F68 /* DiskConfig.swift in Sources */,
D270147020D1018A003B45C7 /* Transformer.swift in Sources */,
D292DAFD1F6A970B0060F614 /* CacheResult.swift in Sources */,
D27014A520D129EB003B45C7 /* TransformerFactory.swift in Sources */,
D2D4CC241FA3426B00E4A2D5 /* JSONArrayWrapper.swift in Sources */,
2292AB7B252A14520031F3B9 /* URL+Extensions.swift in Sources */,
+16
View File
@@ -0,0 +1,16 @@
import Foundation
/// Used for callback in async operations.
public enum CacheResult<T> {
case value(T)
case error(Error)
public func map<U>(_ transform: (T) -> U) -> CacheResult<U> {
switch self {
case .value(let value):
return CacheResult<U>.value(transform(value))
case .error(let error):
return CacheResult<U>.error(error)
}
}
}
+24 -24
View File
@@ -14,34 +14,34 @@ public class AsyncStorage<Key: Hashable, Value> {
}
extension AsyncStorage {
public func entry(forKey key: Key, completion: @escaping (Result<Entry<Value>, Error>) -> Void) {
public func entry(forKey key: Key, completion: @escaping (CacheResult<Entry<Value>>) -> Void) {
serialQueue.async { [weak self] in
guard let `self` = self else {
completion(.failure(StorageError.deallocated))
completion(CacheResult.error(StorageError.deallocated))
return
}
do {
let anEntry = try self.innerStorage.entry(forKey: key)
completion(.success(anEntry))
completion(CacheResult.value(anEntry))
} catch {
completion(.failure(error))
completion(CacheResult.error(error))
}
}
}
public func removeObject(forKey key: Key, completion: @escaping (Result<(), Error>) -> Void) {
public func removeObject(forKey key: Key, completion: @escaping (CacheResult<()>) -> Void) {
serialQueue.async { [weak self] in
guard let `self` = self else {
completion(.failure(StorageError.deallocated))
completion(CacheResult.error(StorageError.deallocated))
return
}
do {
try self.innerStorage.removeObject(forKey: key)
completion(.success(()))
completion(CacheResult.value(()))
} catch {
completion(.failure(error))
completion(CacheResult.error(error))
}
}
}
@@ -50,56 +50,56 @@ extension AsyncStorage {
_ object: Value,
forKey key: Key,
expiry: Expiry? = nil,
completion: @escaping (Result<(), Error>) -> Void) {
completion: @escaping (CacheResult<()>) -> Void) {
serialQueue.async { [weak self] in
guard let `self` = self else {
completion(.failure(StorageError.deallocated))
completion(CacheResult.error(StorageError.deallocated))
return
}
do {
try self.innerStorage.setObject(object, forKey: key, expiry: expiry)
completion(.success(()))
completion(CacheResult.value(()))
} catch {
completion(.failure(error))
completion(CacheResult.error(error))
}
}
}
public func removeAll(completion: @escaping (Result<(), Error>) -> Void) {
public func removeAll(completion: @escaping (CacheResult<()>) -> Void) {
serialQueue.async { [weak self] in
guard let `self` = self else {
completion(.failure(StorageError.deallocated))
completion(CacheResult.error(StorageError.deallocated))
return
}
do {
try self.innerStorage.removeAll()
completion(.success(()))
completion(CacheResult.value(()))
} catch {
completion(.failure(error))
completion(CacheResult.error(error))
}
}
}
public func removeExpiredObjects(completion: @escaping (Result<(), Error>) -> Void) {
public func removeExpiredObjects(completion: @escaping (CacheResult<()>) -> Void) {
serialQueue.async { [weak self] in
guard let `self` = self else {
completion(.failure(StorageError.deallocated))
completion(CacheResult.error(StorageError.deallocated))
return
}
do {
try self.innerStorage.removeExpiredObjects()
completion(.success(()))
completion(CacheResult.value(()))
} catch {
completion(.failure(error))
completion(CacheResult.error(error))
}
}
}
public func object(forKey key: Key, completion: @escaping (Result<Value, Error>) -> Void) {
entry(forKey: key, completion: { (result: Result<Entry<Value>, Error>) in
public func object(forKey key: Key, completion: @escaping (CacheResult<Value>) -> Void) {
entry(forKey: key, completion: { (result: CacheResult<Entry<Value>>) in
completion(result.map({ entry in
return entry.object
}))
@@ -108,8 +108,8 @@ extension AsyncStorage {
public func existsObject(
forKey key: Key,
completion: @escaping (Result<Bool, Error>) -> Void) {
object(forKey: key, completion: { (result: Result<Value, Error>) in
completion: @escaping (CacheResult<Bool>) -> Void) {
object(forKey: key, completion: { (result: CacheResult<Value>) in
completion(result.map({ _ in
return true
}))
@@ -25,7 +25,7 @@ final class AsyncStorageTests: XCTestCase {
storage.setObject(user, forKey: "user", completion: { _ in })
storage.object(forKey: "user", completion: { result in
switch result {
case .success(let cachedUser):
case .value(let cachedUser):
XCTAssertEqual(cachedUser, self.user)
expectation.fulfill()
default:
@@ -52,7 +52,7 @@ final class AsyncStorageTests: XCTestCase {
then("all are removed") {
intStorage.existsObject(forKey: "key-99", completion: { result in
switch result {
case .success:
case .value:
XCTFail()
default:
expectation.fulfill()
+1 -1
View File
@@ -33,7 +33,7 @@ final class StorageTests: XCTestCase {
storage.async.object(forKey: "user", completion: { result in
switch result {
case .success(let cachedUser):
case .value(let cachedUser):
XCTAssertEqual(cachedUser, self.user)
expectation.fulfill()
default: