File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -324,6 +324,32 @@ extension CacheProtocol {
324324
325325}
326326
327+ extension ReadOnlyCache {
328+
329+ public func fallback( with produceValue: @escaping ( Error ) throws -> Value ) -> ReadOnlyCache < Key , Value > {
330+ return ReadOnlyCache ( cacheName: self . cacheName, retrieve: { ( key, completion) in
331+ self . retrieve ( forKey: key, completion: { ( result) in
332+ switch result {
333+ case . failure( let error) :
334+ do {
335+ let fallbackValue = try produceValue ( error)
336+ completion ( . success( fallbackValue) )
337+ } catch let fallbackError {
338+ completion ( . failure( fallbackError) )
339+ }
340+ case . success( let value) :
341+ completion ( . success( value) )
342+ }
343+ } )
344+ } )
345+ }
346+
347+ public func defaulting( to defaultValue: @autoclosure @escaping ( ) -> Value ) -> ReadOnlyCache < Key , Value > {
348+ return fallback ( with: { _ in defaultValue ( ) } )
349+ }
350+
351+ }
352+
327353extension CacheProtocol {
328354
329355 public func singleKey( _ key: Key ) -> Cache < Void , Value > {
You can’t perform that action at this time.
0 commit comments