Packages
upstream
2.1.1
2.1.4
2.1.3
2.1.2
2.1.1
2.1.0
2.0.7
2.0.6
2.0.5
2.0.4
2.0.3
2.0.2
2.0.0
1.8.2
1.8.1
1.7.2
1.7.1
1.7.0
1.6.14
1.6.13
1.6.12
1.6.11
1.6.10
1.6.9
1.6.8
1.6.7
1.6.6
1.6.5
1.6.4
1.6.3
1.6.2
1.6.1
1.6.0
1.5.12
1.5.11
1.5.11-dev-3
1.5.11-dev-2
1.5.11-dev-1
1.5.11-dev
1.5.10
1.5.9
1.5.8
1.5.7
1.5.6
1.5.5
1.5.2
1.5.1
1.5.0
1.4.12
1.4.9
1.4.6
1.4.5
1.4.4
1.4.3
1.4.2
1.4.1
1.4.0
1.3.7
1.3.5
1.3.4
1.3.3
1.3.2
1.3.1
1.3.0
1.2.3
1.2.1
Upstream is for integrating into projects that need to do large file uploads to B2 service. It integrates tightly with Backblaze B2 for now, with plans to support Amazon S3.
Current section
Files
Jump to
Current section
Files
lib/upstream/b2/base.ex
defmodule Upstream.B2.Base do
@moduledoc """
Base B2 module for using in the api call definitions
simply call `use Upstream.B2` in the module and define the url, header, body
and use the module to make the calls.
"""
alias Upstream.Request
alias Upstream.B2.Account.Authorization
@callback body(nil | String.t() | map | Keyword.t()) :: tuple | map
@callback url(Authorization.t(), nil | String.t() | map | none) :: String.t()
@callback header(Authorization.t(), nil | String.t() | map | none) :: List.t()
defmacro __using__(_) do
quote do
alias Upstream.B2.{
Url,
Account
}
alias Account.Authorization
@behaviour unquote(__MODULE__)
@spec call(Authorization.t() | nil, Keyword.t()) :: {:ok | :error, %__MODULE__{} | struct}
def call(auth, options \\ []) do
url_option = Keyword.get(options, :url, nil)
header_option = Keyword.get(options, :header, nil)
body_option = Keyword.get(options, :body, nil)
request_options = Keyword.get(options, :options, [])
Request.post(
%__MODULE__{},
url(auth, url_option),
body(body_option),
header(auth, header_option),
request_options
)
end
def header(auth, nil), do: [{"Authorization", auth.authorization_token}]
def body(nil), do: %{}
defoverridable header: 2, body: 1
end
end
end