Skip to content

Commit cc4b980

Browse files
authored
feat(generator): wire transport stub delegation to resumable upload stubs (#14322)
Wires generated transport stubs (`GrpcServiceStub`, `HttpJsonServiceStub`) to delegate resumable upload methods to the internal HTTP upload stub, and excludes upload RPCs from the main stubs' method descriptors and callables.
1 parent 6361ecd commit cc4b980

10 files changed

Lines changed: 512 additions & 38 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)