Re: [protobuf] How to handle options in compiler plugin?

2018-08-30 Thread Ankit Patel
Hi Kenton,

I am trying to do something similiar. I am writing a java plugin and I have 
defined my custom service options and method options but inside my plugin I 
see I only have access to FileDescriptorProto and not the FileDescriptor 
itself. when I try to access these options as you just suggested from the 
FileDecriptorProto they are null. Please recommend on what is the suggested 
solution to make this work. Thanks

On Tuesday, April 20, 2010 at 5:53:37 PM UTC-7, Kenton Varda wrote:
>
> You do not need to compile your option declarations into protoc.  You only 
> need to compile them into your plugin binary.  Files which use your options 
> must import the .proto file that defines them.  protoc will then parse the 
> option definitions dynamically.
>
> For example, you could create a file php_options.proto:
>
>   import "google/protobuf/descriptor.proto";
>
>   package protobuf_php;
>
>   message PhpFileOptions {
> optional bool skip_unknown = 1;
> optional string namespace = 2;
>   }
>
>   extend google.protobuf.FileOptions {
> optional PhpFieldOptions file_opt = 1004;
>   }
>
> Now users could do:
>
>   import "php_options.proto"
>
>   option (protobuf_php.file_opt.skip_unknown) = true;
>   option (protobuf_php.file_opt.namespace) = "My/Namespace";
>
> In your plugin, you can read these options like:
>
>
>   
> file_descriptor->options().GetExtension(protobuf_php::file_opt).skip_unknown()
>
> Note that the number 1004 above is a number that I have assigned 
> specifically to you!  Usually people have to e-mail me to request these (as 
> the comments in descriptor.proto say), but rather than wait for you to 
> actually do so I went ahead and assigned you a number.  Note that you can 
> also define other kinds of options (e.g. field options); use extension 
> number 1004 for these as well.  Please let me know your project URL once it 
> has one so that I can keep track of it.
>
> On Tue, Apr 20, 2010 at 3:08 PM, Andrew Brampton  > wrote:
>
>> Thanks for your reply Kenton,
>>
>> I've been going round in circles with the documentation but completely
>> missed the section on custom options. Ok, so that has helped a little
>> but I'm still not sure how to apply it. So here is some more
>> information. I have the sample addressbook.proto file and at the top
>> it has a couple of options:
>>
>> option java_package = "com.example.tutorial";
>> option java_outer_classname = "AddressBookProtos";
>>
>> All I want to do is add another line like so:
>>
>> option php_skip_unknown = true;
>> or something like:
>> option php_namespace = "My/Namespace";
>>
>> Which, in the first case, would tell my compiler to skip over unknown
>> fields instead of storing them, and the second put the generated files
>> in a particular namespace.
>>
>> Now I see from the documentation I can extend FileOptions, but where
>> do I save the proto file with my new options in it? Would I need to
>> recompile the protoc compiler? At the moment I'm using protoc
>> installed from apt, and giving it the following command line:
>>
>> protoc --php_out . --plugin=protoc-gen-php=./protoc-gen-php my.proto
>>
>> Thanks for any guidance you can give me.
>> Andrew
>>
>> On Tue, Apr 20, 2010 at 10:38 PM, Kenton Varda > > wrote:
>> > It sounds like you are using custom options incorrectly, independent of 
>> your
>> > plugin.  That error message is being produced by protoc before it even 
>> tries
>> > to call your plugin.  Please double-check the docs on custom options. 
>>  If
>> > you can't figure out what's wrong, show us the .proto code you are 
>> using to
>> > define and then use your option.
>> >
>> > On Tue, Apr 20, 2010 at 4:24 AM, Andrew Brampton > > wrote:
>> >>
>> >> Hi,
>> >> I've nearly finished writing a compiler plugin for generating PHP
>> >> code. I now wanted to support some additional options. However, I'm
>> >> not sure how to begin. When I have a custom option in my proto file,
>> >> protoc seems to die with this error:
>> >>
>> >> my.proto:2:8: Option "php_skip_unknown" unknown.
>> >>
>> >> This seems to happen before CodeGenerator's generate method is called.
>> >> So I'm not sure how I handle this.
>> >>
>> >> Also, are there some test proto files, with binary data, which I can
>> >> use to fully validate my compiler?
>> >>
>> >> thanks
>> >> Andrew
>> >>
>> >> --
>> >> You received this message because you are subscribed to the Google 
>> Groups
>> >> "Protocol Buffers" group.
>> >> To post to this group, send email to prot...@googlegroups.com 
>> .
>> >> To unsubscribe from this group, send email to
>> >> protobuf+u...@googlegroups.com .
>> >> For more options, visit this group at
>> >> http://groups.google.com/group/protobuf?hl=en.
>> >>
>> >
>> >
>>
>
> -- 
> You received this message because you are subscribed to the Google Groups 
> "Protocol Buffers" group.
> To post to this group, send email to prot...@googlegroups.com 
> .
> To unsubscribe from this group, send email to 
> protobuf+u...@googlegroups.com 

