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() + } + } +}