defmodule Briefly do @external_resource "README.md" @moduledoc @external_resource |> File.read!() |> String.split("") |> Enum.fetch!(1) use Application @doc false @impl true def start(_type, _args) do Briefly.Supervisor.start_link() end @type create_opts :: [ {:prefix, binary}, {:extname, binary}, {:directory, boolean}, {:monitor_pid, pid()} ] @doc """ Requests a temporary file to be created with the given options. """ @spec create(create_opts) :: {:ok, binary} | {:too_many_attempts, binary, pos_integer} | {:no_tmp, [binary]} def create(opts \\ []) do GenServer.call(Briefly.Entry.server(), {:create, opts}) end @doc """ Requests a temporary file to be created with the given options and raises on failure. """ @spec create!(create_opts) :: binary | no_return def create!(opts \\ []) do case create(opts) do {:ok, path} -> path {:too_many_attempts, tmp, attempts} -> raise "tried #{attempts} times to create a temporary file at #{tmp} but failed. What gives?" {:no_tmp, _tmps} -> raise "could not create a tmp directory to store temporary files. Set the :briefly :directory application setting to a directory with write permission" end end @doc """ Removes the temporary files and directories created by the current process and return their paths. """ @spec cleanup(pid() | nil) :: [binary] def cleanup, do: cleanup(self()) def cleanup(monitor_pid) do GenServer.call(Briefly.Entry.server(), {:cleanup, monitor_pid}) end end