defmodule Supabase.StorageBehaviour do @moduledoc "Defines Supabase Storage Client callbacks" alias Supabase.Storage.Bucket alias Supabase.Storage.Object alias Supabase.Storage.ObjectOptions, as: Opts alias Supabase.Storage.SearchOptions, as: Search @type conn :: atom @type reason :: String.t() | atom @type result(a) :: {:ok, a} | {:error, reason} | {:error, :invalid_client} @callback list_buckets(conn) :: result([Bucket.t()]) @callback retrieve_bucket_info(conn, id) :: result(Bucket.t()) when id: String.t() @callback create_bucket(conn, map) :: result(Bucket.t()) @callback update_bucket(conn, Bucket.t(), map) :: result(Bucket.t()) @callback empty_bucket(conn, Bucket.t()) :: result(:emptied) @callback delete_bucket(conn, Bucket.t()) :: result(:deleted) @callback remove_object(conn, Bucket.t(), Object.t()) :: result(:deleted) @callback move_object(conn, Bucket.t(), Object.t(), String.t()) :: result(:moved) @callback copy_object(conn, Bucket.t(), Object.t(), String.t()) :: result(:copied) @callback retrieve_object_info(conn, Bucket.t(), String.t()) :: result(Object.t()) @callback list_objects(conn, Bucket.t(), prefix, Search.t()) :: result([Object.t()]) when prefix: String.t() @callback upload_object(conn, Bucket.t(), dest, source, Opts.t()) :: result(Object.t()) when dest: String.t(), source: Path.t() @callback download_object(conn, Bucket.t(), wildcard) :: result(binary) when wildcard: String.t() @callback download_object_lazy(conn, Bucket.t(), wildcard) :: result(Stream.t()) when wildcard: String.t() @callback save_object(conn, dest, Bucket.t(), wildcard) :: :ok | {:error, atom} | {:error, :invalid_client} when wildcard: String.t(), dest: Path.t() @callback save_object_stream(conn, dest, Bucket.t(), wildcard) :: :ok | {:error, atom} | {:error, :invalid_client} when wildcard: String.t(), dest: Path.t() @callback create_signed_url(conn, Bucket.t(), String.t(), integer) :: result(String.t()) end