Current section
Files
Jump to
Current section
Files
lib/application.ex
defmodule Protobuf.Application do
use Application
@moduledoc """
When extensions feature is enabled, all modules are scanned to fetch
runtime information for extensions, see `Protobuf.Extension` for details.
No children are created now.
"""
@doc false
def start(_type, _args) do
if Application.get_env(:protobuf, :extensions, :disabled) == :enabled do
mods = get_all_modules()
Protobuf.Extension.cal_extensions(mods)
else
# Extensions in Protobuf should always be calculated for generating code
{:ok, mods} = :application.get_key(:protobuf, :modules)
Protobuf.Extension.cal_extensions(mods)
end
children = []
Supervisor.start_link(children, strategy: :one_for_one)
end
defp get_all_modules() do
case :code.get_mode() do
:embedded ->
:erlang.loaded()
:interactive ->
for {app, _, _} <- Application.loaded_applications() do
{:ok, modules} = :application.get_key(app, :modules)
modules
end
|> Enum.concat()
end
end
end