lib/bunt.ex

defmodule Bunt do
  use Application

  alias Bunt.ANSI

  @version Mix.Project.config()[:version]

  def puts(value \\ "") do
    value
    |> format
    |> IO.puts()
  end

  def warn(value \\ "") do
    formatted_value = format(value)
    IO.puts(:stderr, formatted_value)
  end

  def write(value \\ "") do
    value
    |> format
    |> IO.write()
  end

  def format, do: format("")
  def format(nil), do: format("")
  def format(text) when is_binary(text), do: text

  def format(list) when is_list(list) do
    list
    |> List.flatten()
    |> ANSI.format()
  end

  def start(_, _), do: {:ok, self()}

  def version, do: @version
end