use of io.confluent.kafka.schemaregistry.protobuf.dynamic.EnumDefinition in project schema-registry by confluentinc.
the class ProtobufData method enumDefinitionFromConnectSchema.
private EnumDefinition enumDefinitionFromConnectSchema(FromConnectContext ctx, DynamicSchema.Builder schema, Schema enumElem) {
String enumName = getUnqualifiedName(ctx, enumElem.name());
EnumDefinition.Builder enumBuilder = EnumDefinition.newBuilder(enumName);
String paramName = generalizedSumTypeSupport ? GENERALIZED_TYPE_ENUM : PROTOBUF_TYPE_ENUM;
for (Map.Entry<String, String> entry : enumElem.parameters().entrySet()) {
if (entry.getKey().startsWith(paramName + ".")) {
String name = entry.getKey().substring(paramName.length() + 1);
int tag = Integer.parseInt(entry.getValue());
enumBuilder.addValue(name, tag);
}
}
return enumBuilder.build();
}
use of io.confluent.kafka.schemaregistry.protobuf.dynamic.EnumDefinition in project schema-registry by confluentinc.
the class ProtobufSchema method toDynamicEnum.
private static EnumDefinition toDynamicEnum(EnumElement enumElem) {
Map<String, OptionElement> enumOptions = mergeOptions(enumElem.getOptions());
Boolean allowAlias = findOption(ALLOW_ALIAS, enumOptions).map(o -> Boolean.valueOf(o.getValue().toString())).orElse(null);
Boolean isDeprecated = findOption(DEPRECATED, enumOptions).map(o -> Boolean.valueOf(o.getValue().toString())).orElse(null);
EnumDefinition.Builder enumer = EnumDefinition.newBuilder(enumElem.getName(), allowAlias, isDeprecated);
for (ReservedElement reserved : enumElem.getReserveds()) {
for (Object elem : reserved.getValues()) {
if (elem instanceof String) {
enumer.addReservedName((String) elem);
} else if (elem instanceof Integer) {
int tag = (Integer) elem;
enumer.addReservedRange(tag, tag + 1);
} else if (elem instanceof IntRange) {
IntRange range = (IntRange) elem;
enumer.addReservedRange(range.getStart(), range.getEndInclusive() + 1);
} else {
throw new IllegalStateException("Unsupported reserved type: " + elem.getClass().getName());
}
}
}
for (EnumConstantElement constant : enumElem.getConstants()) {
Map<String, OptionElement> constantOptions = mergeOptions(constant.getOptions());
Boolean isConstDeprecated = findOption(DEPRECATED, constantOptions).map(o -> Boolean.valueOf(o.getValue().toString())).orElse(null);
Optional<OptionElement> meta = findOption(CONFLUENT_ENUM_VALUE_META, constantOptions);
String doc = findDoc(meta);
Map<String, String> params = findParams(meta);
enumer.addValue(constant.getName(), constant.getTag(), doc, params, isConstDeprecated);
}
Optional<OptionElement> meta = findOption(CONFLUENT_ENUM_META, enumOptions);
String doc = findDoc(meta);
Map<String, String> params = findParams(meta);
enumer.setMeta(doc, params);
return enumer.build();
}
use of io.confluent.kafka.schemaregistry.protobuf.dynamic.EnumDefinition 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);
}
}
Aggregations