-
Notifications
You must be signed in to change notification settings - Fork 174
/
GrpcClientFactory.java
141 lines (128 loc) · 6.38 KB
/
GrpcClientFactory.java
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
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
/*
* Copyright © 2019 Apple Inc. and the ServiceTalk project authors
*
* 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.
*/
package io.servicetalk.grpc.api;
import io.servicetalk.encoding.api.BufferDecoderGroup;
import io.servicetalk.encoding.api.ContentCodec;
import io.servicetalk.encoding.api.EmptyBufferDecoderGroup;
import io.servicetalk.encoding.api.Identity;
import java.util.ArrayList;
import java.util.List;
import static java.util.Collections.emptyList;
import static java.util.Collections.unmodifiableList;
import static java.util.Objects.requireNonNull;
/**
* A factory for creating clients that follows the specified <a href="https://www.grpc.io">gRPC</a> {@link Client}
* contract.
*
* @param <Client> <a href="https://www.grpc.io">gRPC</a> service that any client built from this
* factory represents.
* @param <BlockingClient> Blocking <a href="https://www.grpc.io">gRPC</a> service that any client
* built from this builder represents.
*/
public abstract class GrpcClientFactory<Client extends GrpcClient<BlockingClient>,
BlockingClient extends BlockingGrpcClient<Client>> {
@Deprecated
private List<ContentCodec> supportedCodings = emptyList();
private BufferDecoderGroup bufferDecoderGroup = EmptyBufferDecoderGroup.INSTANCE;
/**
* Create a new client that follows the specified <a href="https://www.grpc.io">gRPC</a>
* {@link Client} contract using the passed {@link GrpcClientCallFactory}.
*
* @param clientCallFactory {@link GrpcClientCallFactory} to use for creating client calls.
* The returned {@link Client} should own the lifecycle of this factory.
* @return A new <a href="https://www.grpc.io">gRPC</a> client following the specified
* <a href="https://www.grpc.io">gRPC</a> {@link Client} contract.
*/
public final Client newClientForCallFactory(GrpcClientCallFactory clientCallFactory) {
return newClient(clientCallFactory);
}
/**
* Create a new client that follows the specified <a href="https://www.grpc.io">gRPC</a>
* {@link BlockingClient} contract using the passed {@link GrpcClientCallFactory}.
*
* @param clientCallFactory {@link GrpcClientCallFactory} to use for creating client calls.
* The returned {@link Client} should own the lifecycle of this factory.
* @return A new <a href="https://www.grpc.io">gRPC</a> client following the specified
* <a href="https://www.grpc.io">gRPC</a> {@link BlockingClient} contract.
*/
public final BlockingClient newBlockingClientForCallFactory(GrpcClientCallFactory clientCallFactory) {
return newBlockingClient(clientCallFactory);
}
/**
* Sets the supported message encodings for this client factory.
* By default only {@link Identity#identity()} is supported
* @param codings The supported encodings {@link ContentCodec}s for this client.
* @return {@code this}
* @deprecated Use generated code methods targeting {@link List} of
* {@link io.servicetalk.encoding.api.BufferEncoder}s and {@link io.servicetalk.encoding.api.BufferDecoderGroup}.
*/
@Deprecated
public GrpcClientFactory<Client, BlockingClient>
supportedMessageCodings(List<ContentCodec> codings) { // FIXME: 0.43 - remove deprecated method
this.supportedCodings = unmodifiableList(new ArrayList<>(codings));
return this;
}
/**
* Return the supported {@link ContentCodec}s for this client factory.
* @return the supported {@link ContentCodec}s for this client factory.
* @deprecated Use generated code methods targeting {@link List} of
* {@link io.servicetalk.encoding.api.BufferEncoder}s and {@link io.servicetalk.encoding.api.BufferDecoderGroup}.
*/
@Deprecated
protected List<ContentCodec> supportedMessageCodings() { // FIXME: 0.43 - remove deprecated method
return supportedCodings;
}
/**
* Sets the supported {@link BufferDecoderGroup} for this client factory.
* By default only {@link Identity#identityEncoder()} is supported
*
* {@link io.servicetalk.encoding.api.BufferDecoderGroup}.
* @param bufferDecoderGroup The supported {@link BufferDecoderGroup} for this client.
* @return {@code this}
*/
public GrpcClientFactory<Client, BlockingClient> bufferDecoderGroup(
BufferDecoderGroup bufferDecoderGroup) {
this.bufferDecoderGroup = requireNonNull(bufferDecoderGroup);
return this;
}
/**
* Get the supported {@link BufferDecoderGroup} for this client factory.
* @return the supported {@link BufferDecoderGroup} for this client factory.
*/
protected BufferDecoderGroup bufferDecoderGroup() {
return bufferDecoderGroup;
}
/**
* Create a new client that follows the specified <a href="https://www.grpc.io">gRPC</a>
* {@link Client} contract using the passed {@link GrpcClientCallFactory}.
*
* @param clientCallFactory {@link GrpcClientCallFactory} to use for creating client calls.
* The returned {@link Client} should own the lifecycle of this factory.
* @return A new <a href="https://www.grpc.io">gRPC</a> client following the specified
* <a href="https://www.grpc.io">gRPC</a> {@link Client} contract.
*/
protected abstract Client newClient(GrpcClientCallFactory clientCallFactory);
/**
* Create a new client that follows the specified <a href="https://www.grpc.io">gRPC</a>
* {@link BlockingClient} contract using the passed {@link GrpcClientCallFactory}.
*
* @param clientCallFactory {@link GrpcClientCallFactory} to use for creating client calls.
* The returned {@link Client} should own the lifecycle of this factory.
* @return A new <a href="https://www.grpc.io">gRPC</a> client following the specified
* <a href="https://www.grpc.io">gRPC</a> {@link BlockingClient} contract.
*/
protected abstract BlockingClient newBlockingClient(GrpcClientCallFactory clientCallFactory);
}