diff --git a/Sources/GRPCCore/Metadata.swift b/Sources/GRPCCore/Metadata.swift index dfc095e1e..23218b4a1 100644 --- a/Sources/GRPCCore/Metadata.swift +++ b/Sources/GRPCCore/Metadata.swift @@ -494,7 +494,13 @@ extension Metadata.Value: ExpressibleByArrayLiteral { extension Metadata: CustomStringConvertible { public var description: String { - String(describing: self.map({ ($0.key, $0.value) })) + if self.isEmpty { + return "[:]" + } else { + let elements = self.map { "\(String(reflecting: $0.key)): \(String(reflecting: $0.value))" } + .joined(separator: ", ") + return "[\(elements)]" + } } } @@ -508,3 +514,14 @@ extension Metadata.Value: CustomStringConvertible { } } } + +extension Metadata.Value: CustomDebugStringConvertible { + public var debugDescription: String { + switch self { + case .string(let stringValue): + return String(reflecting: stringValue) + case .binary(let binaryValue): + return String(reflecting: binaryValue) + } + } +} diff --git a/Tests/GRPCCoreTests/MetadataTests.swift b/Tests/GRPCCoreTests/MetadataTests.swift index 68c3df85c..617d2263d 100644 --- a/Tests/GRPCCoreTests/MetadataTests.swift +++ b/Tests/GRPCCoreTests/MetadataTests.swift @@ -314,4 +314,34 @@ struct MetadataTests { ) } } + + @Suite("Description") + struct Description { + let metadata: Metadata = [ + "key1": "value1", + "key2": "value2", + "key-bin": .binary([1, 2, 3]), + ] + + @Test("Metadata") + func describeMetadata() async throws { + #expect("\(self.metadata)" == #"["key1": "value1", "key2": "value2", "key-bin": [1, 2, 3]]"#) + } + + @Test("Metadata.Value") + func describeMetadataValue() async throws { + for (key, value) in self.metadata { + switch key { + case "key1": + #expect("\(value)" == "value1") + case "key2": + #expect("\(value)" == "value2") + case "key-bin": + #expect("\(value)" == "[1, 2, 3]") + default: + Issue.record("Should not have reached this point") + } + } + } + } }