defmodule Grizzly.ZWave.CommandClasses.UserCode do @moduledoc """ Command Class for working with user codes """ @behaviour Grizzly.ZWave.CommandClass alias Grizzly.ZWave.DecodeError @type user_id_status :: :occupied | :available | :reserved_by_admin | :status_not_available @impl true def byte(), do: 0x63 @impl true def name(), do: :user_code @spec user_id_status_to_byte(user_id_status()) :: byte() def user_id_status_to_byte(:available), do: 0x00 def user_id_status_to_byte(:occupied), do: 0x01 def user_id_status_to_byte(:reversed_by_admin), do: 0x02 def user_id_status_to_byte(:status_not_available), do: 0xFE @spec user_id_status_from_byte(byte()) :: {:ok, user_id_status()} | {:error, DecodeError.t()} def user_id_status_from_byte(0x00), do: {:ok, :available} def user_id_status_from_byte(0x01), do: {:ok, :occupied} def user_id_status_from_byte(0x02), do: {:ok, :reversed_by_admin} def user_id_status_from_byte(0xFE), do: {:ok, :status_not_available} def user_id_status_from_byte(byte), do: {:error, %DecodeError{value: byte, param: :user_id_status, command: :user_code_set}} end