mirror of https://github.com/oxen-io/session-ios
				
				
				
			
			You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
	
	
		
			57 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Swift
		
	
			
		
		
	
	
			57 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Swift
		
	
| // Copyright © 2023 Rangeproof Pty Ltd. All rights reserved.
 | |
| 
 | |
| import Foundation
 | |
| import SessionUtilitiesKit
 | |
| 
 | |
| class MockCaches: CachesType {
 | |
|     private var cacheInstances: [Int: MutableCacheType] = [:]
 | |
|     
 | |
|     // MARK: - Immutable Access
 | |
|     
 | |
|     public subscript<M, I>(cache: CacheInfo.Config<M, I>) -> I {
 | |
|         get { MockCaches.getValueSettingIfNull(cache: cache, &cacheInstances) }
 | |
|     }
 | |
|     
 | |
|     public subscript<M, I>(cache: CacheInfo.Config<M, I>) -> M? {
 | |
|         get { return (cacheInstances[cache.key] as? M) }
 | |
|         set { cacheInstances[cache.key] = newValue.map { cache.mutableInstance($0) } }
 | |
|     }
 | |
|     
 | |
|     public func setting<M, I>(cache: CacheInfo.Config<M, I>, to value: M?) -> MockCaches {
 | |
|         self[cache] = value
 | |
|         return self
 | |
|     }
 | |
|     
 | |
|     // MARK: - Mutable Access
 | |
|     
 | |
|     @discardableResult public func mutate<M, I, R>(
 | |
|         cache: CacheInfo.Config<M, I>,
 | |
|         _ mutation: (inout M) -> R
 | |
|     ) -> R {
 | |
|         var value: M = ((cacheInstances[cache.key] as? M) ?? cache.createInstance())
 | |
|         return mutation(&value)
 | |
|     }
 | |
|     
 | |
|     @discardableResult public func mutate<M, I, R>(
 | |
|         cache: CacheInfo.Config<M, I>,
 | |
|         _ mutation: (inout M) throws -> R
 | |
|     ) throws -> R {
 | |
|         var value: M = ((cacheInstances[cache.key] as? M) ?? cache.createInstance())
 | |
|         return try mutation(&value)
 | |
|     }
 | |
|     
 | |
|     @discardableResult private static func getValueSettingIfNull<M, I>(
 | |
|         cache: CacheInfo.Config<M, I>,
 | |
|         _ store: inout [Int: MutableCacheType]
 | |
|     ) -> I {
 | |
|         guard let value: M = (store[cache.key] as? M) else {
 | |
|             let value: M = cache.createInstance()
 | |
|             let mutableInstance: MutableCacheType = cache.mutableInstance(value)
 | |
|             store[cache.key] = mutableInstance
 | |
|             return cache.immutableInstance(value)
 | |
|         }
 | |
|         
 | |
|         return cache.immutableInstance(value)
 | |
|     }
 | |
| }
 |