Is a tool for define records from a Google Protocol Buffer definitions files.
Yet:
- Load protobuf on file or string;
- Respects the namespace of messages;
- Allows you to specify which modules should be loaded in the definition of records;
- Uses the gpb to parse;
Still to come:
- Support to importing definitions;
- Its own version of encode and decode (for now uses the gpb)
Defining the records from a string:
defmodule Messages do
use Protobuf, "
message Msg {
message SubMsg {
required uint32 value = 1;
}
enum Version {
V1 = 1;
V2 = 2;
}
required Version version = 2;
optional SubMsg sub = 1;
}
"
end
Using the definition in iex:
iex> msg = Messages.Msg.new(version: :'V2')
Messages.Msg[version: :V2, sub: nil]
iex> msg.encode
<<16, 2>>
iex> msg = msg.sub Messages.Msg.SubMsg.new(value: 10)
Messages.Msg[version: :V2, sub: Messages.Msg.SubMsg[value: 10]]
iex> msg.encode
<<16, 2, 10, 2, 8, 10>>
iex> Messages.Msg.decode(msg.encode)
Messages.Msg[version: :V2, sub: Messages.Msg.SubMsg[value: 10]]
defmodule Messages do
use Protobuf, from: Path.expand("../proto/messages.proto", __DIR__)
end
defmodule Messages do
use Protobuf, "
message Msg {
enum Version {
V1 = 1;
V2 = 1;
}
required Version v = 1;
}
"
defmodule MsgHelpers do
defmacro __using__(_opts) do
quote do
Record.import __MODULE__, as: :msg
def new_v1 do
msg(v: :V1)
end
end
end
end
use_in "Msg", MsgHelpers
end
iex> Messages.Msg.new_v1
Messages.Msg[v: :V1]
"Azuki" and the Azuki logo are copyright (c) 2013 Azuki Serviços de Internet LTDA..
Elixir Protobuf source code is released under Apache 2 License.
Check LEGAL and LICENSE files for more information.