mirror of
https://github.com/hyperoslo/Cache.git
synced 2026-04-07 19:17:36 +00:00
Revert "Merge pull request #273 from agarmash/remove-custom-result-type"
This reverts commit43ab355b9e, reversing changes made to87bf5e0a1d.
This commit is contained in:
@@ -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 */,
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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()
|
||||
|
||||
@@ -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:
|
||||
|
||||
Reference in New Issue
Block a user