defmodule Islands.Engine.Guards do
@moduledoc """
Defines guards for the Islands Engine API.
"""
@genders [:f, :m]
@island_types [:atoll, :dot, :l_shape, :s_shape, :square]
@player_ids [:player1, :player2]
defguard valid?(game_name, player_id)
when is_binary(game_name) and player_id in @player_ids
defguard valid?(game_name, player_name, gender, pid)
when is_binary(game_name) and is_binary(player_name) and
gender in @genders and is_pid(pid)
@doc """
No range check on `row` or `col`: island can be dropped partly outside board.
"""
defguard valid?(game_name, player_id, island_type, row, col)
when is_binary(game_name) and player_id in @player_ids and
island_type in @island_types and is_integer(row) and
is_integer(col)
@doc """
No range check on `row` or `col`: island can be dropped partly outside board.
"""
defguard valid_args?(game_name, player_id, row, col)
when is_binary(game_name) and player_id in @player_ids and
is_integer(row) and is_integer(col)
end