defmodule HTTPoison do @moduledoc """ The HTTP client for Elixir. The `HTTPoison` module can be used to issue HTTP requests and parse HTTP responses to arbitrary urls. iex> HTTPoison.get!("https://api.github.com") %HTTPoison.Response{status_code: 200, headers: [{"content-type", "application/json"}], body: "{...}"} It's very common to use HTTPoison in order to wrap APIs, which is when the `HTTPoison.Base` module shines. Visit the documentation for `HTTPoison.Base` for more information. Under the hood, the `HTTPoison` module just uses `HTTPoison.Base` (as described in the documentation for `HTTPoison.Base`) without overriding any default function. """ defmodule Response do defstruct status_code: nil, body: nil, headers: [] @type t :: %Response{status_code: integer, body: binary, headers: list} end defmodule AsyncResponse do defstruct id: nil @type t :: %AsyncResponse{id: reference} end defmodule AsyncStatus do defstruct id: nil, code: nil @type t :: %AsyncStatus{id: reference, code: integer} end defmodule AsyncHeaders do defstruct id: nil, headers: [] @type t :: %AsyncHeaders{id: reference, headers: list} end defmodule AsyncChunk do defstruct id: nil, chunk: nil @type t :: %AsyncChunk{id: reference, chunk: binary} end defmodule AsyncEnd do defstruct id: nil @type t :: %AsyncEnd{id: reference} end defmodule Error do defexception reason: nil, id: nil @type t :: %Error{id: reference, reason: any} def message(%Error{reason: reason, id: nil}), do: inspect(reason) def message(%Error{reason: reason, id: id}), do: "[Reference: #{id}] - #{inspect reason}" end use HTTPoison.Base end