anchor.diff:  parse_command(#edis_command{cmd = <<"EXEC">>}) -> throw(bad_arg_num);
   parse_command(C = #edis_command{cmd = <<"WATCH">>, args = [_Key|_Keys]}) -> C#edis_command{result_type=ok,group=transaction};
   parse_command(#edis_command{cmd = <<"WATCH">>}) -> throw(bad_arg_num);
  +parse_command(C = #edis_command{cmd = <<"UNWATCH">>, args = []}) -> C#edis_command{result_type=ok,group=transaction};
  +parse_command(#edis_command{cmd = <<"UNWATCH">>}) -> throw(bad_arg_num);
   %% -- Errors ---------------------------------------------------------------------------------------
   parse_command(#edis_command{cmd = <<"SYNC">>}) -> throw(unsupported);
   parse_command(#edis_command{cmd = <<"SLOWLOG">>}) -> throw(unsupported);
  
positive.code: -spec init(port()) -> {ok, state()}.
  init(Socket) ->
    PeerPort =
      case inet:peername(Socket) of
        {ok, {_Ip, Port}} -> Port;
        Error -> Error
      end,
    Authenticated = undefined =:= edis_config:get(requirepass),
    {ok, #state{socket = Socket, peerport = PeerPort, authenticated = Authenticated}}.
  
negative.code:   end;
  queue(#edis_command{cmd = <<"MULTI">>}, _State) -> throw(nested);
  queue(#edis_command{cmd = <<"WATCH">>}, _State) -> throw(not_in_multi);
  queue(#edis_command{cmd = <<"UNWATCH">>}, _State) -> throw(not_in_multi);
  queue(#edis_command{cmd = <<"AUTH">>}, _State) -> throw(not_in_multi);
  queue(#edis_command{cmd = <<"SHUTDOWN">>}, _State) -> throw(not_in_multi);
  queue(#edis_command{cmd = <<"CONFIG", _/binary>>}, _State) -> throw(not_in_multi);
  