lib/pipeline/types.ex

defmodule Pipeline.Types do
  @moduledoc """
  Shared type definitions for all modules
  """

  @typedoc """
  The result of the execution of a step or the final result of an entire pipeline.
  """
  @type result :: {:ok, any} | {:error, any}

  @typedoc """
  The arguments that are used by the first step of a pipeline and well - the initial state of the pipeline.
  """
  @type args :: any

  @typedoc """
  The optional arguments that are passed to steps and callbacks of a pipeline.
  """
  @type options :: Keyword.t()

  @typedoc """
  A function that transforms a value into something else.
  """
  @type reducer :: (args(), options() -> result())

  @typedoc """
  A function that is always called after the pipeline finishes the execution.
  """
  @type hook :: (Pipeline.State.t(), options -> any())

  @typedoc """
  A function that is always called after the pipeline finishes the execution, but asynchronously.
  """
  @type async_hook :: hook()
end