Skip to content

Commit

Permalink
refactor: camelize names as soon as possible
Browse files Browse the repository at this point in the history
  • Loading branch information
ahamez committed Sep 27, 2024
1 parent 9433fbf commit 48f960e
Showing 1 changed file with 14 additions and 15 deletions.
29 changes: 14 additions & 15 deletions lib/protox/parse.ex
Original file line number Diff line number Diff line change
Expand Up @@ -46,30 +46,25 @@ defmodule Protox.Parse do
%{enums: filtered_enums, messages: filtered_messages}
end

# Canonization: camelization, fqdn, prepend with namespace
# Prepend with namespace, resolve pending types and set default values
defp post_process(acc, namespace_or_nil) do
camel_enums =
for {ename, constants} <- acc.enums, into: %{} do
{Enum.map(ename, &Macro.camelize/1), constants}
end

processed_messages =
for {msg_name, msg = %Message{}} <- acc.messages do
name = Module.concat([namespace_or_nil | Enum.map(msg_name, &Macro.camelize/1)])
name = Module.concat([namespace_or_nil | msg_name])

fields =
Enum.map(msg.fields, fn %Field{} = field ->
field
|> resolve_types(camel_enums)
|> set_default_value(camel_enums)
|> resolve_types(acc.enums)
|> set_default_value(acc.enums)
|> concat_names(namespace_or_nil)
end)

%Message{msg | name: name, fields: fields}
end

processsed_enums =
for {ename, constants} <- camel_enums do
for {ename, constants} <- acc.enums do
{Module.concat([namespace_or_nil | ename]), constants}
end

Expand All @@ -78,7 +73,7 @@ defmodule Protox.Parse do

defp resolve_types(%Field{type: {:type_to_resolve, tname}} = field, enums) do
if Map.has_key?(enums, tname) do
%Field{field | type: {:enum, Enum.map(tname, &Macro.camelize/1)}}
%Field{field | type: {:enum, tname}}
else
%Field{field | type: {:message, tname}}
end
Expand Down Expand Up @@ -149,7 +144,7 @@ defmodule Protox.Parse do
prefix =
case descriptor.package do
"" -> []
p -> p |> String.split(".") |> Enum.map(&Macro.camelize(&1))
p -> p |> String.split(".") |> camelize()
end

acc
Expand All @@ -165,7 +160,7 @@ defmodule Protox.Parse do
end

defp make_enum(acc, prefix, descriptor) do
enum_name = prefix ++ [descriptor.name]
enum_name = prefix ++ camelize([descriptor.name])
enum_constants = [] |> make_enum_constants(descriptor.value) |> Enum.reverse()

%{acc | enums: Map.put(acc.enums, enum_name, enum_constants)}
Expand Down Expand Up @@ -201,7 +196,7 @@ defmodule Protox.Parse do
end

defp make_message(acc, syntax, prefix, descriptor, options) do
name = prefix ++ [descriptor.name]
name = prefix ++ camelize([descriptor.name])

acc
|> add_message(syntax, name, options)
Expand Down Expand Up @@ -312,7 +307,7 @@ defmodule Protox.Parse do
name
|> String.split(".")
|> tl()
|> Enum.map(&Macro.camelize/1)
|> camelize()
end

import Protox.Guards
Expand Down Expand Up @@ -392,4 +387,8 @@ defmodule Protox.Parse do
defp get_default_value(f) do
f.default_value |> Integer.parse() |> elem(0)
end

defp camelize(name) when is_list(name) do
Enum.map(name, &Macro.camelize/1)
end
end

0 comments on commit 48f960e

Please sign in to comment.