Packages
islands_client_input
0.1.1
0.1.49
0.1.47
0.1.46
0.1.45
0.1.44
0.1.43
0.1.42
0.1.41
0.1.40
0.1.39
0.1.38
0.1.37
0.1.36
0.1.35
0.1.34
0.1.33
0.1.32
0.1.31
0.1.30
0.1.29
0.1.28
0.1.27
0.1.26
0.1.25
0.1.24
0.1.23
0.1.22
0.1.21
0.1.20
0.1.19
0.1.18
0.1.17
0.1.16
0.1.15
0.1.14
0.1.13
0.1.12
0.1.11
0.1.10
0.1.9
0.1.8
0.1.7
0.1.6
0.1.5
0.1.4
0.1.3
0.1.2
0.1.1
0.1.0
Prompts and accepts a move in the Game of Islands.
Current section
Files
Jump to
Current section
Files
lib/islands/client/input.ex
# ┌─────────────────────────────────────────────────────────────────┐
# │ Inspired by the course "Elixir for Programmers" by Dave Thomas. │
# └─────────────────────────────────────────────────────────────────┘
defmodule Islands.Client.Input do
use PersistConfig
@course_ref Application.get_env(@app, :course_ref)
@moduledoc """
Prompts for and processes input in the _Game of Islands_.
\n##### #{@course_ref}
"""
alias __MODULE__.{Checker, Getter, Prompter}
alias IO.ANSI.Plus, as: ANSI
alias Islands.Client.State
@type t :: IO.chardata() | IO.nodata()
@spec get_input(ANSI.ansilist(), State.t()) :: t()
defdelegate get_input(prompt, state), to: Getter
@spec check_input(t, State.t()) :: State.t() | no_return
defdelegate check_input(input, state), to: Checker
@spec accept_move(State.t(), ANSI.ansilist()) :: State.t() | no_return
defdelegate accept_move(state, message \\ []), to: Prompter
end