import Foundation /** A result from sending a key to the device. */ enum KeyResult: UInt8 { /// Text content was received, although binary data was expected case textReceived = 1 /// A socket event on the device was unexpected (not binary data) case unexpectedSocketEvent = 2 /// The size of the payload (key id + key data, or just key) was invalid case invalidPayloadSize = 3 /// The index of the key was out of bounds case invalidKeyIndex = 4 /// The transmitted key data did not match the expected key case invalidKey = 5 /// The key has been previously used and is no longer valid case keyAlreadyUsed = 6 /// A later key has been used, invalidating this key (to prevent replay attacks after blocked communication) case keyWasSkipped = 7 /// The key was accepted by the device, and the door will be opened case keyAccepted = 8 /// The device produced an unknown error case unknownDeviceError = 9 /// The request did not contain body data with the key case noBodyData = 10 /// The body data could not be read case corruptkeyData = 11 /// The device is not connected case deviceNotConnected = 12 /// The device did not respond within the timeout case deviceTimedOut = 13 } extension KeyResult: CustomStringConvertible { var description: String { switch self { case .invalidKeyIndex: return "Invalid key id (too large)" case .noBodyData: return "No body data included in the request" case .invalidPayloadSize: return "Invalid key size" case .corruptkeyData: return "Key data corrupted" case .deviceNotConnected: return "Device not connected" case .textReceived: return "The device received unexpected text" case .unexpectedSocketEvent: return "Unexpected socket event for the device" case .invalidKey: return "The transmitted key was not correct" case .keyAlreadyUsed: return "The transmitted key was already used" case .keyWasSkipped: return "A newer key was already used" case .keyAccepted: return "Key successfully sent" case .unknownDeviceError: return "The device experienced an unknown error" case .deviceTimedOut: return "The device did not respond" } } }