import Foundation enum KeychainError: Error { case darwinError(OSStatus) case codingError(Error) } protocol Keychain: KeyValueStorage { func allKeys() -> Set func hasValue(forKey key: String) -> Result func accessibilityOfKey(_ key: String) -> Result func getData(forKey key: String) -> Result func getValue(_ type: T.Type, forKey key: String) -> Result @discardableResult func setData(_ value: Data, forKey key: String) -> Result @discardableResult func setValue(_ maybeValue: T?, forKey key: String) -> Result @discardableResult func removeObject(forKey key: String) -> Result @discardableResult func removeAllKeys() -> Result static func wipeKeychain() }