From aaf2f002244e17e4886e06c40568e094799bc997 Mon Sep 17 00:00:00 2001 From: alexpeachey Date: Thu, 21 Mar 2019 15:10:12 -0700 Subject: [PATCH] Add JSONRPC.Method --- lib/json_rpc/method.ex | 37 +++++++++++++++++++++++++++++++++++++ mix.exs | 2 +- 2 files changed, 38 insertions(+), 1 deletion(-) create mode 100644 lib/json_rpc/method.ex diff --git a/lib/json_rpc/method.ex b/lib/json_rpc/method.ex new file mode 100644 index 0000000..34115cd --- /dev/null +++ b/lib/json_rpc/method.ex @@ -0,0 +1,37 @@ +defmodule JSONRPC.Method do + defmacro __using__(_opts) do + quote do + import JSONRPC.Method + end + end + + defmacro defmethod(module_name, arg_name, opts, do: block) do + pre = + opts + |> Keyword.get(:pre, []) + |> List.wrap() + |> Enum.map(fn + {processor, popts} -> quote do: process(unquote(processor), unquote(popts)) + processor -> quote do: process(unquote(processor)) + end) + + post = + opts + |> Keyword.get(:post, []) + |> List.wrap() + |> Enum.map(fn + {processor, popts} -> quote do: process(unquote(processor), unquote(popts)) + processor -> quote do: process(unquote(processor)) + end) + + quote do + defmodule unquote(module_name) do + use JSONRPC.ActionBuilder + + unquote(pre) + method(unquote(arg_name), do: unquote(block)) + unquote(post) + end + end + end +end diff --git a/mix.exs b/mix.exs index b13f63b..070af74 100644 --- a/mix.exs +++ b/mix.exs @@ -4,7 +4,7 @@ defmodule JsonRpcToolkit.MixProject do def project do [ app: :json_rpc_toolkit, - version: "0.9.1", + version: "0.9.2", name: "json_rpc_toolkit", description: "A transport agnostic JSON-RPC library with support for Phoenix", elixir: "~> 1.8",