lib/util/util.ex

defmodule Burrito.Util do
  @spec get_current_os :: :darwin | :linux | :windows
  def get_current_os do
    case :os.type() do
      {:win32, _} -> :windows
      {:unix, :darwin} -> :darwin
      {:unix, :linux} -> :linux
    end
  end

  def get_current_cpu do
    arch_string =
      :erlang.system_info(:system_architecture)
      |> to_string()
      |> String.downcase()
      |> String.split("-")
      |> List.first()

    case arch_string do
      "x86_64" -> :x86_64
      "arm64" -> :aarch64
      "aarch64" -> :aarch64
      _ -> :unknown
    end
  end

  @spec get_otp_version :: String.t()
  def get_otp_version() do
    {:ok, otp_version} =
      :file.read_file(
        :filename.join([
          :code.root_dir(),
          "releases",
          :erlang.system_info(:otp_release),
          "OTP_VERSION"
        ])
      )

    String.trim(otp_version)
  end

  @doc """
  Checks if the application is currently running as a standalone Burrito release, or via some other mechanism,
  such as an `escript`.
  """
  @spec running_standalone?() :: boolean()
  def running_standalone?() do
    System.get_env("__BURRITO") != nil
  end
end