/** Returns true if the method is a streaming method */ public static boolean isGrpcStreamingMethod(MethodModel method) { return method.getRequestStreaming() || method.getResponseStreaming(); }
private Set<ImportKind> getImportKinds( InterfaceConfig interfaceConfig, Iterable<? extends MethodModel> methods) { EnumSet<ImportKind> kinds = EnumSet.noneOf(ImportKind.class); for (MethodModel method : methods) { if (method.getResponseStreaming()) { kinds.add(ImportKind.SERVER_STREAM); } MethodConfig methodConfig = interfaceConfig.getMethodConfig(method); if (methodConfig.isLongRunningOperation()) { kinds.add(ImportKind.LRO); } if (methodConfig.isPageStreaming()) { kinds.add(ImportKind.PAGE_STREAM); } } return kinds; }
@VisibleForTesting List<StaticLangApiMethodView> generateApiMethods( InterfaceContext context, Iterable<? extends MethodModel> methods) { List<StaticLangApiMethodView> apiMethods = new ArrayList<>(); for (MethodModel method : methods) { MethodConfig methodConfig = context.getMethodConfig(method); MethodContext methodContext = context.asRequestMethodContext(method); if (method.getRequestStreaming() || method.getResponseStreaming()) { apiMethods.add( apiMethodTransformer.generateGrpcStreamingRequestObjectMethod(methodContext)); } else if (methodConfig.isPageStreaming()) { apiMethods.add(apiMethodTransformer.generatePagedRequestObjectMethod(methodContext)); } else if (methodConfig.isLongRunningOperation()) { apiMethods.add(apiMethodTransformer.generateOperationRequestObjectMethod(methodContext)); } else { apiMethods.add(apiMethodTransformer.generateRequestObjectMethod(methodContext)); } } return apiMethods; }
@Override public List<String> getReturnDocLines( TransformationContext context, MethodContext methodContext, Synchronicity synchronicity) { MethodModel method = methodContext.getMethodModel(); MethodConfig methodConfig = methodContext.getMethodConfig(); if (method.getResponseStreaming()) { String classInfo = method.getOutputTypeName(methodContext.getTypeTable()).getFullName(); return ImmutableList.of("An enumerable of " + classInfo + " instances.", ""); } if (methodConfig.isPageStreaming()) { String resourceTypeName = getTypeFormatter() .getFullNameForElementType(methodConfig.getPageStreaming().getResourcesField()); return ImmutableList.of( "An enumerable of " + resourceTypeName + " instances.", "See Google::Gax::PagedEnumerable documentation for other", "operations such as per-page iteration or access to the response", "object."); } return ImmutableList.of(); }
@Override public String getGrpcStreamingApiReturnTypeName( MethodContext methodContext, ImportTypeTable typeTable) { MethodModel method = methodContext.getMethodModel(); if (method.getRequestStreaming() && method.getResponseStreaming()) { // Bidirectional streaming return typeTable.getAndSaveNicknameForContainer( "Grpc.Core.AsyncDuplexStreamingCall", method.getAndSaveRequestTypeName(typeTable, methodContext.getNamer()), method.getAndSaveResponseTypeName(typeTable, methodContext.getNamer())); } else if (method.getRequestStreaming()) { // Client streaming return typeTable.getAndSaveNicknameForContainer( "Grpc.Core.AsyncClientStreamingCall", method.getAndSaveRequestTypeName(typeTable, methodContext.getNamer()), method.getAndSaveResponseTypeName(typeTable, methodContext.getNamer())); } else if (method.getResponseStreaming()) { // Server streaming return typeTable.getAndSaveNicknameForContainer( "Grpc.Core.AsyncServerStreamingCall", method.getOutputTypeName(methodContext.getTypeTable()).getFullName()); } else { throw new IllegalArgumentException("Expected some sort of streaming here."); } }
@Override public String getDynamicLangReturnTypeName(MethodContext methodContext) { MethodModel method = methodContext.getMethodModel(); MethodConfig methodConfig = methodContext.getMethodConfig(); if (method.isOutputTypeEmpty()) { return ""; } String classInfo = method.getOutputTypeName(methodContext.getTypeTable()).getFullName(); if (method.getResponseStreaming()) { return "Enumerable<" + classInfo + ">"; } if (methodConfig.isPageStreaming()) { String resourceTypeName = getModelTypeFormatter() .getFullNameForElementType(methodConfig.getPageStreaming().getResourcesField()); return "Google::Gax::PagedEnumerable<" + resourceTypeName + ">"; } if (methodConfig.isLongRunningOperation()) { return "Google::Gax::Operation"; } return classInfo; }