defmodule Runbox.Scenario.Config do
@moduledoc """
Provides configuration to a scenario.
"""
alias Runbox.Utils.Path, as: PathUtils
@doc """
Read file from the config dir.
The file is located in the configuration directory, in a folder matching the `scenario_id` param.
The file is read if it exists and content is returned as `{:ok, content}`, otherwise `{:error,
reason}` is returned.
"""
@spec read_file(String.t() | atom(), String.t()) :: {:ok, binary()} | {:error, File.posix()}
def read_file(scenario_id, file_path) do
path = resolve_file(scenario_id, file_path)
File.read(path)
end
@doc """
Resolves a path to a file in scenario config.
The file is located in the configuration directory, in a folder matching the `scenario_id` param.
This function resolves the path so that it can be used with `File` functions directly. The
existence of the file is not verified. Note if you want to just read the file, you can use
`read_file/2`, this function should be used when you need to handle the file in a special manner
(e.g. streaming).
"""
@spec resolve_file(String.t() | atom(), String.t()) :: String.t()
def resolve_file(scenario_id, file_path) do
config_dir = PathUtils.resolve_path(Application.fetch_env!(:runbox, :scenario_config_dir))
Path.join([config_dir, to_string(scenario_id), file_path])
end
end