In HoverResponse Decode single MarkedString as [MarkedString] with one element

This commit is contained in:
Alex Hoppen
2019-12-06 08:40:18 -08:00
parent 4273342301
commit bfdcccd9a3
2 changed files with 9 additions and 14 deletions

View File

@@ -56,7 +56,6 @@ public struct HoverResponse: ResponseType, Hashable {
}
public enum HoverResponseContents: Hashable {
case markedString(MarkedString)
case markedStrings([MarkedString])
case markupContent(MarkupContent)
}
@@ -96,13 +95,11 @@ extension MarkedString: Codable {
extension HoverResponseContents: Codable {
public init(from decoder: Decoder) throws {
if let value = try? MarkupContent(from: decoder) {
self = .markupContent(value)
} else if let value = try? MarkedString(from: decoder) {
self = .markedString(value)
self = .markupContent(value)
} else if let value = try? [MarkedString](from: decoder) {
self = .markedStrings(value)
} else if let value = try? MarkupContent(from: decoder) {
self = .markupContent(value)
self = .markedStrings(value)
} else if let value = try? MarkedString(from: decoder) {
self = .markedStrings([value])
} else {
let context = DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Expected MarkedString, [MarkedString], or MarkupContent")
throw DecodingError.dataCorrupted(context)
@@ -111,8 +108,6 @@ extension HoverResponseContents: Codable {
public func encode(to encoder: Encoder) throws {
switch self {
case .markedString(let value):
try value.encode(to: encoder)
case .markedStrings(let value):
try value.encode(to: encoder)
case .markupContent(let value):

View File

@@ -216,11 +216,11 @@ final class CodingTests: XCTestCase {
}
""")
checkCoding(HoverResponse(contents: .markedString(.markdown(value: "test")), range: nil), json: """
{
"contents" : "test"
}
""")
checkDecoding(json: """
{
"contents" : "test"
}
""", expected: HoverResponse(contents: .markedStrings([.markdown(value: "test")]), range: nil))
checkCoding(HoverResponse(contents: .markedStrings([.markdown(value: "test"), .codeBlock(language: "swift", value: "let foo = 2")]), range: nil), json: """
{