Skip to content

Commit b6dc500

Browse files
SebastianThiebaudMrMage
authored andcommitted
Add support for RPC status (#331)
* Add support for RPC status * Add test * Move function
1 parent 2fd06dc commit b6dc500

File tree

4 files changed

+21
-1
lines changed

4 files changed

+21
-1
lines changed

Sources/CgRPC/shim/cgrpc.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -240,6 +240,7 @@ void cgrpc_metadata_array_unref_fields(cgrpc_metadata_array *array);
240240
size_t cgrpc_metadata_array_get_count(cgrpc_metadata_array *array);
241241
char *cgrpc_metadata_array_copy_key_at_index(cgrpc_metadata_array *array, size_t index);
242242
char *cgrpc_metadata_array_copy_value_at_index(cgrpc_metadata_array *array, size_t index);
243+
cgrpc_byte_buffer *cgrpc_metadata_array_copy_data_value_at_index(cgrpc_metadata_array *array, size_t index);
243244
void cgrpc_metadata_array_move_metadata(cgrpc_metadata_array *dest, cgrpc_metadata_array *src);
244245
cgrpc_metadata_array *cgrpc_metadata_array_copy(cgrpc_metadata_array *src);
245246
void cgrpc_metadata_array_append_metadata(cgrpc_metadata_array *metadata, const char *key, const char *value);

Sources/CgRPC/shim/metadata.c

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,11 @@ char *cgrpc_metadata_array_copy_value_at_index(cgrpc_metadata_array *array, size
6060
return str;
6161
}
6262

63+
cgrpc_byte_buffer *cgrpc_metadata_array_copy_data_value_at_index(cgrpc_metadata_array *array, size_t index) {
64+
size_t length = GRPC_SLICE_LENGTH(array->metadata[index].value);
65+
return cgrpc_byte_buffer_create_by_copying_data(GRPC_SLICE_START_PTR(array->metadata[index].value), length);
66+
}
67+
6368
void cgrpc_metadata_array_move_metadata(cgrpc_metadata_array *destination,
6469
cgrpc_metadata_array *source) {
6570
destination->count = source->count;

Sources/SwiftGRPC/Core/Metadata.swift

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ public class Metadata {
8080
defer { cgrpc_free_copied_string(valueData) }
8181
return String(cString: valueData, encoding: String.Encoding.utf8)
8282
}
83-
83+
8484
public func add(key: String, value: String) throws {
8585
if !ownsFields {
8686
throw Error.doesNotOwnFields
@@ -129,4 +129,13 @@ extension Metadata {
129129

130130
return nil
131131
}
132+
133+
public func data(forKey key: String) -> Data? {
134+
for index in 0..<count() {
135+
guard self.key(index) == key else { continue }
136+
let byteBuffer = ByteBuffer(underlyingByteBuffer: cgrpc_metadata_array_copy_data_value_at_index(underlyingArray, index))
137+
return byteBuffer.data()
138+
}
139+
return nil
140+
}
132141
}

Tests/SwiftGRPCTests/MetadataTests.swift

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,4 +28,9 @@ class MetadataTests: XCTestCase {
2828
let metadata = try! Metadata(["foo": "bar"])
2929
XCTAssertEqual(["foo": "bar"], metadata.copy().dictionaryRepresentation)
3030
}
31+
32+
func testExtractData() {
33+
let metadata = try! Metadata(["foo": "bar"])
34+
XCTAssertEqual("bar".data(using: .utf8), metadata.data(forKey: "foo"))
35+
}
3136
}

0 commit comments

Comments
 (0)