lib/baz_venue_adapter_open_sea.ex

defmodule BazVenueAdapterOpenSea do
  @moduledoc """
  Baz adapter for OpenSea
  """

  alias BazVenueAdapterOpenSea.FetchCollectionBySlug
  alias BazVenueAdapterOpenSea.FetchCollectionAssetPageBySlug
  alias BazVenueAdapterOpenSea.FetchCollectionEventPageBySlug
  alias BazVenueAdapterOpenSea.StartVenueWebSocket
  alias BazVenueAdapterOpenSea.SubscribeVenueWebSocket

  @behaviour Baz.VenueAdapter

  @type venue :: Baz.VenueAdapter.venue()
  @type collection_slug :: Baz.VenueAdapter.collection_slug()

  @spec fetch_collection_by_slug(venue, collection_slug) :: FetchCollectionBySlug.result()
  defdelegate fetch_collection_by_slug(venue, collection_slug), to: FetchCollectionBySlug

  @type token_ids :: Baz.VenueAdapter.token_ids()
  @type page_cursor :: Baz.Page.cursor()

  @spec fetch_collection_asset_page_by_slug(venue, collection_slug, token_ids, page_cursor) :: FetchCollectionAssetPageBySlug.result()
  defdelegate fetch_collection_asset_page_by_slug(venue, collection_slug, token_ids, page_cursor), to: FetchCollectionAssetPageBySlug

  @spec fetch_collection_event_page_by_slug(venue, collection_slug, token_ids, page_cursor) :: FetchCollectionEventPageBySlug.result()
  defdelegate fetch_collection_event_page_by_slug(venue, collection_slug, token_ids, page_cursor), to: FetchCollectionEventPageBySlug

  @spec start_venue_web_socket(venue) :: StartVenueWebSocket.result()
  defdelegate start_venue_web_socket(venue), to: StartVenueWebSocket

  @type slug_mask :: Baz.VenueAdapter.slug_mask()

  @spec subscribe_venue_web_socket(venue, slug_mask) :: SubscribeVenueWebSocket.result()
  defdelegate subscribe_venue_web_socket(venue, slugs), to: SubscribeVenueWebSocket
end