51 lines
1.5 KiB
Swift
51 lines
1.5 KiB
Swift
|
//
|
||
|
// 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<T> {
|
||
|
case memory(MemoryStorage<T>)
|
||
|
case disk(DiskStorage<T>)
|
||
|
case hybrid(HybridStorage<T>)
|
||
|
|
||
|
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)
|
||
|
}
|
||
|
}
|
||
|
}
|