Skip to content

Commit b93fb56

Browse files
committed
Introduce GrpcCompressionOptions
Signed-off-by: Daniel Fiala <danfiala23@gmail.com>
1 parent 7531c6e commit b93fb56

File tree

13 files changed

+350
-217
lines changed

13 files changed

+350
-217
lines changed
Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
package io.vertx.grpc.client;
2+
3+
import io.vertx.codegen.annotations.DataObject;
4+
import io.vertx.codegen.annotations.Unstable;
5+
import io.vertx.codegen.json.annotations.JsonGen;
6+
import io.vertx.core.json.JsonObject;
7+
import io.vertx.grpc.common.GrpcCompressionOptions;
8+
9+
@Unstable
10+
@DataObject
11+
@JsonGen(publicConverter = false)
12+
public class GrpcClientCompressionOptions extends GrpcCompressionOptions {
13+
14+
/**
15+
* The default compression algorithm accepted by the client = {@code gzip}
16+
*/
17+
public static final String DEFAULT_COMPRESSION_ALGORITHM = "identity";
18+
19+
private String compressionAlgorithm;
20+
21+
/**
22+
* Default options.
23+
*/
24+
public GrpcClientCompressionOptions() {
25+
this.compressionAlgorithm = DEFAULT_COMPRESSION_ALGORITHM;
26+
}
27+
28+
/**
29+
* Copy constructor.
30+
*/
31+
public GrpcClientCompressionOptions(GrpcClientCompressionOptions other) {
32+
super(other);
33+
this.compressionAlgorithm = other.compressionAlgorithm;
34+
}
35+
36+
/**
37+
* Creates options from JSON.
38+
*/
39+
public GrpcClientCompressionOptions(JsonObject json) {
40+
this();
41+
GrpcClientCompressionOptionsConverter.fromJson(json, this);
42+
}
43+
44+
/**
45+
* @return the compression algorithm accepted by the client
46+
*/
47+
public String getCompressionAlgorithm() {
48+
return compressionAlgorithm;
49+
}
50+
51+
/**
52+
* Set the compression algorithm accepted by the client.
53+
*
54+
* @param compressionAlgorithm the compression algorithm
55+
* @return a reference to this, so the API can be used fluently
56+
*/
57+
public GrpcClientCompressionOptions setCompressionAlgorithm(String compressionAlgorithm) {
58+
this.compressionAlgorithm = compressionAlgorithm;
59+
return this;
60+
}
61+
62+
/**
63+
* @return a JSON representation of options
64+
*/
65+
public JsonObject toJson() {
66+
JsonObject json = new JsonObject();
67+
GrpcClientCompressionOptionsConverter.toJson(this, json);
68+
return json;
69+
}
70+
71+
@Override
72+
public String toString() {
73+
return toJson().encode();
74+
}
75+
}

vertx-grpc-client/src/main/java/io/vertx/grpc/client/GrpcClientOptions.java

Lines changed: 48 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -11,14 +11,19 @@
1111
package io.vertx.grpc.client;
1212

1313
import io.vertx.codegen.annotations.DataObject;
14+
import io.vertx.codegen.annotations.Unstable;
15+
import io.vertx.codegen.json.annotations.JsonGen;
16+
import io.vertx.core.json.JsonObject;
1417

1518
import java.util.Objects;
1619
import java.util.concurrent.TimeUnit;
1720

