Skip to content

Commit ba9463b

Browse files
committed
feat(generator): wire transport stub delegation to resumable upload stubs
Wires the generated transport stubs (GrpcServiceStub and HttpJsonServiceStub) to delegate resumable upload methods to the internal HTTP upload stub. In GrpcServiceStub, credentials, headers, and clocks are forwarded to the underlying HTTP client context. Clients initialize successfully without credentials; an exception results only if use of the HTTP upload stub is attempted. Also declares the stub-side contract that the transports implement: - In AbstractServiceStubClassComposer: emit public ResumableUploadCallable<RequestT, ResponseT> [method]Callable() throwing UnsupportedOperationException.
1 parent 1dee45d commit ba9463b

10 files changed

Lines changed: 715 additions & 39 deletions

File tree

‎sdk-platform-java/gapic-generator-java/src/main/java/com/google/api/generator/gapic/composer/Composer.java‎

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,10 +29,12 @@
2929
import com.google.api.generator.gapic.composer.grpcrest.HttpJsonServiceClientTestClassComposer;
3030
import com.google.api.generator.gapic.composer.resourcename.ResourceNameHelperClassComposer;
3131
import com.google.api.generator.gapic.composer.rest.HttpJsonServiceCallableFactoryClassComposer;
32+
import com.google.api.generator.gapic.composer.rest.HttpJsonServiceResumableUploadStubClassComposer;
3233
import com.google.api.generator.gapic.composer.rest.HttpJsonServiceStubClassComposer;
3334
import com.google.api.generator.gapic.model.GapicClass;
3435
import com.google.api.generator.gapic.model.GapicContext;
3536
import com.google.api.generator.gapic.model.GapicPackageInfo;
37+
import com.google.api.generator.gapic.model.Method;
3638
import com.google.api.generator.gapic.model.ReflectConfig;
3739
import com.google.api.generator.gapic.model.Sample;
3840
import com.google.api.generator.gapic.model.Service;
@@ -91,6 +93,11 @@ public static List<GapicClass> generateStubClasses(GapicContext context) {
9193
.services()
9294
.forEach(
9395
s -> {
96+
if (s.methods().stream().anyMatch(Method::isResumableUpload)) {
97+
clazzes.add(
98+
HttpJsonServiceResumableUploadStubClassComposer.instance()
99+
.generate(context, s));
100+
}
94101
if (context.transport() == Transport.REST) {
95102
clazzes.add(
96103
com.google.api.generator.gapic.composer.rest.ServiceStubClassComposer.instance()

‎sdk-platform-java/gapic-generator-java/src/main/java/com/google/api/generator/gapic/composer/common/AbstractServiceStubClassComposer.java‎

Lines changed: 21 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
import com.google.api.gax.rpc.ClientStreamingCallable;
2222
import com.google.api.gax.rpc.LongRunningClient;
2323
import com.google.api.gax.rpc.OperationCallable;
24+
import com.google.api.gax.rpc.ResumableUploadCallable;
2425
import com.google.api.gax.rpc.ServerStreamingCallable;
2526
import com.google.api.gax.rpc.UnaryCallable;
2627
import com.google.api.generator.engine.ast.AnnotationNode;
@@ -162,22 +163,7 @@ private MethodDefinition createCallableGetter(Method method, TypeStore typeStore
162163

163164
private MethodDefinition createCallableGetterHelper(
164165
Method method, TypeStore typeStore, boolean isLroCallable, boolean isPaged) {
165-
TypeNode returnType;
166-
switch (method.stream()) {
167-
case CLIENT:
168-
returnType = typeStore.get("ClientStreamingCallable");
169-
break;
170-
case SERVER:
171-
returnType = typeStore.get("ServerStreamingCallable");
172-
break;
173-
case BIDI:
174-
returnType = typeStore.get("BidiStreamingCallable");
175-
break;
176-
case NONE:
177-
// Fall through.
178-
default:
179-
returnType = typeStore.get(isLroCallable ? "OperationCallable" : "UnaryCallable");
180-
}
166+
TypeNode returnType = getCallableType(method, typeStore, isLroCallable);
181167

182168
String methodName =
183169
String.format(
@@ -270,6 +256,7 @@ private static TypeStore createTypes(Service service, Map<String, Message> messa
270256
Generated.class,
271257
Operation.class,
272258
OperationCallable.class,
259+
ResumableUploadCallable.class,
273260
ServerStreamingCallable.class,
274261
UnaryCallable.class,
275262
UnsupportedOperationException.class,
@@ -328,4 +315,22 @@ protected MethodDefinition createOperationsStubGetterMethodDefinition(
328315
.build())))
329316
.build();
330317
}
318+
319+
private static TypeNode getCallableType(
320+
Method method, TypeStore typeStore, boolean isLroCallable) {
321+
if (method.isResumableUpload()) {
322+
return typeStore.get("ResumableUploadCallable");
323+
}
324+
switch (method.stream()) {
325+
case CLIENT:
326+
return typeStore.get("ClientStreamingCallable");
327+
case SERVER:
328+
return typeStore.get("ServerStreamingCallable");
329+
case BIDI:
330+
return typeStore.get("BidiStreamingCallable");
331+
case NONE:
332+
default:
333+
return typeStore.get(isLroCallable ? "OperationCallable" : "UnaryCallable");
334+
}
335+
}
331336
}

0 commit comments

Comments
 (0)