From 618481fe1eae8208e5d160eba2ecce6978dd606f Mon Sep 17 00:00:00 2001 From: Nathan Harris Date: Mon, 18 Mar 2019 18:57:59 -0700 Subject: [PATCH] Add `RESPValueConvertible` conformance to `Optional` --- .../NIORedis/RESP/RESPValueConvertible.swift | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/Sources/NIORedis/RESP/RESPValueConvertible.swift b/Sources/NIORedis/RESP/RESPValueConvertible.swift index 323a7cc..9131037 100644 --- a/Sources/NIORedis/RESP/RESPValueConvertible.swift +++ b/Sources/NIORedis/RESP/RESPValueConvertible.swift @@ -121,3 +121,20 @@ extension Array: RESPValueConvertible where Element: RESPValueConvertible { return RESPValue.array(elements) } } + +extension Optional: RESPValueConvertible where Wrapped: RESPValueConvertible { + public init?(_ value: RESPValue) { + guard !value.isNull else { return nil } + guard let wrapped = Wrapped(value) else { return nil } + + self = .some(wrapped) + } + + /// See `RESPValueConvertible.convertedToRESPValue()`. + public func convertedToRESPValue() -> RESPValue { + switch self { + case .none: return .null + case let .some(value): return value.convertedToRESPValue() + } + } +}