exercism-elixir/stack-underflow/lib/rpn_calculator/exception.ex
2022-03-04 10:04:23 -04:00

22 lines
664 B
Elixir

defmodule RPNCalculator.Exception do
defmodule DivisionByZeroError do
defexception message: "division by zero occurred"
end
defmodule StackUnderflowError do
defexception message: "stack underflow occurred"
@impl true
def exception(context) do
case context do
[] -> %__MODULE__{}
_ -> %__MODULE__{message: "stack underflow occurred, context: #{context}"}
end
end
end
def divide([]), do: raise(StackUnderflowError, "when dividing")
def divide([_]), do: raise(StackUnderflowError, "when dividing")
def divide([0 | _]), do: raise(DivisionByZeroError)
def divide([denom, num]), do: div(num, denom)
end