Packages
protox
1.7.8
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.
def split_oneofs(fields) do
{all_oneofs, others} =
Enum.split_with(fields, fn
%Field{kind: {:oneof, _}} -> true
%Field{} -> false
end)
{proto3_optionals, oneofs} =
Enum.split_with(all_oneofs, fn
%Field{label: :proto3_optional} -> true
%Field{} -> false
end)
grouped_oneofs = Enum.group_by(oneofs, &oneof_group_by/1)
%{oneofs: grouped_oneofs, proto3_optionals: proto3_optionals, others: others}
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{kind: {:oneof, parent}}), do: parent
end