defmodule Skuld.Coroutine.Error do
@moduledoc """
Canonical error representation for fiber failures.
Normalizes all error paths — Elixir exceptions (raise/rescue),
Elixir throws and exits, Skuld Throw.throw, cancellation, and
BEAM task crashes — into a single struct. Replaces the ad-hoc
tuple conventions that previously required multi-clause unwrapping.
"""
@type type :: :exception | :throw | :exit | :cancelled
@type t :: %__MODULE__{
type: type(),
error: term(),
stacktrace: list() | nil
}
@derive Jason.Encoder
defstruct [:type, :error, :stacktrace]
end