lib/pdf_elixide/native/wrap.ex
defmodule PdfElixide.Native.Wrap do
@moduledoc false
@doc """
Runs a NIF call and converts raised errors to `{:error, term()}`.
Returns `{:ok, value}` on success.
"""
@spec call((-> term())) :: {:ok, term()} | {:error, term()}
def call(fun) do
case fun.() do
# NIF returned tagged ok
{:ok, _} = result -> result
# NIF returned tagged error
{:error, _} = result -> result
# NIF returned a bare value
other -> {:ok, other}
end
rescue
e in ErlangError -> {:error, e.original}
end
end