defmodule Systemd.UnitFileChange do @moduledoc """ Change reported by systemd unit-file operations. """ @type action :: :symlink | :unlink | :masked | :unmasked | :unknown @type t :: %__MODULE__{ action: action(), path: String.t(), target: String.t() } @enforce_keys [:action, :path, :target] defstruct [:action, :path, :target] @doc false @spec new(action(), String.t(), String.t()) :: t() def new(action, path, target) when is_atom(action) and is_binary(path) and is_binary(target) do %__MODULE__{action: action, path: path, target: target} end @doc false @spec from_dbus(tuple() | list()) :: t() def from_dbus({action, path, target}), do: from_dbus([action, path, target]) def from_dbus([action, path, target]) do new(normalize_action(action), path, target) end defp normalize_action("symlink"), do: :symlink defp normalize_action("unlink"), do: :unlink defp normalize_action("masked"), do: :masked defp normalize_action("unmasked"), do: :unmasked defp normalize_action(_action), do: :unknown end