-
Notifications
You must be signed in to change notification settings - Fork 748
Expand file tree
/
Copy pathInMemoryNormalizedCache.swift
More file actions
40 lines (33 loc) · 1.53 KB
/
InMemoryNormalizedCache.swift
File metadata and controls
40 lines (33 loc) · 1.53 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
import Foundation
public final class InMemoryNormalizedCache: NormalizedCache {
private var records: RecordSet
public init(records: RecordSet = RecordSet()) {
self.records = records
}
public func loadRecords(forKeys keys: [CacheKey],
callbackQueue: DispatchQueue?,
completion: @escaping (Result<[Record?], Error>) -> Void) {
let records = keys.map { self.records[$0] }
DispatchQueue.apollo_returnResultAsyncIfNeeded(on: callbackQueue,
action: completion,
result: .success(records))
}
public func merge(records: RecordSet,
callbackQueue: DispatchQueue?,
completion: @escaping (Result<Set<CacheKey>, Error>) -> Void) {
let cacheKeys = self.records.merge(records: records)
DispatchQueue.apollo_returnResultAsyncIfNeeded(on: callbackQueue,
action: completion,
result: .success(cacheKeys))
}
public func clear(callbackQueue: DispatchQueue?,
completion: ((Result<Void, Error>) -> Void)?) {
self.records.clear()
guard let completion = completion else {
return
}
DispatchQueue.apollo_returnResultAsyncIfNeeded(on: callbackQueue,
action: completion,
result: .success(()))
}
}