Hi Ittai,

It sounds like you are expecting your plugin to emit proto files in text
format. Your code is assigning binary data into the file's content, and
what protoc does is just writing it to the files it creates. There's
nothing that would automatically detect that you are passing a
DescriptorProto and would transform that into text representation. If you
want the output to be in text format you need to manually create a string
with the file content you want.


On Fri, Feb 21, 2020 at 11:40 AM ittai zeidman <[email protected]> wrote:

> Hi,
> I have proto files which contain valid proto messages and services and my own 
> DSL which I want to transpile into proto messages and services.
> My idea is to invoke protoc and have it process "my proto" with a protoc 
> plugin that will emmit "standard proto" (which I'll later feed into protoc 
> again).
> The reason I'm going through the intermediate proto files is because we need 
> them to integrate with other systems.
>
> I'm trying to write this plugin using protobuf-java (jvm developer) but the 
> proto file that is emitted is incorrect.
>
> I think (and hope) I'm doing something stupid and maybe someone here can 
> point me to the right direction.
>
>
> Thanks in advance...
>
>
> Some of my code (to generate a hardcoded proto file with one message and
> one field):
>
>     DescriptorProtos.DescriptorProto protoMessage = 
> DescriptorProtos.DescriptorProto.newBuilder()
>       .setName("messageGreeting")
>       .addField(DescriptorProtos.FieldDescriptorProto.newBuilder()
>         .setName("greeting")
>         .setType(FieldDescriptorProto.Type.TYPE_STRING)
>         .setNumber(0)
>         .setDefaultValue("hi")
>         .build()
>       )
>       .build();
>     DescriptorProtos.FileDescriptorProto proto = 
> DescriptorProtos.FileDescriptorProto.newBuilder()
>       .addMessageType(
>         protoMessage
>       )
>       .build();
>     ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
>
>     proto.writeTo(byteArrayOutputStream); // should be lazy?
>
>     CodeGeneratorResponse.File file = CodeGeneratorResponse.File.newBuilder()
>       .setName("yo.proto")
>       .setContentBytes(ByteString.copyFrom(byteArrayOutputStream.toByteArray))
>
> //      I also tried:
>
> //      .mergeFrom(protoMessage)
> //      .setContent(byteArrayOutputStream.toString) // should be lazy?
> //      .mergeFrom(byteArrayOutputStream.toByteArray)
>       .build();
>     file.toByteArray
>
>
> Unfortunately what I get is:
>
> cat yo.proto:
> "%
> messageGreeting                                                               
>                                                                               
>                                                                               
>             greeting(        :hi%
>
> and in a text editor:
> 2225 0a0f 6d65 7373 6167 6547 7265 6574
> 696e 6712 120a 0867 7265 6574 696e 6718
> 0028 093a 0268 69
>
> --
> You received this message because you are subscribed to the Google Groups
> "Protocol Buffers" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to [email protected].
> To view this discussion on the web visit
> https://groups.google.com/d/msgid/protobuf/03f1f05d-a9ef-4490-bf6a-469f16212f9f%40googlegroups.com
> <https://groups.google.com/d/msgid/protobuf/03f1f05d-a9ef-4490-bf6a-469f16212f9f%40googlegroups.com?utm_medium=email&utm_source=footer>
> .
>


-- 
-Nadav

-- 
You received this message because you are subscribed to the Google Groups 
"Protocol Buffers" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/protobuf/CANZcNEryh5FBtZQ%3D4_EZuy5N21JeMxJ6NTjhR2T68DM5s9OWtw%40mail.gmail.com.

Reply via email to