xumingthepoet / elixir-protobuf

An implementation of Google's Protocol Buffers in Elixir

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Elixir Protobuf

wercker status

Is a tool for defining records from a Google Protocol Buffer definition file.

Features

Current:

  • Load protobuf from file or string
  • Respects the namespace of messages
  • Allows you to specify which modules should be loaded in the definition of records
  • Uses gpb to parse

TODO:

  • Support importing definitions

Examples

Define 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
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]]

Define from a file

defmodule Messages do
  use Protobuf, from: Path.expand("../proto/messages.proto", __DIR__)
end

Use in records

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.defmacros :msg, @record_fields, __ENV__, __MODULE__

        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]

License

elixir-protobuf source code is released under Apache 2 License.

Check LICENSE files for more information.

About

An implementation of Google's Protocol Buffers in Elixir

License:Apache License 2.0


Languages

Language:Elixir 100.0%