Skip to content

Commit b4684f8

Browse files
committed
#63 - Support client code generation for CompletableFuture and HttpCall with various generic types
1 parent 225b275 commit b4684f8

File tree

4 files changed

+126
-10
lines changed

4 files changed

+126
-10
lines changed

http-generator-client/src/main/java/io/avaje/http/generator/client/ClientMethodWriter.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,9 @@ void addImportTypes(ControllerReader reader) {
3838
}
3939

4040
private void methodStart(Append writer) {
41+
for (MethodParam param : method.getParams()) {
42+
checkBodyHandler(param);
43+
}
4144
writer.append(" // %s %s", webMethod, method.getWebMethodPath()).eol();
4245
writer.append(" @Override").eol();
4346
writer.append(" public %s %s(", returnType.shortType(), method.simpleName());
@@ -48,7 +51,6 @@ private void methodStart(Append writer) {
4851
}
4952
writer.append(param.getUType().shortType()).append(" ");
5053
writer.append(param.getName());
51-
checkBodyHandler(param);
5254
}
5355
writer.append(") {").eol();
5456
}
@@ -59,6 +61,7 @@ private void methodStart(Append writer) {
5961
private void checkBodyHandler(MethodParam param) {
6062
if (param.getRawType().startsWith(BODY_HANDLER)) {
6163
bodyHandlerParam = param;
64+
param.getUType().param0();
6265
}
6366
}
6467

@@ -82,7 +85,7 @@ void write() {
8285
WebMethod webMethod = method.getWebMethod();
8386
writer.append(" .%s()", webMethod.name()).eol();
8487
if (returnType == UType.VOID) {
85-
writer.append(" .asDiscarding();").eol();
88+
writer.append(" .asVoid();").eol();
8689
} else {
8790
String known = KNOWN_RESPONSE.get(returnType.full());
8891
if (known != null) {

http-generator-client/src/main/java/io/avaje/http/generator/client/KnownResponse.java

Lines changed: 27 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -12,20 +12,40 @@ class KnownResponse {
1212

1313
KnownResponse() {
1414
map.put("void", ".asVoid();");
15+
map.put("java.lang.String", ".asPlainString().body();");
16+
1517
map.put("java.net.http.HttpResponse<java.lang.Void>", ".asVoid();");
1618
map.put("java.net.http.HttpResponse<java.lang.String>", ".asString();");
17-
map.put("java.lang.String", ".asString().body();");
18-
map.put("java.net.http.HttpResponse<java.io.InputStream>", ".asInputStream();");
19-
map.put("java.io.InputStream", ".asInputStream().body();");
20-
map.put("java.net.http.HttpResponse<java.util.Stream<java.lang.String>>", ".asLines();");
21-
map.put("java.util.Stream<java.lang.String>", ".asLines().body();");
2219
map.put("java.net.http.HttpResponse<byte[]>", ".asByteArray();");
23-
map.put("byte[]", ".asByteArray().body();");
24-
map.put("java.util.concurrent.CompletableFuture<java.lang.Void>", ".async().asVoid();");
20+
map.put("java.net.http.HttpResponse<java.io.InputStream>", ".asInputStream();");
21+
map.put("java.net.http.HttpResponse<java.util.stream.Stream<java.lang.String>>", ".asLines();");
22+
2523
map.put("java.util.concurrent.CompletableFuture<java.net.http.HttpResponse<java.lang.Void>>", ".async().asVoid();");
2624
map.put("java.util.concurrent.CompletableFuture<java.net.http.HttpResponse<java.lang.String>>", ".async().asString();");
25+
map.put("java.util.concurrent.CompletableFuture<java.net.http.HttpResponse<byte[]>>", ".async().asByteArray();");
26+
map.put("java.util.concurrent.CompletableFuture<java.net.http.HttpResponse<java.io.InputStream>>", ".async().asInputStream();");
27+
map.put("java.util.concurrent.CompletableFuture<java.net.http.HttpResponse<java.util.stream.Stream<java.lang.String>>>", ".async().asLines();");
28+
2729
map.put("io.avaje.http.client.HttpCall<java.net.http.HttpResponse<java.lang.Void>>", ".call().asVoid();");
2830
map.put("io.avaje.http.client.HttpCall<java.net.http.HttpResponse<java.lang.String>>", ".call().asString();");
31+
map.put("io.avaje.http.client.HttpCall<java.net.http.HttpResponse<byte[]>>", ".call().asByteArray();");
32+
map.put("io.avaje.http.client.HttpCall<java.net.http.HttpResponse<java.io.InputStream>>", ".call().asInputStream();");
33+
map.put("io.avaje.http.client.HttpCall<java.net.http.HttpResponse<java.util.stream.Stream<java.lang.String>>>", ".call().asLines();");
34+
35+
// Not supported response types - need HttpResponse for these ones
36+
map.put("byte[]", ".notSupported(); // Use HttpResponse<byte[]> instead?");
37+
map.put("java.io.InputStream", ".notSupported(); // Use HttpResponse<InputStream> instead?");
38+
map.put("java.util.stream.Stream<java.lang.String>", ".notSupported(); // Use HttpResponse<Stream<String>> instead?");
39+
map.put("java.util.concurrent.CompletableFuture<java.lang.Void>", ".notSupported(); // Use CompletableFuture<HttpResponse<Void> instead");
40+
map.put("java.util.concurrent.CompletableFuture<java.lang.String>", ".notSupported(); // Use CompletableFuture<HttpResponse<String> instead");
41+
map.put("java.util.concurrent.CompletableFuture<byte[]>", ".notSupported(); // Use CompletableFuture<HttpResponse<byte[]> instead");
42+
map.put("java.util.concurrent.CompletableFuture<java.io.InputStream>", ".notSupported(); // Use CompletableFuture<HttpResponse<InputStream> instead");
43+
map.put("java.util.concurrent.CompletableFuture<java.util.stream.Stream<java.lang.String>>", ".notSupported(); // Use CompletableFuture<HttpResponse<Stream<String>> instead");
44+
map.put("io.avaje.http.client.HttpCall<java.lang.Void>", ".notSupported(); // Use HttpCall<HttpResponse<Void> instead");
45+
map.put("io.avaje.http.client.HttpCall<java.lang.String>", ".notSupported(); // Use HttpCall<HttpResponse<String> instead");
46+
map.put("io.avaje.http.client.HttpCall<byte[]>", ".notSupported(); // Use HttpCall<HttpResponse<byte[]> instead");
47+
map.put("io.avaje.http.client.HttpCall<java.io.InputStream>", ".notSupported(); // Use HttpCall<HttpResponse<InputStream> instead");
48+
map.put("io.avaje.http.client.HttpCall<java.util.stream.Stream<java.lang.String>>", ".notSupported(); // Use HttpCall<HttpResponse<Stream<String>> instead");
2949
}
3050

3151
String get(String full) {

tests/test-client/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@
3030
<dependency>
3131
<groupId>io.avaje</groupId>
3232
<artifactId>avaje-http-client</artifactId>
33-
<version>1.8</version>
33+
<version>1.9-SNAPSHOT</version>
3434
</dependency>
3535

3636
<dependency>
Lines changed: 93 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,93 @@
1+
package org.example;
2+
3+
import io.avaje.http.api.Client;
4+
import io.avaje.http.api.Post;
5+
import io.avaje.http.client.HttpCall;
6+
7+
import java.io.InputStream;
8+
import java.net.http.HttpResponse;
9+
import java.util.List;
10+
import java.util.concurrent.CompletableFuture;
11+
import java.util.stream.Stream;
12+
13+
@Client
14+
public interface JunkApi {
15+
16+
@Post
17+
void asVoid();
18+
19+
@Post
20+
HttpResponse<Void> asVoid2();
21+
22+
@Post
23+
String asPlainString();
24+
25+
@Post
26+
HttpResponse<String> asString2();
27+
28+
// @Post byte[] asBytesErr();
29+
@Post
30+
HttpResponse<byte[]> asBytes2();
31+
32+
// @Post InputStream asInputStreamErr();
33+
@Post
34+
HttpResponse<InputStream> asInputStream2();
35+
36+
// @Post Stream<String> asLinesErr();
37+
@Post
38+
HttpResponse<Stream<String>> asLines2();
39+
40+
@Post
41+
Repo bean();
42+
43+
@Post
44+
List<Repo> list();
45+
46+
@Post
47+
Stream<Repo> stream();
48+
49+
// -------
50+
51+
// @Post CompletableFuture<Void> cfVoidErr();
52+
@Post
53+
CompletableFuture<HttpResponse<Void>> cfVoid();
54+
55+
// @Post CompletableFuture<String> cfStringErr();
56+
@Post
57+
CompletableFuture<HttpResponse<String>> cfString();
58+
59+
// @Post CompletableFuture<byte[]> cfBytesErr();
60+
@Post
61+
CompletableFuture<HttpResponse<byte[]>> cfBytes();
62+
63+
// @Post CompletableFuture<InputStream> cfInputStreamErr2();
64+
@Post
65+
CompletableFuture<HttpResponse<InputStream>> cfInputStream();
66+
67+
// @Post CompletableFuture<Stream<String>> cfLinesErr();
68+
@Post
69+
CompletableFuture<HttpResponse<Stream<String>>> cfLines();
70+
71+
// @Post CompletableFuture<Void> cfVoidErr();
72+
@Post
73+
HttpCall<HttpResponse<Void>> callVoid();
74+
75+
// @Post CompletableFuture<String> cfStringErr();
76+
@Post
77+
HttpCall<HttpResponse<String>> callString();
78+
79+
// @Post HttpCall<byte[]> callBytesErr();
80+
@Post
81+
HttpCall<HttpResponse<byte[]>> callBytes();
82+
83+
// @Post HttpCall<InputStream> callInputStreamErr();
84+
@Post
85+
HttpCall<HttpResponse<InputStream>> callInputStream();
86+
87+
// @Post HttpCall<Stream<String>> callLinesErr();
88+
@Post
89+
HttpCall<HttpResponse<Stream<String>>> callLines();
90+
91+
// @Get
92+
// <E> HttpResponse<E> withH(HttpResponse.BodyHandler<E> handler);
93+
}

0 commit comments

Comments
 (0)