-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)).