   may be `nil` case the values list is empty. If `message` doesn't contain the
   `header`, a `KeyError` exception is raised.
   """
-  @spec fetch_header_front!(t, header) :: value | no_return
+  @spec fetch_header_front!(t, header) :: multiple_value | no_return
   def fetch_header_front!(message, header) do
     values = fetch_header!(message, header)
     if Enum.empty?(values) do

  with the updated values under `header`.
  """
  @spec get_and_update_header_back(t, header,
            (value -> {get, value} | :pop)) ::
                {get, t} when get: value
  def get_and_update_header_back(message, header, fun)
      when is_function(fun, 1) do
    {get, new_headers} = Map.get_and_update(message.headers, header,

  If `header` is present in `message`, then the last value is returned.
  Otherwise, `default` is returned (which is `nil` unless specified otherwise).
  """
  @spec get_header_back(t, header) :: multiple_value | nil
  @spec get_header_back(t, header, any) :: multiple_value | any
  def get_header_back(message, header, default \\ nil) do
    case get_header(message, header, nil) do
      nil -> default
