Current section

Files

Jump to
exproto lib protoc generator util.ex
Raw

lib/protoc/generator/util.ex

defmodule Protobuf.Protoc.Generator.Util do
def trans_name(name) do
Macro.camelize(name)
end
def join_name(list) do
Enum.join(list, ".")
end
def attach_pkg(name, ""), do: name
def attach_pkg(name, pkg), do: normalize_pkg_name(pkg) <> "." <> name
def attach_ns(name, nil), do: name
def attach_ns(name, ""), do: name
def attach_ns(name, [ns]), do: ns <> "." <> name
def attach_ns(name, ns), do: ns <> "." <> name
def options_to_str(opts) do
opts
|> Enum.filter(fn {_, v} -> v end)
|> Enum.map(fn {k, v} -> "#{k}: #{print(v)}" end)
|> Enum.join(", ")
end
def trans_type_name(name, ctx) do
case find_type_package(name, ctx) do
"" ->
name |> String.trim_leading(".") |> normalize_type_name
found_pkg ->
name = name |> String.trim_leading("." <> found_pkg <> ".") |> normalize_type_name
pkg_name = normalize_pkg_name(found_pkg) <> "." <> name
attach_ns(pkg_name, ctx.custom_namespace)
end
end
defp normalize_pkg_name(pkg) do
pkg
|> String.split(".")
|> Enum.map(&Macro.camelize(&1))
|> Enum.join(".")
end
defp find_type_package("." <> name, %{dep_pkgs: pkgs, package: pkg}) do
case find_package_in_deps(name, pkgs) do
nil -> pkg
found_pkg -> found_pkg
end
end
defp find_type_package(_, %{package: pkg}), do: pkg
defp find_package_in_deps(_, []), do: nil
defp find_package_in_deps(name, [pkg | tail]) do
if String.starts_with?(name, pkg <> ".") do
pkg
else
find_package_in_deps(name, tail)
end
end
defp normalize_type_name(name) do
name
|> String.split(".")
|> Enum.map(&Macro.camelize(&1))
|> Enum.join(".")
end
def print(v) when is_atom(v), do: inspect(v)
def print(v), do: v
end