Packages
timber
2.0.0-rc5
3.1.2
3.1.1
3.1.0
3.0.0
3.0.0-alpha.3
3.0.0-alpha.2
3.0.0-alpha.1
2.8.4
2.8.3
2.8.2
2.8.1
2.8.0
2.7.0
2.6.1
2.6.0
2.5.6
2.5.5
2.5.4
2.5.3
2.5.2
2.5.1
2.5.0
2.4.5
2.4.4
2.4.3
2.4.2
2.4.1
2.4.0
2.3.4
2.3.3
2.3.1
2.3.0
2.2.1
2.2.0
2.1.8
2.1.7
2.1.6
2.1.5
2.1.4
2.1.3
2.1.2
2.1.1
2.1.0
2.0.2
2.0.1
2.0.0
2.0.0-rc7
2.0.0-rc6
2.0.0-rc5
2.0.0-rc4
2.0.0-rc3
2.0.0-rc2
2.0.0-rc1
1.1.18
1.1.17
1.1.16
1.1.15
1.1.14
1.1.13
1.1.12
1.1.11
1.1.10
1.1.9
1.1.8
1.1.7
1.1.6
1.1.5
1.1.4
1.1.3
1.1.2
1.1.1
1.1.0
1.0.16
1.0.15
1.0.14
1.0.13
1.0.12
1.0.11
1.0.10
1.0.9
1.0.8
1.0.7
1.0.6
1.0.5
1.0.4
1.0.3
1.0.2
1.0.1
1.0.0
0.4.7
0.4.6
0.4.5
0.4.4
0.4.3
0.4.2
0.4.1
0.4.0
0.3.2
0.3.1
0.3.0
0.2.3
0.2.2
0.2.1
0.2.0
0.1.5
0.1.4
0.1.3
0.1.2
0.1.1
0.1.0
🌲 Great Elixir Logging Made Easy. Official Timber.io Integration.
Current section
Files
Jump to
Current section
Files
lib/timber/http_client.ex
defmodule Timber.HTTPClient do
@moduledoc """
Behavior for custom HTTP clients. If you opt not to use the default Timber HTTP client
(`Timber.HTTPClients.Hackney`) you can define your own by adhering to this behavior.
## Example
```elixir
defmodule MyHTTPClient do
alias Timber.HTTPClient
@behaviour HTTPClient
@spec request(HTTPClient.method, HTTPClient.url, HTTPClient.headers, HTTPClient.body, HTTPClient.options) ::
{:ok, HTTPClient.status, HTTPClient.Headers, HTTPClient.body} | {:error, any()}
def request(method, url, headers, body, opts) do
# make request here
end
end
```
Then specify it in your configuration:
```elixir
config :timber, :http_client, MyHTTPClient
```
"""
@type body :: IO.chardata
@type headers :: map
@type method :: atom
@type status :: pos_integer
@type url :: String.t
@type async_result :: {:ok, reference} | {:error, atom}
@type result :: {:ok, integer, map, String.t} | {:error, atom}
@callback start() :: :ok
@callback async_request(method, url, headers, body) :: async_result
@callback request(method, url, headers, body) :: result
@callback wait_on_request(reference) :: :ok
end