defmodule TestcontainerEx.PullPolicy do
@moduledoc """
Pull policies that control whether an image is fetched from a remote registry
before starting a container.
"""
alias TestcontainerEx.PullPolicy
@type t :: %__MODULE__{
always_pull: boolean() | nil,
pull_if_missing: boolean() | nil,
pull_condition: (struct(), Req.Response.t() -> boolean()) | nil
}
defstruct [:always_pull, :pull_if_missing, :pull_condition]
@spec always_pull() :: PullPolicy.t()
@doc """
Returns a pull policy that always pulls the image.
iex> TestcontainerEx.PullPolicy.always_pull()
%TestcontainerEx.PullPolicy{always_pull: true, pull_if_missing: nil, pull_condition: nil}
"""
def always_pull do
%__MODULE__{always_pull: true}
end
@spec never_pull() :: PullPolicy.t()
@doc """
Returns a pull policy that never pulls the image.
iex> TestcontainerEx.PullPolicy.never_pull()
%TestcontainerEx.PullPolicy{always_pull: nil, pull_if_missing: nil, pull_condition: nil}
"""
def never_pull do
%__MODULE__{}
end
@spec pull_if_missing() :: PullPolicy.t()
@doc """
Returns a pull policy that pulls only when the image is not present locally.
iex> TestcontainerEx.PullPolicy.pull_if_missing()
%TestcontainerEx.PullPolicy{always_pull: nil, pull_if_missing: true, pull_condition: nil}
"""
def pull_if_missing do
%__MODULE__{pull_if_missing: true}
end
@spec pull_condition(
expr ::
(config :: struct(), conn :: Req.Response.t() -> true | false)
) ::
PullPolicy.t()
def pull_condition(expr) do
%__MODULE__{pull_condition: expr}
end
end