b13b6eaf487d7a39e834ad152c01fc4bd40ea8aa
[akkoma] / lib / pleroma / config / loader.ex
1 defmodule Pleroma.Config.Loader do
2 @paths ["config/config.exs", "config/#{Mix.env()}.exs"]
3
4 if Code.ensure_loaded?(Config.Reader) do
5 @spec load(Path.t()) :: keyword()
6 def load(path), do: Config.Reader.read!(path)
7
8 defp do_merge(conf1, conf2), do: Config.Reader.merge(conf1, conf2)
9 else
10 # support for Elixir less than 1.9
11 @spec load(Path.t()) :: keyword()
12 def load(path) do
13 {config, _paths} = Mix.Config.eval!(path)
14 config
15 end
16
17 defp do_merge(conf1, conf2), do: Mix.Config.merge(conf1, conf2)
18 end
19
20 @spec load_and_merge() :: keyword()
21 def load_and_merge do
22 all_paths =
23 if Pleroma.Config.get(:release),
24 do: @paths ++ ["config/releases.exs"],
25 else: @paths
26
27 all_paths
28 |> Enum.map(&load(&1))
29 |> merge()
30 end
31
32 @spec merge([keyword()], keyword()) :: keyword()
33 def merge(configs, acc \\ [])
34 def merge([], acc), do: acc
35
36 def merge([config | others], acc) do
37 merge(others, do_merge(acc, config))
38 end
39 end