Packages

Elixir API to communicate with Matrix Synapse

Current section

Files

Jump to
ex_matrix_api lib behaviour http_client.ex
Raw

lib/behaviour/http_client.ex

defmodule ExMatrixApi.Behaviour.HttpClient do
@moduledoc """
Behaviour for making HTTP requests, to be implemented by adapters.
"""
@type payload :: map() | binary()
@type response :: {:ok, nil | map() | String.t() | [map()]} | {:error, HttpError.t()}
@type http_header :: ExMatrixApi.Util.HttpClient.HTTPoison.http_header()
defmodule HttpError do
defexception message: "HTTP request failed", code: nil, data: nil
def new(message, code \\ nil, data \\ nil) do
%__MODULE__{
message: message,
code: code,
data: data
}
end
end
@doc """
HTTP GET request, all payload is URL encoded.
"""
@callback get(String.t(), [http_header], Keyword.t()) :: response
@doc """
HTTP PUT request.
"""
@callback put(String.t(), payload, [http_header], Keyword.t()) :: response
@doc """
HTTP POST request.
"""
@callback post(String.t(), payload, [http_header], Keyword.t()) :: response
@doc """
HTTP DELETE request.
"""
@callback delete(String.t(), [http_header], Keyword.t()) :: response
defmacro __using__(_opts) do
http_client = ExMatrixApi.Synapse.config!(:http_client)
quote do
defdelegate get(url), to: unquote(http_client)
defdelegate get(url, headers), to: unquote(http_client)
defdelegate get(url, headers, opts), to: unquote(http_client)
defdelegate put(url, payload), to: unquote(http_client)
defdelegate put(url, payload, headers), to: unquote(http_client)
defdelegate put(url, payload, headers, opts), to: unquote(http_client)
defdelegate post(url, payload), to: unquote(http_client)
defdelegate post(url, payload, headers), to: unquote(http_client)
defdelegate post(url, payload, headers, opts), to: unquote(http_client)
defdelegate delete(url), to: unquote(http_client)
defdelegate delete(url, headers), to: unquote(http_client)
defdelegate delete(url, headers, opts), to: unquote(http_client)
end
end
end