@callback broadcast(group :: atom(), msg :: any()) :: :ok
@callback call(pid :: pid(), msg :: any(), timeout :: integer()) :: any()
@callback call(group :: atom(), pid :: pid(), msg :: any(), timeout :: integer()) :: any()
@callback cast(pid :: pid(), msg :: any()) :: :ok
@callback cast(group :: atom(), pid :: pid(), msg :: any()) :: :ok
@callback count(group :: atom()) :: non_neg_integer()
@callback count_all() :: non_neg_integer()
@callback list(group :: atom()) :: [pid()]
@callback list_all() :: [{pid(), atom()}]