use of io.confluent.kafka.schemaregistry.protobuf.dynamic.ServiceDefinition in project schema-registry by confluentinc.
the class ProtobufSchema method toDynamicSchema.
private static DynamicSchema toDynamicSchema(String name, ProtoFileElement rootElem, Map<String, ProtoFileElement> dependencies) {
if (log.isTraceEnabled()) {
log.trace("*** toDynamicSchema: {}", ProtobufSchemaUtils.toString(rootElem));
}
DynamicSchema.Builder schema = DynamicSchema.newBuilder();
try {
Syntax syntax = rootElem.getSyntax();
if (syntax != null) {
schema.setSyntax(syntax.toString());
}
if (rootElem.getPackageName() != null) {
schema.setPackage(rootElem.getPackageName());
}
for (TypeElement typeElem : rootElem.getTypes()) {
if (typeElem instanceof MessageElement) {
MessageDefinition message = toDynamicMessage(syntax, (MessageElement) typeElem);
schema.addMessageDefinition(message);
} else if (typeElem instanceof EnumElement) {
EnumDefinition enumer = toDynamicEnum((EnumElement) typeElem);
schema.addEnumDefinition(enumer);
}
}
for (ServiceElement serviceElement : rootElem.getServices()) {
ServiceDefinition service = toDynamicService(serviceElement);
schema.addServiceDefinition(service);
}
for (String ref : rootElem.getImports()) {
ProtoFileElement dep = dependencies.get(ref);
if (dep != null) {
schema.addDependency(ref);
schema.addSchema(toDynamicSchema(ref, dep, dependencies));
}
}
for (String ref : rootElem.getPublicImports()) {
ProtoFileElement dep = dependencies.get(ref);
if (dep != null) {
schema.addPublicDependency(ref);
schema.addSchema(toDynamicSchema(ref, dep, dependencies));
}
}
Map<String, OptionElement> options = mergeOptions(rootElem.getOptions());
OptionElement javaPackageName = options.get(JAVA_PACKAGE);
if (javaPackageName != null) {
schema.setJavaPackage(javaPackageName.getValue().toString());
}
OptionElement javaOuterClassname = options.get(JAVA_OUTER_CLASSNAME);
if (javaOuterClassname != null) {
schema.setJavaOuterClassname(javaOuterClassname.getValue().toString());
}
OptionElement javaMultipleFiles = options.get(JAVA_MULTIPLE_FILES);
if (javaMultipleFiles != null) {
schema.setJavaMultipleFiles(Boolean.parseBoolean(javaMultipleFiles.getValue().toString()));
}
OptionElement javaStringCheckUtf8 = options.get(JAVA_STRING_CHECK_UTF8);
if (javaStringCheckUtf8 != null) {
schema.setJavaStringCheckUtf8(Boolean.parseBoolean(javaStringCheckUtf8.getValue().toString()));
}
OptionElement optimizeFor = options.get(OPTIMIZE_FOR);
if (optimizeFor != null) {
schema.setOptimizeFor(OptimizeMode.valueOf(optimizeFor.getValue().toString()));
}
OptionElement goPackage = options.get(GO_PACKAGE);
if (goPackage != null) {
schema.setGoPackage(goPackage.getValue().toString());
}
OptionElement ccGenericServices = options.get(CC_GENERIC_SERVICES);
if (ccGenericServices != null) {
schema.setCcGenericServices(Boolean.parseBoolean(ccGenericServices.getValue().toString()));
}
OptionElement javaGenericServices = options.get(JAVA_GENERIC_SERVICES);
if (javaGenericServices != null) {
schema.setJavaGenericServices(Boolean.parseBoolean(javaGenericServices.getValue().toString()));
}
OptionElement pyGenericServices = options.get(PY_GENERIC_SERVICES);
if (pyGenericServices != null) {
schema.setPyGenericServices(Boolean.parseBoolean(pyGenericServices.getValue().toString()));
}
OptionElement phpGenericServices = options.get(PHP_GENERIC_SERVICES);
if (phpGenericServices != null) {
schema.setPhpGenericServices(Boolean.parseBoolean(phpGenericServices.getValue().toString()));
}
OptionElement isDeprecated = options.get(DEPRECATED);
if (isDeprecated != null) {
schema.setDeprecated(Boolean.parseBoolean(isDeprecated.getValue().toString()));
}
OptionElement ccEnableArenas = options.get(CC_ENABLE_ARENAS);
if (ccEnableArenas != null) {
schema.setCcEnableArenas(Boolean.parseBoolean(ccEnableArenas.getValue().toString()));
}
OptionElement objcClassPrefix = options.get(OBJC_CLASS_PREFIX);
if (objcClassPrefix != null) {
schema.setObjcClassPrefix(objcClassPrefix.getValue().toString());
}
OptionElement csharpNamespace = options.get(CSHARP_NAMESPACE);
if (csharpNamespace != null) {
schema.setCsharpNamespace(csharpNamespace.getValue().toString());
}
OptionElement swiftPrefix = options.get(SWIFT_PREFIX);
if (swiftPrefix != null) {
schema.setSwiftPrefix(swiftPrefix.getValue().toString());
}
OptionElement phpClassPrefix = options.get(PHP_CLASS_PREFIX);
if (phpClassPrefix != null) {
schema.setPhpClassPrefix(phpClassPrefix.getValue().toString());
}
OptionElement phpNamespace = options.get(PHP_NAMESPACE);
if (phpNamespace != null) {
schema.setPhpNamespace(phpNamespace.getValue().toString());
}
OptionElement phpMetadataNamespace = options.get(PHP_METADATA_NAMESPACE);
if (phpMetadataNamespace != null) {
schema.setPhpMetadataNamespace(phpMetadataNamespace.getValue().toString());
}
OptionElement rubyPackage = options.get(RUBY_PACKAGE);
if (rubyPackage != null) {
schema.setRubyPackage(rubyPackage.getValue().toString());
}
Optional<OptionElement> meta = findOption(CONFLUENT_FILE_META, options);
String doc = findDoc(meta);
Map<String, String> params = findParams(meta);
schema.setMeta(doc, params);
schema.setName(name);
return schema.build();
} catch (Descriptors.DescriptorValidationException e) {
throw new IllegalStateException(e);
}
}
use of io.confluent.kafka.schemaregistry.protobuf.dynamic.ServiceDefinition in project schema-registry by confluentinc.
the class ProtobufSchema method toDynamicService.
private static ServiceDefinition toDynamicService(ServiceElement serviceElement) {
ServiceDefinition.Builder service = ServiceDefinition.newBuilder(serviceElement.getName());
Map<String, OptionElement> serviceOptions = mergeOptions(serviceElement.getOptions());
Boolean isDeprecated = findOption(DEPRECATED, serviceOptions).map(o -> Boolean.valueOf(o.getValue().toString())).orElse(null);
if (isDeprecated != null) {
service.setDeprecated(isDeprecated);
}
for (RpcElement method : serviceElement.getRpcs()) {
Map<String, OptionElement> methodOptions = mergeOptions(method.getOptions());
Boolean isMethodDeprecated = findOption(DEPRECATED, methodOptions).map(o -> Boolean.valueOf(o.getValue().toString())).orElse(null);
IdempotencyLevel idempotencyLevel = findOption(IDEMPOTENCY_LEVEL, methodOptions).map(o -> IdempotencyLevel.valueOf(o.getValue().toString())).orElse(null);
service.addMethod(method.getName(), method.getRequestType(), method.getResponseType(), method.getRequestStreaming(), method.getResponseStreaming(), isMethodDeprecated, idempotencyLevel);
}
return service.build();
}
Aggregations