__decode__({Version.t(), term()}) :: term()
__encode__(term()) :: {Version.t(), term()}
apply(state :: any(), event :: map()) :: {:ok, any()} | {:error, atom()}
base(id :: any()) :: any()
execute(state :: any(), command :: map()) :: :ok | {:ok, map()} | {:ok, [map()]} | {:error, atom()}