1821
/**
1922
* Options configuring a gRPC client.
2023
*/
24+
@Unstable
2125
@DataObject
26+
@JsonGen(publicConverter = false)
2227
public class GrpcClientOptions {
2328

2429
/**
@@ -42,25 +47,25 @@ public class GrpcClientOptions {
4247
public static final long DEFAULT_MAX_MESSAGE_SIZE = 256 * 1024;
4348

4449
/**
45-
* The default compression encoding = {@code "identity"} (no compression).
50+
* The default compression options
4651
*/
47-
public static final String DEFAULT_COMPRESSION_ENCODING = "identity";
52+
public static final GrpcClientCompressionOptions DEFAULT_COMPRESSION = new GrpcClientCompressionOptions();
4853

4954
private boolean scheduleDeadlineAutomatically;
5055
private int timeout;
5156
private TimeUnit timeoutUnit;
5257
private long maxMessageSize;
53-
private String compressionEncoding;
58+
private GrpcClientCompressionOptions compression;
5459

5560
/**
5661
* Default constructor.
5762
*/
5863
public GrpcClientOptions() {
59-
scheduleDeadlineAutomatically = DEFAULT_SCHEDULE_DEADLINE_AUTOMATICALLY;
60-
timeout = DEFAULT_TIMEOUT;
61-
timeoutUnit = DEFAULT_TIMEOUT_UNIT;
64+
this.scheduleDeadlineAutomatically = DEFAULT_SCHEDULE_DEADLINE_AUTOMATICALLY;
65+
this.timeout = DEFAULT_TIMEOUT;
66+
this.timeoutUnit = DEFAULT_TIMEOUT_UNIT;
6267
this.maxMessageSize = DEFAULT_MAX_MESSAGE_SIZE;
63-
this.compressionEncoding = DEFAULT_COMPRESSION_ENCODING;
68+
this.compression = DEFAULT_COMPRESSION;
6469
}
6570

6671
/**
@@ -69,11 +74,21 @@ public GrpcClientOptions() {
6974
* @param other the options to copy
7075
*/
7176
public GrpcClientOptions(GrpcClientOptions other) {
72-
scheduleDeadlineAutomatically = other.scheduleDeadlineAutomatically;
73-
timeout = other.timeout;
74-
timeoutUnit = other.timeoutUnit;
75-
maxMessageSize = other.maxMessageSize;
76-
compressionEncoding = other.compressionEncoding;
77+
this.scheduleDeadlineAutomatically = other.scheduleDeadlineAutomatically;
78+
this.timeout = other.timeout;
79+
this.timeoutUnit = other.timeoutUnit;
80+
this.maxMessageSize = other.maxMessageSize;
81+
this.compression = new GrpcClientCompressionOptions(other.compression);
82+
}
83+
84+
/**
85+
* Create a client options from JSON.
86+
*
87+
* @param json the JSON
88+
*/
89+
public GrpcClientOptions(JsonObject json) {
90+
this();
91+
GrpcClientOptionsConverter.fromJson(json, this);
7792
}
7893

7994
/**
@@ -168,21 +183,34 @@ public GrpcClientOptions setMaxMessageSize(long maxMessageSize) {
168183
}
169184

170185
/**
171-
* @return the compression encoding used by the client
186+
* @return the compression options
172187
*/
173-
public String getCompressionEncoding() {
174-
return compressionEncoding;
188+
public GrpcClientCompressionOptions getCompression() {
189+
return compression;
175190
}
176191

177192
/**
178-
* Set the compression encoding to be used by the client.
179-
* Supported values include "identity" (no compression), "gzip", and "snappy".
193+
* Set the compression options.
180194
*
181-
* @param compressionEncoding the compression encoding
195+
* @param compression the compression options
182196
* @return a reference to this, so the API can be used fluently
183197
*/
184-
public GrpcClientOptions setCompressionEncoding(String compressionEncoding) {
185-
this.compressionEncoding = Objects.requireNonNull(compressionEncoding, "Compression encoding cannot be null");
198+
public GrpcClientOptions setCompression(GrpcClientCompressionOptions compression) {
199+
this.compression = Objects.requireNonNull(compression);
186200
return this;
187201
}
202+
203+
/**
204+
* @return a JSON representation of options
205+
*/
206+
public JsonObject toJson() {
207+
JsonObject json = new JsonObject();
208+
GrpcClientOptionsConverter.toJson(this, json);
209+
return json;
210+
}
211+
212+
@Override
213+
public String toString() {
214+
return toJson().encode();
215+
}
188216
}

vertx-grpc-client/src/main/java/io/vertx/grpc/client/impl/GrpcClientImpl.java

Lines changed: 7 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,7 @@
1414
import io.vertx.core.Vertx;
1515
import io.vertx.core.buffer.Buffer;
1616
import io.vertx.core.http.HttpClient;
17-
import io.vertx.core.http.HttpClientOptions;
1817
import io.vertx.core.http.HttpMethod;
19-
import io.vertx.core.http.HttpVersion;
2018
import io.vertx.core.http.RequestOptions;
2119
import io.vertx.core.internal.ContextInternal;
2220
import io.vertx.core.internal.VertxInternal;
@@ -28,7 +26,6 @@
2826

2927
import java.util.Map;
3028
import java.util.concurrent.TimeUnit;
31-
import java.util.stream.Collectors;
3229

3330
/**
3431
* @author <a href="mailto:julien@julienviet.com">Julien Viet</a>
@@ -42,8 +39,8 @@ public class GrpcClientImpl implements GrpcClient {
4239
private final long maxMessageSize;
4340
private final int timeout;
4441
private final TimeUnit timeoutUnit;
45-
private final String compressionEncoding;
4642

43+
private final String compressionAlgorithm;
4744
private final Map<String, GrpcCompressor> compressors;
4845
private final Map<String, GrpcDecompressor> decompressors;
4946

@@ -58,11 +55,11 @@ protected GrpcClientImpl(Vertx vertx, GrpcClientOptions grpcOptions, HttpClient
5855
this.maxMessageSize = grpcOptions.getMaxMessageSize();
5956
this.timeout = grpcOptions.getTimeout();
6057
this.timeoutUnit = grpcOptions.getTimeoutUnit();
61-
this.compressionEncoding = grpcOptions.getCompressionEncoding();
6258
this.closeClient = close;
6359

64-
this.compressors = GrpcCompressor.getDefaultCompressors().stream().collect(Collectors.toUnmodifiableMap(GrpcCompressor::encoding, c -> c));
65-
this.decompressors = GrpcDecompressor.getDefaultDecompressors().stream().collect(Collectors.toUnmodifiableMap(GrpcDecompressor::encoding, d -> d));
60+
this.compressionAlgorithm = grpcOptions.getCompression().getCompressionAlgorithm();
61+
this.compressors = grpcOptions.getCompression().getCompressors();
62+
this.decompressors = grpcOptions.getCompression().getDecompressors();
6663
}
6764

6865
public Vertx vertx() {
@@ -82,7 +79,7 @@ public Future<GrpcClientRequest<Buffer, Buffer>> request(RequestOptions options)
8279
this.decompressors
8380
);
8481
grpcRequest.init();
85-
grpcRequest.encoding(compressionEncoding);
82+
grpcRequest.encoding(this.compressionAlgorithm);
8683
configureTimeout(grpcRequest);
8784
return grpcRequest;
8885
});
@@ -139,7 +136,7 @@ private <Req, Resp> Future<GrpcClientRequest<Req, Resp>> request(RequestOptions
139136
this.decompressors
140137
);
141138
call.init();
142-
call.encoding(compressionEncoding);
139+
call.encoding(this.compressionAlgorithm);
143140
call.serviceName(method.serviceName());
144141
call.methodName(method.methodName());
145142
configureTimeout(call);
@@ -152,7 +149,7 @@ public Future<Void> close() {
152149
if (closeClient) {
153150
return client.close();
154151
} else {
155-
return ((VertxInternal)vertx).getOrCreateContext().succeededFuture();
152+
return ((VertxInternal) vertx).getOrCreateContext().succeededFuture();
156153
}
157154
}
158155
}
Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,21 @@
11
module io.vertx.grpc.client{
2+
3+
requires static io.vertx.docgen;
4+
requires static io.vertx.codegen.api;
5+
requires static io.vertx.codegen.json;
6+
27
requires io.netty.buffer;
38
requires io.netty.codec.http;
49
requires io.netty.codec;
510
requires io.vertx.core.logging;
611
requires io.vertx.core;
712
requires io.vertx.grpc.common;
8-
requires static io.vertx.docgen;
9-
requires static io.vertx.codegen.api;
10-
requires static io.vertx.codegen.json;
1113
requires com.google.protobuf;
1214
requires com.google.common;
15+
16+
uses io.vertx.grpc.common.GrpcCompressor;
17+
uses io.vertx.grpc.common.GrpcDecompressor;
18+
1319
exports io.vertx.grpc.client;
1420
exports io.vertx.grpc.client.impl to io.vertx.tests.client;
1521
}

0 commit comments

Comments
 (0)