Packages
upstream
1.5.11-dev
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/request.ex
defmodule Upstream.Request do
@moduledoc """
Request module for making and handling network request to b2
"""
alias Upstream.Error
@spec post(struct, String.t(), List.t(), Keyword.t()) :: {:ok | :error, %Error{} | struct}
def post(caller_struct, url, body, headers, options \\ []) do
default_options = [
timeout: :infinity,
recv_timeout: :infinity,
connect_timeout: :infinity
]
merged_options = Keyword.merge(default_options, options)
case HTTPoison.post(url, body, headers, merged_options) do
{:ok, response = %HTTPoison.AsyncResponse{id: _id}} ->
{:ok, response}
{:ok, %{status_code: 200, body: body}} ->
{:ok, struct(caller_struct, process_response(body))}
{:ok, %{status_code: _, body: body}} ->
{:error, struct(Error, process_response(body))}
{:error, %HTTPoison.Error{id: _id, reason: reason}} ->
{:error, %{error: reason}}
end
end
defp process_response(body) do
body
|> Poison.decode!()
|> Enum.map(fn {k, v} ->
{String.to_atom(Macro.underscore(k)), v}
end)
end
end