Skip to main content

lib/skuld/coroutine/foreign_suspended.ex

defmodule Skuld.Coroutine.ForeignSuspended do
  @moduledoc """
  Fiber state when a single fiber suspends on a foreign resource.

  The FiberPool scheduler collects all `ForeignSuspended` fibers, extracts
  their individual `ForeignSuspend` values, and bundles them into a
  `Coroutine.ForeignSuspensions` aggregate to return to the caller.
  """

  alias Skuld.Comp.Env
  alias Skuld.Comp.ForeignSuspend

  @type t :: %__MODULE__{
          id: term(),
          suspend: ForeignSuspend.t(),
          env: Env.t()
        }

  defstruct [:id, :suspend, :env]
end