use of org.ballerinalang.net.grpc.proto.definition.Service in project ballerina by ballerina-lang.
the class ServiceProtoUtils method getStreamingServiceDefinition.
private static Service getStreamingServiceDefinition(ServiceNode serviceNode, ServiceConfiguration serviceConfig, File.Builder fileBuilder) throws GrpcServerException {
// Protobuf service definition builder.
Service.Builder serviceBuilder = Service.newBuilder(serviceNode.getName().getValue());
Message requestMessage = null;
Message responseMessage = null;
for (ResourceNode resourceNode : serviceNode.getResources()) {
if (ON_MESSAGE_RESOURCE.equals(resourceNode.getName().getValue())) {
requestMessage = getRequestMessage(resourceNode);
Message respMsg = getResponseMessage(resourceNode);
if (respMsg != null && !(MessageKind.EMPTY.equals(respMsg.getMessageKind()))) {
responseMessage = getResponseMessage(resourceNode);
break;
}
}
if (ON_COMPLETE_RESOURCE.equals(resourceNode.getName().getValue())) {
Message respMsg = getResponseMessage(resourceNode);
if (respMsg != null && !(MessageKind.EMPTY.equals(respMsg.getMessageKind()))) {
responseMessage = respMsg;
}
}
}
if (requestMessage == null) {
throw new GrpcServerException("Cannot find request message definition for streaming service: " + serviceNode.getName().getValue());
}
if (responseMessage == null) {
responseMessage = generateMessageDefinition(new BNullType());
/*throw new GrpcServerException("Cannot find response message definition for streaming service: " +
serviceNode.getName().getValue());*/
}
if (requestMessage.getMessageKind() == MessageKind.USER_DEFINED) {
if (!fileBuilder.getRegisteredMessages().contains(requestMessage.getDescriptorProto())) {
fileBuilder.setMessage(requestMessage);
}
}
if (requestMessage.getDependency() != null) {
if (!fileBuilder.getRegisteredDependencies().contains(requestMessage.getDependency())) {
fileBuilder.setDependeny(requestMessage.getDependency());
}
}
if (responseMessage.getDependency() != null) {
if (!fileBuilder.getRegisteredDependencies().contains(responseMessage.getDependency())) {
fileBuilder.setDependeny(responseMessage.getDependency());
}
}
Method resourceMethod = Method.newBuilder(serviceConfig.getRpcEndpoint()).setClientStreaming(serviceConfig.isClientStreaming()).setServerStreaming(serviceConfig.isServerStreaming()).setInputType(requestMessage.getMessageType()).setOutputType(responseMessage.getMessageType()).build();
serviceBuilder.addMethod(resourceMethod);
return serviceBuilder.build();
}
use of org.ballerinalang.net.grpc.proto.definition.Service in project ballerina by ballerina-lang.
the class ServiceProtoUtils method generateProtoDefinition.
static File generateProtoDefinition(ServiceNode serviceNode) throws GrpcServerException {
// Protobuf file definition builder.
String packageName = serviceNode.getPosition().getSource().getPackageName();
File.Builder fileBuilder;
if (!".".equals(packageName)) {
fileBuilder = File.newBuilder(serviceNode.getName() + ServiceProtoConstants.PROTO_FILE_EXTENSION).setSyntax(ServiceProtoConstants.PROTOCOL_SYNTAX).setPackage(serviceNode.getPosition().getSource().getPackageName());
} else {
fileBuilder = File.newBuilder(serviceNode.getName() + ServiceProtoConstants.PROTO_FILE_EXTENSION).setSyntax(ServiceProtoConstants.PROTOCOL_SYNTAX);
}
ServiceConfiguration serviceConfig = getServiceConfiguration(serviceNode);
Service serviceDefinition;
if (serviceConfig.getRpcEndpoint() != null && (serviceConfig.isClientStreaming())) {
serviceDefinition = getStreamingServiceDefinition(serviceNode, serviceConfig, fileBuilder);
} else {
serviceDefinition = getUnaryServiceDefinition(serviceNode, fileBuilder);
}
fileBuilder.setService(serviceDefinition);
return fileBuilder.build();
}
use of org.ballerinalang.net.grpc.proto.definition.Service in project ballerina by ballerina-lang.
the class ServiceProtoUtils method getUnaryServiceDefinition.
private static Service getUnaryServiceDefinition(ServiceNode serviceNode, File.Builder fileBuilder) throws GrpcServerException {
// Protobuf service definition builder.
Service.Builder serviceBuilder = Service.newBuilder(serviceNode.getName().getValue());
for (ResourceNode resourceNode : serviceNode.getResources()) {
Message requestMessage = getRequestMessage(resourceNode);
if (requestMessage.getMessageKind() == MessageKind.USER_DEFINED) {
if (!fileBuilder.getRegisteredMessages().contains(requestMessage.getDescriptorProto())) {
fileBuilder.setMessage(requestMessage);
}
}
if (requestMessage.getDependency() != null) {
if (!fileBuilder.getRegisteredDependencies().contains(requestMessage.getDependency())) {
fileBuilder.setDependeny(requestMessage.getDependency());
}
}
Message responseMessage = getResponseMessage(resourceNode);
if (responseMessage == null) {
throw new GrpcServerException("Connection send expression not found in resource body");
}
if (responseMessage.getMessageKind() == MessageKind.USER_DEFINED) {
if (!fileBuilder.getRegisteredMessages().contains(responseMessage.getDescriptorProto())) {
fileBuilder.setMessage(responseMessage);
}
}
if (responseMessage.getDependency() != null) {
if (!fileBuilder.getRegisteredDependencies().contains(responseMessage.getDependency())) {
fileBuilder.setDependeny(responseMessage.getDependency());
}
}
boolean serverStreaming = isServerStreaming(resourceNode);
Method resourceMethod = Method.newBuilder(resourceNode.getName().getValue()).setClientStreaming(false).setServerStreaming(serverStreaming).setInputType(requestMessage.getMessageType()).setOutputType(responseMessage.getMessageType()).build();
serviceBuilder.addMethod(resourceMethod);
}
return serviceBuilder.build();
}
Aggregations