Skip to main content

lib/testcontainer_ex/container/builder.ex

defprotocol TestcontainerEx.Container.Builder do
  @moduledoc """
  Protocol for building container configurations from domain-specific
  container types (e.g. RedisContainer, PostgresContainer).

  Implementations transform a domain struct into a `Container.Config`
  with appropriate image, ports, wait strategies, etc.
  """
  @spec build(t()) :: TestcontainerEx.Container.Config.t()
  def build(builder)

  @doc """
  Hook called after the container has started successfully.
  Use for post-start validation or configuration.
  """
  @spec after_start(t(), TestcontainerEx.Container.Config.t(), Req.Response.t()) ::
          :ok | {:error, term()}
  def after_start(builder, container, connection)
end