i settle up like this in server.ex
def show_all(todo_server) do
GenServer.call(todo_server, :show_all)
end
def handle_call({:show_all}, _, {name, todo_list}) do
{:reply, Todo.List.show_all(todo_list), {name, todo_list}}
end
and list.ex
def show_all(todo_list) do
todo_list.show_all
|> Enum.map(fn {_, entry} -> entry end)
end
which i got a return of this
iex(7)> Todo.Server.show_all(testy)
00:18:25.365 [error] GenServer {Todo.ProcessRegistry, {Todo.Server, "testy"}} terminating
** (FunctionClauseError) no function clause matching in Todo.Server.handle_call/3
(todo) lib/todo/server.ex:71: Todo.Server.handle_call(:show_all, {#PID<0.139.0>, #Reference<0.1044764218.1942487041.128436>}, {"testy", %Todo.List{auto_id: 4, entries: %{1 => %{__struct__: Todo.Server.Entry, date: ~D[2020-05-19], id: 1, time: ~T[16:52:00], title: "Shopping"}, 2 => %{__struct__: Todo.Server.Entry, date: ~D[2020-05-19], id: 2, time: ~T[16:52:00], title: "cleaning"}, 3 => %{__struct__: Todo.Server.Entry, date: ~D[2020-05-19], id: 3, time: ~T[16:52:00], title: "sweeping"}}}})
(stdlib) gen_server.erl:661: :gen_server.try_handle_call/4
(stdlib) gen_server.erl:690: :gen_server.handle_msg/6
(stdlib) proc_lib.erl:249: :proc_lib.init_p_do_apply/3
Last message (from #PID<0.139.0>): :show_all
State: {"testy", %Todo.List{auto_id: 4, entries: %{1 => %{__struct__: Todo.Server.Entry, date: ~D[2020-05-19], id: 1, time: ~T[16:52:00], title: "Shopping"}, 2 => %{__struct__: Todo.Server.Entry, date: ~D[2020-05-19], id: 2, time: ~T[16:52:00], title: "cleaning"}, 3 => %{__struct__: Todo.Server.Entry, date: ~D[2020-05-19], id: 3, time: ~T[16:52:00], title: "sweeping"}}}}
Client #PID<0.139.0> is alive
(stdlib) gen.erl:169: :gen.do_call/4
(elixir) lib/gen_server.ex:1006: GenServer.call/3
(stdlib) erl_eval.erl:680: :erl_eval.do_apply/6
(elixir) src/elixir.erl:275: :elixir.eval_forms/4
(iex) lib/iex/evaluator.ex:257: IEx.Evaluator.handle_eval/5
(iex) lib/iex/evaluator.ex:237: IEx.Evaluator.do_eval/3
(iex) lib/iex/evaluator.ex:215: IEx.Evaluator.eval/3
(iex) lib/iex/evaluator.ex:103: IEx.Evaluator.loop/1
** (exit) exited in: GenServer.call(#PID<0.158.0>, :show_all, 5000)
** (EXIT) an exception was raised:
** (FunctionClauseError) no function clause matching in Todo.Server.handle_call/3
(todo) lib/todo/server.ex:71: Todo.Server.handle_call(:show_all, {#PID<0.139.0>, #Reference<0.1044764218.1942487041.128436>}, {"testy", %Todo.List{auto_id: 4, entries: %{1 => %{__struct__: Todo.Server.Entry, date: ~D[2020-05-19], id: 1, time: ~T[16:52:00], title: "Shopping"}, 2 => %{__struct__: Todo.Server.Entry, date: ~D[2020-05-19], id: 2, time: ~T[16:52:00], title: "cleaning"}, 3 => %{__struct__: Todo.Server.Entry, date: ~D[2020-05-19], id: 3, time: ~T[16:52:00], title: "sweeping"}}}})
(stdlib) gen_server.erl:661: :gen_server.try_handle_call/4
(stdlib) gen_server.erl:690: :gen_server.handle_msg/6
(stdlib) proc_lib.erl:249: :proc_lib.init_p_do_apply/3
(elixir) lib/gen_server.ex:1009: GenServer.call/3