@@ -21,9 +21,9 @@ struct EchoService: Echo_Echo.ServiceProtocol {
21
21
request: ServerRequest < Echo_EchoRequest > ,
22
22
context: ServerContext
23
23
) async throws -> ServerResponse < Echo_EchoResponse > {
24
- let responseMetadata = request. metadata. echoPairs
24
+ let responseMetadata = Metadata ( request. metadata. filter ( { $0 . key . starts ( with : " echo- " ) } ) )
25
25
return ServerResponse (
26
- message: . init ( ) ,
26
+ message: . with { $0 . text = request . message . text } ,
27
27
metadata: responseMetadata,
28
28
trailingMetadata: responseMetadata
29
29
)
@@ -33,9 +33,12 @@ struct EchoService: Echo_Echo.ServiceProtocol {
33
33
request: StreamingServerRequest < Echo_EchoRequest > ,
34
34
context: ServerContext
35
35
) async throws -> ServerResponse < Echo_EchoResponse > {
36
- let responseMetadata = request. metadata. echoPairs
36
+ let responseMetadata = Metadata ( request. metadata. filter ( { $0. key. starts ( with: " echo- " ) } ) )
37
+ let messages = try await request. messages. reduce ( into: [ ] ) { $0. append ( $1. text) }
38
+ let joined = messages. joined ( separator: " " )
39
+
37
40
return ServerResponse (
38
- message: . init ( ) ,
41
+ message: . with { $0 . text = joined } ,
39
42
metadata: responseMetadata,
40
43
trailingMetadata: responseMetadata
41
44
)
@@ -45,31 +48,26 @@ struct EchoService: Echo_Echo.ServiceProtocol {
45
48
request: ServerRequest < Echo_EchoRequest > ,
46
49
context: ServerContext
47
50
) async throws -> StreamingServerResponse < Echo_EchoResponse > {
48
- let responseMetadata = request. metadata. echoPairs
49
- return StreamingServerResponse (
50
- single : ServerResponse (
51
- message : . init ( ) ,
52
- metadata: responseMetadata,
53
- trailingMetadata : responseMetadata
54
- )
55
- )
51
+ let responseMetadata = Metadata ( request. metadata. filter ( { $0 . key . starts ( with : " echo- " ) } ) )
52
+ let parts = request . message . text . split ( separator : " " )
53
+ let messages = parts . map { part in Echo_EchoResponse . with { $0 . text = String ( part ) } }
54
+
55
+ return StreamingServerResponse ( metadata: responseMetadata) { writer in
56
+ try await writer . write ( contentsOf : messages )
57
+ return responseMetadata
58
+ }
56
59
}
57
60
58
61
func update(
59
62
request: StreamingServerRequest < Echo_EchoRequest > ,
60
63
context: ServerContext
61
64
) async throws -> StreamingServerResponse < Echo_EchoResponse > {
62
- for try await _ in request. messages {
63
- // Wait for request to be done
65
+ let responseMetadata = Metadata ( request. metadata. filter ( { $0. key. starts ( with: " echo- " ) } ) )
66
+ return StreamingServerResponse ( metadata: responseMetadata) { writer in
67
+ for try await message in request. messages {
68
+ try await writer. write ( . with { $0. text = message. text } )
69
+ }
70
+ return responseMetadata
64
71
}
65
-
66
- let responseMetadata = request. metadata. echoPairs
67
- return StreamingServerResponse (
68
- single: ServerResponse (
69
- message: . init( ) ,
70
- metadata: responseMetadata,
71
- trailingMetadata: responseMetadata
72
- )
73
- )
74
72
}
75
73
}
0 commit comments