Jido.VFS.Adapter behaviour (Jido.VFS v1.0.0)

View Source

Behaviour for how Jido.VFS adapters work.

Summary

Types

config()

@type config() :: struct()

directory_delete_opts()

@type directory_delete_opts() :: keyword()

path()

@type path() :: Path.t()

stream_opts()

@type stream_opts() :: keyword()

versioning_module()

@type versioning_module() :: module()

write_opts()

@type write_opts() :: keyword()

Callbacks

access(config, path, modes)

(optional)
@callback access(config(), path(), modes :: [:read | :write]) :: :ok | {:error, term()}

append(config, path, contents, write_opts)

(optional)
@callback append(config(), path(), contents :: iodata(), write_opts()) ::
  :ok | {:error, term()}

clear(config)

@callback clear(config()) :: :ok | {:error, term()}

configure(keyword)

@callback configure(keyword()) :: {module(), config()}

copy(config, source, destination, write_opts)

@callback copy(config(), source :: path(), destination :: path(), write_opts()) ::
  :ok | {:error, term()}

copy(source_config, source, destination_config, destination, write_opts)

@callback copy(
  source_config :: config(),
  source :: path(),
  destination_config :: config(),
  destination :: path(),
  write_opts()
) :: :ok | {:error, term()}

create_directory(config, path, write_opts)

@callback create_directory(config(), path(), write_opts()) :: :ok | {:error, term()}

delete(config, path)

@callback delete(config(), path()) :: :ok | {:error, term()}

delete_directory(config, path, directory_delete_opts)

@callback delete_directory(config(), path(), directory_delete_opts()) ::
  :ok | {:error, term()}

delete_version(config, path, version_id)

(optional)
@callback delete_version(config(), path(), version_id :: binary()) ::
  :ok | {:error, term()}

file_exists(config, path)

@callback file_exists(config(), path()) :: {:ok, :exists | :missing} | {:error, term()}

get_latest_version(config, path)

(optional)
@callback get_latest_version(config(), path()) ::
  {:ok, version_id :: binary()} | {:error, term()}

list_contents(config, path)

@callback list_contents(config(), path()) ::
  {:ok,
   [
     %Jido.VFS.Stat.Dir{
       mtime: term(),
       name: term(),
       size: term(),
       visibility: term()
     }
     | %Jido.VFS.Stat.File{
         mtime: term(),
         name: term(),
         size: term(),
         visibility: term()
       }
   ]}
  | {:error, term()}

list_versions(config, path)

(optional)
@callback list_versions(config(), path()) ::
  {:ok, [%{version_id: binary(), timestamp: integer()}]} | {:error, term()}

move(config, source, destination, write_opts)

@callback move(config(), source :: path(), destination :: path(), write_opts()) ::
  :ok | {:error, term()}

read(config, path)

@callback read(config(), path()) :: {:ok, binary()} | {:error, term()}

read_stream(config, path, stream_opts)

@callback read_stream(config(), path(), stream_opts()) ::
  {:ok, Enumerable.t()} | {:error, term()}

read_version(config, path, version_id)

(optional)
@callback read_version(config(), path(), version_id :: binary()) ::
  {:ok, binary()} | {:error, term()}

restore_version(config, path, version_id)

(optional)
@callback restore_version(config(), path(), version_id :: binary()) ::
  :ok | {:error, term()}

set_visibility(config, path, t)

@callback set_visibility(config(), path(), Jido.VFS.Visibility.t()) ::
  :ok | {:error, term()}

starts_processes()

@callback starts_processes() :: boolean()

stat(config, path)

(optional)
@callback stat(config(), path()) ::
  {:ok,
   %Jido.VFS.Stat.File{
     mtime: term(),
     name: term(),
     size: term(),
     visibility: term()
   }
   | %Jido.VFS.Stat.Dir{
       mtime: term(),
       name: term(),
       size: term(),
       visibility: term()
     }}
  | {:error, term()}

truncate(config, path, new_size)

(optional)
@callback truncate(config(), path(), new_size :: non_neg_integer()) ::
  :ok | {:error, term()}

unsupported_operations()

@callback unsupported_operations() :: [atom()]

utime(config, path, mtime)

(optional)
@callback utime(config(), path(), mtime :: DateTime.t()) :: :ok | {:error, term()}

versioning_module()

@callback versioning_module() :: versioning_module() | nil

visibility(config, path)

@callback visibility(config(), path()) ::
  {:ok, Jido.VFS.Visibility.t()} | {:error, term()}

write(config, path, contents, write_opts)

@callback write(config(), path(), contents :: iodata(), write_opts()) ::
  :ok | {:error, term()}

write_stream(config, path, stream_opts)

@callback write_stream(config(), path(), stream_opts()) ::
  {:ok, Collectable.t()} | {:error, term()}

write_version(config, path, contents, write_opts)

(optional)
@callback write_version(config(), path(), contents :: iodata(), write_opts()) ::
  {:ok, version_id :: binary()} | {:error, term()}