Packages
protox
1.6.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/defs.ex
defmodule Protox.Defs do
@moduledoc false
# Internal. Helpers to work with list of fields.
alias Protox.Field
# Extract oneofs and regroup them by parent field.
@spec split_oneofs(list(Field.t())) :: {list(Field.t()), list(Field.t())}
def split_oneofs(fields) do
{oneofs, fields} =
Enum.split_with(fields, fn
%Field{kind: {:oneof, _}} -> true
%Field{} -> false
end)
grouped_oneofs =
oneofs
|> Enum.group_by(fn field -> oneof_group_by(field) end)
|> Map.to_list()
{grouped_oneofs, fields}
end
@spec split_maps(list(Field.t())) :: {list(Field.t()), list(Field.t())}
def split_maps(fields) do
Enum.split_with(
fields,
fn field -> match?(%Field{kind: :map}, field) end
)
end
defp oneof_group_by(%Field{label: :proto3_optional, name: name}), do: name
defp oneof_group_by(%Field{kind: {:oneof, parent}}), do: parent
end