defmodule Toolbox.Scenario.Config do @moduledoc """ Provides configuration to a scenario. """ alias Toolbox.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!(:toolbox, :scenario_config_dir)) Path.join([config_dir, to_string(scenario_id), file_path]) end end