// // Cache.swift // Tusker // // Created by Shadowfacts on 11/7/18. // Copyright © 2018 Shadowfacts. All rights reserved. // import Foundation import Cache /// Wrapper around Cache library that provides an API for transparently using any storage type enum Cache { case memory(MemoryStorage) case disk(DiskStorage) case hybrid(HybridStorage) func existsObject(forKey key: String) throws -> Bool { switch self { case let .memory(memory): return try memory.existsObject(forKey: key) case let .disk(disk): return try disk.existsObject(forKey: key) case let .hybrid(hybrid): return try hybrid.existsObject(forKey: key) } } func object(forKey key: String) throws -> T { switch self { case let .memory(memory): return try memory.object(forKey: key) case let .disk(disk): return try disk.object(forKey: key) case let .hybrid(hybrid): return try hybrid.object(forKey: key) } } func setObject(_ object: T, forKey key: String, expiry: Expiry? = nil) throws { switch self { case let .memory(memory): memory.setObject(object, forKey: key, expiry: expiry) case let .disk(disk): try disk.setObject(object, forKey: key, expiry: expiry) case let .hybrid(hybrid): try hybrid.setObject(object, forKey: key, expiry: expiry) } } }