Current section
Files
Jump to
Current section
Files
src/erl/lang/errors/clojerl.ArityError.erl
-module('clojerl.ArityError').
-include("clojerl.hrl").
-behavior('clojerl.IEquiv').
-behavior('clojerl.IError').
-behavior('clojerl.IHash').
-behavior('clojerl.IStringable').
-export([?CONSTRUCTOR/2]).
-export([equiv/2]).
-export([ message/1
, message/2
]).
-export([hash/1]).
-export([str/1]).
-export_type([type/0]).
-type type() :: #{ ?TYPE => ?M
, actual => arity()
, message => binary()
, name => binary()
}.
-spec ?CONSTRUCTOR(arity(), binary()) -> type().
?CONSTRUCTOR(Arity, Name) when is_integer(Arity), is_binary(Name) ->
ArityBin = integer_to_binary(Arity),
Message = <<"Wrong number of args (", ArityBin/binary, ") ",
"passed to: ", Name/binary>>,
#{ ?TYPE => ?M
, actual => Arity
, message => Message
, name => Name
}.
%%------------------------------------------------------------------------------
%% Protocols
%%------------------------------------------------------------------------------
%% clojerl.IEquiv
equiv(#{?TYPE := ?M} = X, #{?TYPE := ?M} = X) ->
true;
equiv(_, _) ->
false.
%% clojerl.IError
message(#{?TYPE := ?M, message := Message}) ->
Message.
message(#{?TYPE := ?M} = Error, Msg) ->
Error#{message := Msg}.
%% clojerl.IHash
hash(#{?TYPE := ?M} = Error) ->
erlang:phash2(Error).
%% clojerl.IStringable
str(#{?TYPE := ?M} = Error) ->
clj_utils:error_str(?M, message(Error)).