core/gear_log/level.ex

# Copyright(c) 2015-2023 ACCESS CO., LTD. All rights reserved.

use Croma

defmodule AntikytheraCore.GearLog.Level do
  alias Croma.Result, as: R
  use Croma.SubtypeOfAtom, values: [:debug, :info, :error]

  defun default() :: t do
    level_str = System.get_env("LOG_LEVEL") || "info"
    from_string(level_str)
  end

  defun from_string(level_str :: String.t()) :: t do
    new(level_str) |> R.get!()
  end

  defun write_to_log?(min_level :: t, message_level :: t) :: boolean do
    :info, :debug -> false
    :error, :debug -> false
    :error, :info -> false
    _, _ -> true
  end
end