Packages
protox
2.0.5
2.0.9
2.0.8
2.0.7
2.0.6
2.0.5
2.0.4
2.0.3
2.0.2
2.0.1
2.0.0
2.0.0-dev
1.7.8
1.7.7
1.7.6
1.7.5
1.7.4
retired
1.7.3
1.7.2
1.7.1
1.7.0
1.6.10
1.6.9
1.6.8
1.6.7
1.6.6
1.6.5
1.6.4
1.6.3
1.6.2
1.6.1
1.6.0
1.5.1
1.5.0
1.4.0
1.3.2
1.3.1
1.3.0
1.2.4
1.2.3
1.2.2
1.2.1
1.2.0
1.1.1
1.1.0
1.0.0
0.25.0
0.24.0
0.23.1
0.23.0
0.22.0
0.21.0
0.20.0
0.19.1
0.19.0
0.18.0
0.17.0
0.16.2
0.16.1
0.16.0
0.15.2
0.15.1
0.15.0
0.14.0
0.13.0
0.12.1
0.12.0
0.11.1
0.11.0
0.10.0
0.9.1
0.9.0
0.8.0
0.7.1
0.7.0
A fast, easy to use and 100% conformant Elixir library for Google Protocol Buffers (aka protobuf)
Current section
Files
Jump to
Current section
Files
lib/protox/field.ex
defmodule Protox.Field do
@moduledoc """
The definition of a protobuf field (e.g. tag, type, etc.).
"""
@type t() :: %__MODULE__{
tag: number(),
label: Protox.Types.label(),
name: atom(),
kind: Protox.Kind.t(),
type: Protox.Types.type(),
extender: nil | atom()
}
@enforce_keys [:tag, :label, :name, :kind, :type]
defstruct @enforce_keys ++ [:extender]
@doc false
@spec new!(keyword()) :: %__MODULE__{} | no_return()
def new!(attrs) do
%__MODULE__{
tag: fetch_tag!(attrs),
label: fetch_label!(attrs),
name: Keyword.fetch!(attrs, :name),
kind: Keyword.fetch!(attrs, :kind),
type: Keyword.fetch!(attrs, :type),
extender: Keyword.get(attrs, :extender)
}
end
# -- Private
defp fetch_tag!(attrs) do
tag = Keyword.fetch!(attrs, :tag)
if tag == 0 do
raise Protox.IllegalTagError.new()
else
tag
end
end
@labels [:none, :optional, :proto3_optional, :repeated, :required, nil]
defp fetch_label!(attrs) do
label = Keyword.get(attrs, :label)
if label in @labels do
label
else
raise Protox.InvalidFieldAttributeError.new(:label, @labels, label)
end
end
end