defmodule Supabase.FetcherBehaviour do @moduledoc "Defines Supabase HTTP Clients callbacks" @typep nullable(a) :: a | nil @type url :: String.t() | URI.t() @type body :: nullable(map) | map @type headers :: [{String.t(), String.t()}] @type response :: map | String.t() @type reason :: String.t() | atom @type method :: :get | :post @type result :: {:ok, response} | {:error, reason} @callback get(url, headers) :: result @callback post(url, body, headers) :: result @callback put(url, body, headers) :: result @callback delete(url, body, headers) :: result @callback upload(method, url, Path.t(), headers) :: result @callback stream(url, headers, keyword) :: {:ok, stream} | {:error, reason} when stream: Stream.t() end