# Effectful dispatch facade for the Repo contract.
#
# ## Usage
#
# alias Skuld.Repo
#
# comp do
# {:ok, user} <- Repo.insert(changeset)
# found <- Repo.get(User, user.id)
# {user, found}
# end
#
defmodule Skuld.Repo do
@moduledoc """
Effectful dispatch facade for `Skuld.Repo.Effectful`.
Part of the `skuld_repo` package, which provides Ecto Repo integration
with InMemory (closed-world store), Ecto adapter, and Stub (stateless
test double). See the
[architecture guide](https://hexdocs.pm/skuld/architecture.html)
for how this fits into the Skuld ecosystem.
Provides effectful caller functions, bang variants, and key helpers
for the standard Ecto Repo operations.
## Usage
alias Skuld.Repo
comp do
user <- Repo.insert!(changeset)
found <- Repo.get(User, user.id)
{user, found}
end
|> Port.with_handler(%{Repo.Effectful => MyApp.Repo.Ecto})
|> Throw.with_handler()
|> Comp.run!()
"""
use Skuld.Effects.Port.EffectfulFacade, contract: Skuld.Repo.Effectful
end