lib/fretex.ex

defmodule Fretex do
  require Logger 

  alias Fretex.Carriers

  @spec calculate(Package.t()) :: [{:ok, Rate.t()} | {:error, binary()}]
  def calculate(package) do
    Enum.flat_map(package.carriers, fn carrier ->
      Logger.info("Calculating freigth for #{carrier.__struct__} with #{inspect(package, pretty: true)}")
      Carriers.calculate(carrier, package)
    end)
  end

  @spec list_services(Fretex.Carriers.t()) :: {:ok, [CarrierService.t()]} | {:error, any()}
  def list_services(carrier) do
    Carriers.list_services(carrier)
  end
end