Re: [protobuf] "needs to have dll-interface" error when using protobuf with Visual C++ 2017

2018-08-30 Thread Jim Gallogly
What in the manual did you read. Searching for the same issue.

On Monday, July 2, 2018 at 9:19:38 AM UTC-4, John Lilley wrote:
>
> Never mind, I RT'd the FM :-)
> john
>
>
> On Sun, Jul 1, 2018 at 2:37 PM John Lilley > 
> wrote:
>
>> I have installed protobuf 3.5.1 using the "vcpkg" method on Windows.  I 
>> can generate code, but when I try to compile I get many errors like:
>>
>> 1>f:\vcpkg\installed\x64-windows\include\google\protobuf\stubs\logging.h(100):
>>  
>> warning C4251: 'google::protobuf::internal::LogMessage::message_': class 
>> 'std::basic_string,std::allocator>' needs 
>> to have dll-interface to be used by clients of class 
>> 'google::protobuf::internal::LogMessage'
>> 1>c:\program files (x86)\microsoft visual 
>> studio\2017\professional\vc\tools\msvc\14.14.26428\include\xstring(4347): 
>> note: see declaration of 
>> 'std::basic_string,std::allocator>'
>>
>> I can use std::string elsewhere in my code without this issue, so I 
>> suspect that I need to set some preprocessor flag(s) in my project?  
>>
>> The Readme says "When compiling your project, make sure to #define 
>> PROTOBUF_USE_DLLS".  However, doing so has no effect other than to report a 
>> duplicate macro definition warning.
>> Thanks
>> john
>>
>>
>>
>> -- 
>> 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 protobuf+u...@googlegroups.com .
>> To post to this group, send email to prot...@googlegroups.com 
>> .
>> Visit this group at https://groups.google.com/group/protobuf.
>> For more options, visit https://groups.google.com/d/optout.
>>
>

-- 
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 protobuf+unsubscr...@googlegroups.com.
To post to this group, send email to protobuf@googlegroups.com.
Visit this group at https://groups.google.com/group/protobuf.
For more options, visit https://groups.google.com/d/optout.


Re: [protobuf] Re: Message imports from different locations and stub generation

2018-08-30 Thread Dzintars Klavins
Thank You for reply.

I already figured out this stuff. Real problem was/is in VS Code terminal. 
When i run protoc command from VS Code there is some issue with imports ... 
or not sure with what exactly.
When no .proto imports are used, VS Code terminal was working just great 
with protoc.
But after i included some .proto imports from other directories i get that 
proto-gen-go error listed above.

So at the end i tried to run the same command from CMD and PowerShell stand 
alone terminals and it works just great.
So, the issue is related to VS Code.

My Environment Variables are set correctly.


On Tuesday, August 28, 2018 at 10:42:17 PM UTC+3, Feng Xiao wrote:
>
> I have written some explanation of protoc "-I" flag and import path here:
> https://github.com/xfxyjwf/protobuf/blob/protoc/docs/protoc.md
>
>  To run protoc correctly:
> 1. Determine the import path for every one of your .proto files. In your 
> case, I think it should be "dms/v1/dms.proto" and "metric/protobuf.proto".
> 2. Use the chosen import paths in all your .proto files. E.g., change your 
> dms.proto to use 'import "metric/protobuf.proto";' instead.
> 3. Construct "--proto_path" arguments where protoc can find the imported 
> files using the chosen import paths. In your case, it should be "-I." which 
> can be omitted because it's the default.
>
> Putting everything together:
> a. change dms.proto to do 'import "metric/protobuf.proto";'
> b. run 'protoc dms/v1/dms.proto --go_out=..."
>
> and it should work.
>
> The other error:
> --go_out: protoc-gen-go: The system cannot find the file specified.
>
> is about missing the go protoc plugin. You should be able to fix that by 
> installing the right plugin and make sure it can be found in PATH. If in 
> doubt, check:
>
> $ which protoc-gen-go
>
> If it prints nothing, your go protoc plugin is not installed correctly.
>
> On Tue, Aug 28, 2018 at 5:05 AM Dzintars Klavins  > wrote:
>
>> And when i am using:
>>>
>>  
>> protoc --proto_path=dms/v1 dms.proto --go_out=plugins=grpc:D:\Code\Go\src
>>  
>>
>> i get a error: 
>>
>> protobuf.proto: File not found.
>> dms.proto: Import "protobuf.proto" was not found or had errors.
>> dms.proto:17:66: "domain.protobuf.Empty" is not defined.
>>
>> -- 
>> 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 protobuf+u...@googlegroups.com .
>> To post to this group, send email to prot...@googlegroups.com 
>> .
>> Visit this group at https://groups.google.com/group/protobuf.
>> For more options, visit https://groups.google.com/d/optout.
>>
>

-- 
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 protobuf+unsubscr...@googlegroups.com.
To post to this group, send email to protobuf@googlegroups.com.
Visit this group at https://groups.google.com/group/protobuf.
For more options, visit https://groups.google.com/d/optout.