lib/models/behaviour.ex

defmodule Replicate.Models.Behaviour do
  @moduledoc """
  Documentation for the Model Behaviour
  """
  @callback get!(name :: String.t()) :: Replicate.Models.Model.t()
  @callback get(name :: String.t()) :: {:ok, Replicate.Models.Model.t()} | {:error, String.t()}
  @callback get_version!(Replicate.Models.Model.t(), version :: String.t()) ::
              Replicate.Models.Version.t()
  @callback get_latest_version!(Replicate.Models.Model.t()) :: Replicate.Models.Version.t()
  @callback list_versions(Replicate.Models.Model.t()) :: [Replicate.Models.Version.t()]
  @callback list() :: %{
              results: [Replicate.Models.Model.t()],
              next: String.t(),
              previous: String.t()
            }
  @callback create(
              owner :: String.t(),
              name :: String.t(),
              description :: String.t(),
              github_url :: String.t(),
              paper_url :: String.t(),
              license_url :: String.t(),
              cover_image_url :: String.t()
            ) :: {:ok, Replicate.Models.Model.t()} | {:error, String.t()}
end