exfile v0.0.3 Exfile.Backend behaviour

Summary

Functions

A convenience function to call backend.backend_mod.delete(backend, file_id)

A convenience function to call backend.backend_mod.exists?(backend, file_id)

A convenience function to call backend.backend_mod.get(backend, file_id)

A convenience function to call backend.backend_mod.open(backend, file_id)

A convenience function to call backend.backend_mod.path(backend, file_id)

A convenience function to call backend.backend_mod.size(backend, file_id)

A convenience function to call backend.backend_mod.upload(backend, uploadable)

Types

Functions

delete(backend, file_id)

A convenience function to call backend.backend_mod.delete(backend, file_id)

exists?(backend, file_id)

A convenience function to call backend.backend_mod.exists?(backend, file_id)

get(backend, file_id)

A convenience function to call backend.backend_mod.get(backend, file_id)

open(backend, file_id)

A convenience function to call backend.backend_mod.open(backend, file_id)

path(backend, file_id)

A convenience function to call backend.backend_mod.path(backend, file_id)

size(backend, file_id)

A convenience function to call backend.backend_mod.size(backend, file_id)

upload(backend, uploadable)

A convenience function to call backend.backend_mod.upload(backend, uploadable)

Callbacks

delete(backend, file_id)

Specs

delete(backend, file_id) ::
  :ok |
  {:error, :file.posix}
exists?(backend, file_id)

Specs

exists?(backend, file_id) :: boolean
get(backend, file_id)

Specs

init(map)

Specs

init(map) :: {:ok, backend} | {:error, atom}
open(backend, file_id)

Specs

open(backend, file_id) ::
  {:ok, :file.io_device} |
  {:error, :file.posix}
path(backend, file_id)

Specs

path(backend, file_id) :: Path.t
size(backend, file_id)

Specs

size(backend, file_id) ::
  {:ok, pos_integer} |
  {:error, :file.posix}
upload(backend, uploadable)

Specs

upload(backend, uploadable) ::
  {:ok, Exfile.File.t} |
  {:error, atom}

upload/2 must handle at least three cases of uploadable:

  1. an IO (pid)
  2. an %Exfile.File{}
  3. a path to a tempfile

You may elect to implement a fourth case that handles uploading between identical backends, if there is a more efficient way to implement it. See Exfile.Backend.FileSystem.upload/2 for an example.