Skip to content

Commit 93c8a01

Browse files
authored
Fix repeated enum field generating "[[]]" into typespec (#140)
1 parent 18ef809 commit 93c8a01

File tree

3 files changed

+30
-2
lines changed

3 files changed

+30
-2
lines changed

lib/protobuf/protoc/generator/message.ex

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,7 @@ defmodule Protobuf.Protoc.Generator.Message do
115115
{fmt_type_name(f.name, longest_width), "{atom, any}"}
116116
end)
117117

118+
118119
types =
119120
types ++
120121
Enum.map(fields, fn f ->
@@ -153,7 +154,7 @@ defmodule Protobuf.Protoc.Generator.Message do
153154
end
154155

155156
defp fmt_type(%{label: "repeated", type_enum: type_enum, type: type}) do
156-
"[#{type_to_spec(type_enum, type, true)}]"
157+
type_to_spec(type_enum, type, true)
157158
end
158159

159160
defp fmt_type(%{type_enum: type_enum, type: type}) do

lib/protobuf/type_util.ex

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ defmodule Protobuf.TypeUtil do
3636
def enum_to_spec(:TYPE_SINT32), do: "integer"
3737
def enum_to_spec(:TYPE_SINT64), do: "integer"
3838
def enum_to_spec(_), do: "any"
39-
def enum_to_spec(:TYPE_MESSAGE, type, true = _repeated), do: "#{type}.t"
39+
def enum_to_spec(:TYPE_MESSAGE, type, true = _repeated), do: "[#{type}.t]"
4040
def enum_to_spec(:TYPE_MESSAGE, type, false = _repeated), do: "#{type}.t | nil"
4141
def enum_to_spec(:TYPE_ENUM, type, true = _repeated), do: "[#{type}.t]"
4242
def enum_to_spec(:TYPE_ENUM, type, false = _repeated), do: "#{type}.t"

test/protobuf/protoc/generator/message_test.exs

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -515,4 +515,31 @@ defmodule Protobuf.Protoc.Generator.MessageTest do
515515
assert msg =~ "field :the_field_name, 1, required: true, type: :string\n"
516516
end
517517
end
518+
519+
test "generate/2 repeated enum field in typespec" do
520+
ctx = %Context{
521+
package: "foo_bar.ab_cd",
522+
dep_type_mapping: %{
523+
".foo_bar.ab_cd.EnumFoo" => %{type_name: "FooBar.AbCd.EnumFoo"}
524+
}
525+
}
526+
527+
desc =
528+
Google.Protobuf.DescriptorProto.new(
529+
name: "Foo",
530+
field: [
531+
Google.Protobuf.FieldDescriptorProto.new(
532+
name: "a",
533+
json_name: "a",
534+
number: 1,
535+
type: :TYPE_ENUM,
536+
label: :LABEL_REPEATED,
537+
type_name: ".foo_bar.ab_cd.EnumFoo"
538+
)
539+
]
540+
)
541+
542+
{[], [msg]} = Generator.generate(ctx, desc)
543+
assert msg =~ "a: [FooBar.AbCd.EnumFoo.t]"
544+
end
518545
end

0 commit comments

Comments
 (0)