diff --git a/Sources/CLI/client/AppleDocumentationClient+DTO.swift b/Sources/CLI/client/AppleDocumentationClient+DTO.swift index 58574a1..056081b 100644 --- a/Sources/CLI/client/AppleDocumentationClient+DTO.swift +++ b/Sources/CLI/client/AppleDocumentationClient+DTO.swift @@ -67,6 +67,23 @@ struct DocumentationMetadataDTO: Decodable, Sendable { let roleHeading: String let symbolKind: String let title: String + + private enum CodingKeys: CodingKey { + case modules + case platforms + case roleHeading + case symbolKind + case title + } + + init(from decoder: any Decoder) throws { + let container = try decoder.container(keyedBy: CodingKeys.self) + modules = try container.decode([DocumentationModule].self, forKey: .modules) + platforms = try container.decodeIfPresent([DocumentationPlatform].self, forKey: .platforms) ?? [] + roleHeading = try container.decode(String.self, forKey: .roleHeading) + symbolKind = try container.decode(String.self, forKey: .symbolKind) + title = try container.decode(String.self, forKey: .title) + } } struct DocumentationModule: Decodable, Sendable { diff --git a/Tests/CLITests/renderer/DefaultTypeDocumentationRendererTests.swift b/Tests/CLITests/renderer/DefaultTypeDocumentationRendererTests.swift index 3b7a186..47206f0 100644 --- a/Tests/CLITests/renderer/DefaultTypeDocumentationRendererTests.swift +++ b/Tests/CLITests/renderer/DefaultTypeDocumentationRendererTests.swift @@ -36,6 +36,39 @@ struct DefaultTypeDocumentationRendererTests { ) } + @Test("renders text when platform metadata is omitted") + func rendersTextWithoutPlatforms() throws { + // -- Arrange -- + let rawJSON = """ + { + "abstract": [{"text": "The Swift package manifest representation.", "type": "text"}], + "metadata": { + "modules": [{"name": "PackageDescription"}], + "roleHeading": "Structure", + "symbolKind": "struct", + "title": "Package" + }, + "primaryContentSections": [], + "references": {} + } + """ + let document = try makeDocument(rawJSON) + let renderer = DefaultTypeDocumentationRenderer(output: .text) + + // -- Act -- + let output = try renderer.render(document) + + // -- Assert -- + #expect( + output == """ + Package + Structure ยท PackageDescription + + The Swift package manifest representation. + """ + ) + } + @Test("returns Apple's DocC JSON unchanged") func rendersRawJSON() throws { // -- Arrange --