/jsonrpc2-elixir

JSON-RPC 2.0 for Elixir

Primary LanguageElixirOtherNOASSERTION

Build Status

JSONRPC2

JSON-RPC 2.0 for Elixir.

Use the included line-based TCP/TLS server/client, JSON-in-the-body HTTP(S) server/client, or bring your own transport.

See the examples directory as well as the JSONRPC2 docs for examples.

Installation

  1. Add jsonrpc2 and poison to your list of dependencies in mix.exs:
def deps do
  [{:jsonrpc2, "~> 1.0"}, {:poison, "~> 3.1"}]
end
  1. Ensure jsonrpc2 andpoison are started before your application:
def application do
  [applications: [:jsonrpc2, :poison]]
end

Serialization

Uses poison by default, but you can use any serializer (it doesn't even have to be JSON, technically).

A serializer for jiffy is included as JSONRPC2.Serializers.Jiffy.

To use a different serializer you must configure it in your Mix config. For the jiffy serializer:

config :jsonrpc2, :serializer, JSONRPC2.Serializers.Jiffy

If you are going to use the jiffy serializer, you must add it to your deps and applications instead of poison:

def deps do
  [..., {:jiffy, "~> 0.14"}]
end
def application do
  [applications: [..., :jiffy]]
end

If you use your own serializer, you do not (necessarily) need to add poison or jiffy to your deps/apps.

TCP/TLS server

If you plan to use the TCP/TLS server, you also need to add ranch to your deps/apps.

def deps do
  [..., {:ranch, "~> 1.3"}]
end
def application do
  [applications: [..., :ranch]]
end

TCP/TLS client

If you plan to use the TCP/TLS client, you also need to add shackle to your deps/apps.

def deps do
  [..., {:shackle, "~> 0.5"}]
end
def application do
  [applications: [..., :shackle]]
end

HTTP(S) server

If you plan to use the HTTP(S) server, you also need to add plug and cowboy to your deps/apps.

def deps do
  [..., {:plug, "~> 1.3"}, {:cowboy, "~> 1.1"}]
end
def application do
  [applications: [..., :plug, :cowboy]]
end

HTTP(S) client

If you plan to use the HTTP(S) client, you also need to add hackney to your deps/apps.

def deps do
  [..., {:hackney, "~> 1.7"}]
end
def application do
  [applications: [..., :hackney]]
end