Packages
membrane_core
0.9.0
1.3.4
1.3.3
1.3.2
1.3.1
1.3.0
1.2.7
1.2.6
1.2.5
retired
1.2.4
1.2.3
1.2.2
1.2.1
1.2.0
1.2.0-rc1
1.1.2
1.1.1
1.1.0
1.1.0-rc1
1.1.0-rc0
1.0.1
1.0.0
1.0.0-rc1
1.0.0-rc0
0.12.9
0.12.8
0.12.7
0.12.6
0.12.5
0.12.4
0.12.3
0.12.2
0.12.1
0.12.0
retired
0.11.5
0.11.4
0.11.3
0.11.2
0.11.1
0.11.0
0.10.2
0.10.1
0.10.0
0.9.0
0.8.2
0.8.1
0.8.0
0.7.0
0.6.1
0.6.0
0.5.3
0.5.2
0.5.1
0.5.0
0.4.3
0.4.2
0.4.1
0.4.0
0.3.2
0.3.1
0.3.0
0.2.2
0.2.1
0.2.0
0.1.1
0.1.0
Membrane Multimedia Framework (Core)
Current section
Files
Jump to
Current section
Files
lib/membrane/core/helper/genserver.ex
defmodule Membrane.Core.Helper.GenServer do
@moduledoc false
require Membrane.Logger
@type genserver_return_t :: {:noreply, any()} | {:reply, any(), any()}
@spec noreply({:ok, state}) :: {:noreply, state} when state: any()
def noreply({:ok, new_state}), do: {:noreply, new_state}
@spec noreply(
{:ok, state}
| {:error, state}
| {{:error, reason}, state}
| {:stop, reason, new_state :: state},
old_state :: state
) ::
{:noreply, state} | {:stop, reason, state}
when state: any(), reason: any()
def noreply({:ok, new_state}, _old_state), do: {:noreply, new_state}
def noreply({{:error, reason}, new_state}, old_state) do
Membrane.Logger.error("""
Terminating GenServer, reason: #{inspect(reason)},
old state: #{inspect(old_state, pretty: true)},
new state: #{inspect(new_state, pretty: true)}
""")
{:stop, {:error, reason}, new_state}
end
def noreply({:error, reason}, old_state) do
Membrane.Logger.error("""
Terminating GenServer, reason: #{inspect(reason)},
old state: #{inspect(old_state, pretty: true)}
""")
{:stop, {:error, reason}, old_state}
end
def noreply({:stop, _reason, _new_state} = stop, _old_state), do: stop
@spec reply({:ok | {:ok, msg}, state}) :: {:reply, :ok | {:ok, msg}, state}
when msg: any(), state: any()
def reply({:ok, new_state}), do: {:reply, :ok, new_state}
def reply({{:ok, v}, new_state}), do: {:reply, {:ok, v}, new_state}
@spec reply(
{:ok, new_state}
| {{:ok, msg}, new_state}
| {:error, new_state}
| {{:error, reason}, new_state},
old_state
) ::
{:reply, :ok | {:error, reason} | {:ok, msg}, new_state}
when msg: any(), reason: any(), new_state: any(), old_state: any()
def reply({:ok, new_state}, _old_state), do: {:reply, :ok, new_state}
def reply({{:ok, v}, new_state}, _old_state), do: {:reply, {:ok, v}, new_state}
def reply({{:error, reason}, new_state}, old_state) do
Membrane.Logger.error("""
GenServer returning error reply, reason: #{inspect(reason)}
old state: #{inspect(old_state, pretty: true)},
new state: #{inspect(new_state, pretty: true)}
""")
{:reply, {:error, reason}, new_state}
end
def reply({:error, reason}, old_state) do
Membrane.Logger.error("""
GenServer returning error reply, reason: #{inspect(reason)}
old state: #{inspect(old_state, pretty: true)}
""")
{:reply, {:error, reason}, old_state}
end
end