forked from grpc/grpc-swift
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathCollect.swift
58 lines (51 loc) · 1.97 KB
/
Collect.swift
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
/*
* Copyright 2025, gRPC Authors All rights reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import ArgumentParser
import GRPCCore
import GRPCNIOTransportHTTP2
struct Collect: AsyncParsableCommand {
static let configuration = CommandConfiguration(
abstract: "Makes a client streaming RPC to the echo-metadata server."
)
@OptionGroup
var arguments: ClientArguments
func run() async throws {
try await withGRPCClient(
transport: .http2NIOPosix(
target: self.arguments.target,
transportSecurity: .plaintext
)
) { client in
let echo = Echo_Echo.Client(wrapping: client)
let requestMetadata: Metadata = ["echo-message": "\(arguments.message)"]
print("collect → metadata: \(requestMetadata)")
try await echo.collect(metadata: requestMetadata) { writer in
for part in self.arguments.message.split(separator: " ") {
print("collect → \(part)")
try await writer.write(.with { $0.text = String(part) })
}
} onResponse: { response in
let initialMetadata = Metadata(response.metadata.filter({ $0.key.starts(with: "echo-") }))
print("collect ← initial metadata: \(initialMetadata)")
print("collect ← message: \(try response.message.text)")
let trailingMetadata = Metadata(
response.trailingMetadata.filter({ $0.key.starts(with: "echo-") })
)
print("collect ← trailing metadata: \(trailingMetadata)")
}
}
}
}