exprotoc
exprotoc copied to clipboard
Elixir Protocol Buffers Compiler
Exprotoc
Elixir protocol buffers compiler
Mix project options
To use exprotoc
, first include exprotoc
in your mixfile as a
dependency. Then, in the project property of your mix project, add
:exprotoc
to the list of compilers (e.g. compilers: [:exprotoc, :elixir, :app
).
To configure the :exprotoc
compiler prepass, there are three
exposed options: proto_out
, proto_files
, and proto_path
.
proto_out
Binary string that represents the directory generated code should
be output to. Defaults to the lib
folder.
proto_files
This should be a list of all the proto files you wish to turn into elixir code.
proto_path
List of directories in the order exprotoc
should visit to look
for proto files and imports.
Example mix.exs file
defmodule Example.Mixfile do
use Mix.Project
def project do
[ app: :example,
version: "0.0.1",
elixir: "~> 0.12.5",
compilers: [:exprotoc, :elixir, :app],
proto_files: ["example.proto"],
proto_path: ["priv"],
deps: deps ]
end
defp deps do
[{ :exprotoc, github: "jeremyong/exprotoc" }]
end
end
This will compile the Example
application with the generated code
for the proto file example.proto
. Because no proto_out
option
is specified, the generated code will be output to the lib folder.
Usage
Just access your message modules as you would a standard Elixir dict.
For example, with the following proto message:
package Example;
message Foo {
enum Bar {
Zap = 150;
}
required Foo a = 1;
required uint32 b = 2;
}
exprotoc
will create a module Example.Foo
and submodule
Example.Foo.Bar
.
You can create a new message simply with Example.Foo.new
or
Example.Foo.new a: Example.Foo.Bar.zap
.
You can access your message with the access protocol. For example:
message = Example.Foo.new a: Example.Foo.Bar.zap
IO.inspect message[:a] # Will output { Example.Foo.Bar, :zap }
IO.inspect message[:b] # Will output nil
message = Example.Foo.put message, :b, 150
IO.inspect message[:b] # Will output 150
All message modules export the encode
and decode
functions to turn
a message into an iolist or turn binary into a message.
Default values work as expected.
Repeated fields are represented as lists.