lib/Statux/rule_set/rule_set.ex

defmodule Statux.RuleSet do
  @moduledoc """
  Handles reading configurations from and storing configurations to disk
  """
  alias Statux.RuleSet.Parser

  def load_json!(path) do
    path
    |> File.read!
    |> from_json!
  end

  def from_json!(json) do
    json
    |> Parser.parse!
  end

  def to_json!(rule_set) do
    rule_set
    |> Parser.serialize!()
  end

  def save(%{} = rule_set) do
    rule_set
    |> to_json!()
    |> save()
  end

  def save(json_rule_set) when is_bitstring(json_rule_set) do
    Application.get_env(:statux, :rule_set_file)
    |> File.write!(json_rule_set)
  end

  def save(_rule_set, _rule_set_name) do
    raise "Multiple Rule Sets are not yet supported"
  end

  def reload_for(server_name) do
    Statux.Tracker.reload_rule_set(server_name)
  end
end