diff --git a/generator/src/main/java/org/sudu/protogen/generator/field/processors/PrimitiveFieldTypeProcessor.java b/generator/src/main/java/org/sudu/protogen/generator/field/processors/PrimitiveFieldTypeProcessor.java index d46187d..701675d 100644 --- a/generator/src/main/java/org/sudu/protogen/generator/field/processors/PrimitiveFieldTypeProcessor.java +++ b/generator/src/main/java/org/sudu/protogen/generator/field/processors/PrimitiveFieldTypeProcessor.java @@ -5,6 +5,7 @@ import org.jetbrains.annotations.NotNull; import org.sudu.protogen.descriptors.Field; import org.sudu.protogen.generator.GenerationContext; +import org.sudu.protogen.generator.type.BytesType; import org.sudu.protogen.generator.type.PrimitiveTypeModel; import org.sudu.protogen.generator.type.TypeModel; @@ -23,14 +24,12 @@ public PrimitiveFieldTypeProcessor(@NotNull GenerationContext context) { case DOUBLE -> boxIfNullable(field, TypeName.DOUBLE); case BOOLEAN -> boxIfNullable(field, TypeName.BOOLEAN); case STRING -> boxIfNullable(field, ClassName.get(String.class)); - case BYTE_STRING -> new TypeModel(ClassName.get("com.google.protobuf", "ByteString")); + case BYTE_STRING -> new BytesType(); default -> next(field); }; } private TypeModel boxIfNullable(@NotNull Field field, TypeName primitive) { - return field.isNullable() - ? new TypeModel(primitive.box()) - : new PrimitiveTypeModel(primitive); + return field.isNullable() ? new TypeModel(primitive.box()) : new PrimitiveTypeModel(primitive); } } diff --git a/generator/src/main/java/org/sudu/protogen/generator/type/BytesType.java b/generator/src/main/java/org/sudu/protogen/generator/type/BytesType.java new file mode 100644 index 0000000..45c592e --- /dev/null +++ b/generator/src/main/java/org/sudu/protogen/generator/type/BytesType.java @@ -0,0 +1,25 @@ +package org.sudu.protogen.generator.type; + +import com.google.protobuf.ByteString; +import com.squareup.javapoet.ArrayTypeName; +import com.squareup.javapoet.CodeBlock; +import com.squareup.javapoet.TypeName; + +import java.util.Set; + +public class BytesType extends TypeModel { + + public BytesType() { + super(ArrayTypeName.of(TypeName.BYTE)); + } + + @Override + public CodeBlock toGrpcTransformer(CodeBlock expr, Set usedDefinitions) { + return CodeBlock.of("$T.copyFrom($L)", ByteString.class, expr); + } + + @Override + public CodeBlock fromGrpcTransformer(CodeBlock expr, Set usedDefinitions) { + return CodeBlock.of("$L.toByteArray()", expr); + } +} diff --git a/tests/src/test/proto/general.proto b/tests/src/test/proto/general.proto index 6263aa2..ff323c2 100644 --- a/tests/src/test/proto/general.proto +++ b/tests/src/test/proto/general.proto @@ -71,4 +71,8 @@ message GrpcWithOneofs { int32 b= 3; } option (.protogen.builder_for_nullable) = false; +} + +message GrpcByteObject { + bytes content = 1; } \ No newline at end of file