Skip to content

Commit 14199dc

Browse files
authored
Merge pull request #23 from swiftty/feature/interface
Use nonisolated
2 parents 5222d59 + b7b097f commit 14199dc

File tree

5 files changed

+88
-24
lines changed

5 files changed

+88
-24
lines changed

Sources/DataCacheKit/Cache.swift

Lines changed: 25 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -53,12 +53,19 @@ public actor Cache<Key: Hashable & Sendable, Value: Codable & Sendable>: Caching
5353
return try decoder.decode(Value.self, from: data)
5454
}()
5555

56-
await onMemery.store(value, for: key)
56+
await onMemery.store(value, for: key).value
5757
return value
5858
}
5959

6060
@discardableResult
61-
public func store(_ value: Value, for key: Key) -> Task<Void, Never> {
61+
public nonisolated func store(_ value: Value, for key: Key) -> Task<Void, Never> {
62+
return Task {
63+
let task = await _store(value, for: key)
64+
await task.value
65+
}
66+
}
67+
68+
private func _store(_ value: Value, for key: Key) -> Task<Void, Never> {
6269
queueingTask.enqueueAndReplacing { [weak self] in
6370
guard let self else { return }
6471
async let memory: Void = await onMemery.store(value, for: key).value
@@ -70,7 +77,14 @@ public actor Cache<Key: Hashable & Sendable, Value: Codable & Sendable>: Caching
7077
}
7178

7279
@discardableResult
73-
public func remove(for key: Key) -> Task<Void, Never> {
80+
public nonisolated func remove(for key: Key) -> Task<Void, Never> {
81+
return Task {
82+
let task = await _remove(for: key)
83+
await task.value
84+
}
85+
}
86+
87+
private func _remove(for key: Key) -> Task<Void, Never> {
7488
queueingTask.enqueueAndReplacing { [weak self] in
7589
guard let self else { return }
7690
async let memory: Void = await onMemery.remove(for: key).value
@@ -82,7 +96,14 @@ public actor Cache<Key: Hashable & Sendable, Value: Codable & Sendable>: Caching
8296
}
8397

8498
@discardableResult
85-
public func removeAll() -> Task<Void, Never> {
99+
public nonisolated func removeAll() -> Task<Void, Never> {
100+
return Task {
101+
let task = await _removeAll()
102+
await task.value
103+
}
104+
}
105+
106+
private func _removeAll() -> Task<Void, Never> {
86107
queueingTask.enqueueAndReplacing { [weak self] in
87108
guard let self else { return }
88109
async let memory: Void = await onMemery.removeAll().value

Sources/DataCacheKit/Caching.swift

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,11 @@ public protocol Caching<Key, Value>: Actor {
99
func value(for key: Key) async throws -> Value?
1010

1111
@discardableResult
12-
func store(_ value: Value, for key: Key) -> Task<Void, Never>
12+
nonisolated func store(_ value: Value, for key: Key) -> Task<Void, Never>
1313

1414
@discardableResult
15-
func remove(for key: Key) -> Task<Void, Never>
15+
nonisolated func remove(for key: Key) -> Task<Void, Never>
1616

1717
@discardableResult
18-
func removeAll() -> Task<Void, Never>
18+
nonisolated func removeAll() -> Task<Void, Never>
1919
}

Sources/DataCacheKit/DiskCache.swift

Lines changed: 25 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -117,24 +117,46 @@ public actor DiskCache<Key: Hashable & Sendable>: Caching, @unchecked Sendable {
117117
return try await task.value
118118
}
119119

120+
120121
@discardableResult
121-
public func store(_ data: Data, for key: Key) -> Task<Void, Never> {
122+
public nonisolated func store(_ value: Value, for key: Key) -> Task<Void, Never> {
123+
return Task {
124+
let task = await _store(value, for: key)
125+
await task.value
126+
}
127+
}
128+
129+
private func _store(_ data: Data, for key: Key) -> Task<Void, Never> {
122130
queueingTask.enqueueAndReplacing { [weak self] in
123131
guard let self else { return }
124132
await _storeData(data, for: key)
125133
}
126134
}
127135

128136
@discardableResult
129-
public func remove(for key: Key) -> Task<Void, Never> {
137+
public nonisolated func remove(for key: Key) -> Task<Void, Never> {
138+
return Task {
139+
let task = await _remove(for: key)
140+
await task.value
141+
}
142+
}
143+
144+
private func _remove(for key: Key) -> Task<Void, Never> {
130145
queueingTask.enqueueAndReplacing { [weak self] in
131146
guard let self else { return }
132147
await _removeData(for: key)
133148
}
134149
}
135150

136151
@discardableResult
137-
public func removeAll() -> Task<Void, Never> {
152+
public nonisolated func removeAll() -> Task<Void, Never> {
153+
return Task {
154+
let task = await _removeAll()
155+
await task.value
156+
}
157+
}
158+
159+
private func _removeAll() -> Task<Void, Never> {
138160
queueingTask.enqueueAndReplacing { [weak self] in
139161
guard let self else { return }
140162
await _removeDataAll()

Sources/DataCacheKit/MemoryCache.swift

Lines changed: 24 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,23 +29,44 @@ public actor MemoryCache<Key: Hashable & Sendable, Value: Sendable>: Caching {
2929
}
3030

3131
@discardableResult
32-
public func store(_ value: Value, for key: Key) -> Task<Void, Never> {
32+
public nonisolated func store(_ value: Value, for key: Key) -> Task<Void, Never> {
33+
return Task {
34+
let task = await _store(value, for: key)
35+
await task.value
36+
}
37+
}
38+
39+
private func _store(_ value: Value, for key: Key) -> Task<Void, Never> {
3340
queueingTask.enqueueAndReplacing { [weak self] in
3441
guard let self else { return }
3542
lruCache.setValue(value, forKey: key, cost: (value as? Data)?.count ?? 0)
3643
}
3744
}
3845

3946
@discardableResult
40-
public func remove(for key: Key) -> Task<Void, Never> {
47+
public nonisolated func remove(for key: Key) -> Task<Void, Never> {
48+
return Task {
49+
let task = await _remove(for: key)
50+
await task.value
51+
}
52+
}
53+
54+
private func _remove(for key: Key) -> Task<Void, Never> {
4155
queueingTask.enqueueAndReplacing { [weak self] in
4256
guard let self else { return }
4357
lruCache.removeValue(forKey: key)
4458
}
4559
}
4660

4761
@discardableResult
48-
public func removeAll() -> Task<Void, Never> {
62+
public nonisolated func removeAll() -> Task<Void, Never> {
63+
return Task {
64+
let task = await _removeAll()
65+
await task.value
66+
}
67+
}
68+
69+
private func _removeAll() -> Task<Void, Never> {
4970
queueingTask.enqueueAndReplacing { [weak self] in
5071
guard let self else { return }
5172
lruCache.removeAllValues()

Tests/DataCacheKitTests/DiskCacheTests.swift

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ final class DiskCacheTests {
4343
let clock = ManualClock()
4444
let cache = DiskCache<String>(options: cacheOptions(), clock: clock, logger: .init(.default))
4545

46-
await cache.store(Data(), for: "empty")
46+
cache.store(Data(), for: "empty")
4747

4848
try await yield(until: await cache.isFlushScheduled)
4949

@@ -81,8 +81,8 @@ final class DiskCacheTests {
8181
let clock = ManualClock()
8282
let cache = DiskCache<String>(options: cacheOptions(), clock: clock, logger: .init(.default))
8383

84-
await cache.store(Data([1]), for: "item0")
85-
await cache.store(Data([1, 2]), for: "item1")
84+
cache.store(Data([1]), for: "item0")
85+
cache.store(Data([1, 2]), for: "item1")
8686

8787
try await yield(until: await cache.isFlushScheduled)
8888

@@ -104,9 +104,9 @@ final class DiskCacheTests {
104104
let clock = ManualClock()
105105
let cache = DiskCache<String>(options: cacheOptions(), clock: clock, logger: .init(.default))
106106

107-
await cache.store(Data([1]), for: "item0")
108-
await cache.store(Data([1, 2]), for: "item1")
109-
await cache.remove(for: "item0")
107+
cache.store(Data([1]), for: "item0")
108+
cache.store(Data([1, 2]), for: "item1")
109+
cache.remove(for: "item0")
110110

111111
try await yield(until: await cache.isFlushScheduled)
112112

@@ -138,7 +138,7 @@ final class DiskCacheTests {
138138
let clock = ManualClock()
139139
let cache = DiskCache<String>(options: cacheOptions(), clock: clock, logger: .init(.default))
140140

141-
await cache.store(Data([1]), for: "item0")
141+
cache.store(Data([1]), for: "item0")
142142
try await yield(until: await cache.isFlushScheduled)
143143

144144
clock.advance(by: .milliseconds(1000))
@@ -153,7 +153,7 @@ final class DiskCacheTests {
153153
#expect(isEmpty)
154154
}
155155

156-
await cache.removeAll()
156+
cache.removeAll()
157157
try await yield(until: await cache.isFlushScheduled)
158158

159159
clock.advance(by: .milliseconds(1000))
@@ -181,9 +181,9 @@ final class DiskCacheTests {
181181
let clock = ManualClock()
182182
let cache = DiskCache<String>(options: options, clock: clock)
183183

184-
await cache.store(Data([1]), for: "item0")
185-
await cache.store(Data([1, 2]), for: "item1")
186-
await cache.store(Data([1, 2, 3]), for: "item2")
184+
cache.store(Data([1]), for: "item0")
185+
cache.store(Data([1, 2]), for: "item1")
186+
cache.store(Data([1, 2, 3]), for: "item2")
187187

188188
try await yield(until: await cache.isFlushScheduled)
189189

0 commit comments

Comments
 (0)