codedge-llc/kadabra

Dialyzer warnings because of bad parameters passed

Opened this issue · 0 comments

Environment

  • Elixir & Erlang/OTP versions (elixir --version):
  • Operating system:

Current behavior

lib/frame/settings.ex:29:pattern_match
The pattern can never match the type.

Pattern:
{:error, _code, __settings}

Type:

{:ok,
%Kadabra.Connection.Settings{
:enable_push => true,
:header_table_size => 4096,
:initial_window_size => 65535,
:max_concurrent_streams => :infinite,
:max_frame_size => 16384,
:max_header_list_size => nil
}}


lib/frame/settings.ex:44:call
The function call will not succeed.

Kadabra.Connection.Settings.put(
_settings :: %Kadabra.Connection.Settings{
:enable_push => true,
:header_table_size => 4096,
:initial_window_size => 65535,
:max_concurrent_streams => :infinite,
:max_frame_size => 16384,
:max_header_list_size => nil
},
_ident :: char(),
_value :: non_neg_integer()
)

breaks the contract
(t(), non_neg_integer(), term()) :: {:ok, t()} | {:error, binary(), t()}

Include code samples, errors and stacktraces if appropriate.

Expected behavior

The call to put_settings is passing a binary when the function is expecting a number. Either the caller or the function needs to translate the string from, for example, 'enable_push' to 2 so that the code in frame/settings will work. The first error appears to only occur because of the second one, because all the invalid parameters will drop through to the default handler and only return :ok.

Note that there is no test module for frame/settings.