mirror of
https://github.com/valitydev/machinery-erlang.git
synced 2024-11-06 00:35:19 +00:00
Bug fixes and interface improvements (#4)
This commit is contained in:
parent
4b582b951e
commit
b28235ec20
@ -25,15 +25,15 @@
|
||||
-type aux_state(T) :: T.
|
||||
|
||||
-type event_cursor() :: undefined | event_id().
|
||||
-type limit() :: undefined | pos_integer().
|
||||
-type limit() :: undefined | non_neg_integer().
|
||||
-type direction() :: forward | backward.
|
||||
-type range() :: {event_cursor(), limit(), direction()}.
|
||||
-type signal(T) :: {init, args(T)} | timeout.
|
||||
-type machine(T) :: #{
|
||||
-type machine(E, A) :: #{
|
||||
namespace := namespace(),
|
||||
id := id(),
|
||||
history := history(T),
|
||||
aux_state := aux_state(_)
|
||||
history := history(E),
|
||||
aux_state := aux_state(A)
|
||||
%% TODO
|
||||
%% history_range ?
|
||||
%% timer ?
|
||||
@ -44,7 +44,7 @@
|
||||
-export_type([range/0]).
|
||||
-export_type([args/1]).
|
||||
-export_type([response/1]).
|
||||
-export_type([machine/1]).
|
||||
-export_type([machine/2]).
|
||||
|
||||
-type modopts(O) :: module() | {module(), O}.
|
||||
|
||||
@ -76,15 +76,15 @@
|
||||
-export([dispatch_call/4]).
|
||||
|
||||
%% Behaviour definition
|
||||
-type seconds() :: pos_integer().
|
||||
-type seconds() :: non_neg_integer().
|
||||
-type timer() ::
|
||||
{timeout, seconds()} |
|
||||
{deadline, timestamp()}.
|
||||
|
||||
-type result(T) :: #{
|
||||
events => [event_body(T)],
|
||||
-type result(E, A) :: #{
|
||||
events => [event_body(E)],
|
||||
action => action() | [action()],
|
||||
aux_state => aux_state(_)
|
||||
aux_state => aux_state(A)
|
||||
}.
|
||||
|
||||
-type action() ::
|
||||
@ -93,17 +93,19 @@
|
||||
continue |
|
||||
remove.
|
||||
|
||||
-export_type([result/1]).
|
||||
-export_type([timestamp/0]).
|
||||
-export_type([seconds/0]).
|
||||
-export_type([result/2]).
|
||||
-export_type([action/0]).
|
||||
|
||||
-callback init(args(_), machine(T), handler_args(_), handler_opts(_)) ->
|
||||
result(T).
|
||||
-callback init(args(_), machine(E, A), handler_args(_), handler_opts(_)) ->
|
||||
result(E, A).
|
||||
|
||||
-callback process_timeout(machine(T), handler_args(_), handler_opts(_)) ->
|
||||
result(T).
|
||||
-callback process_timeout(machine(E, A), handler_args(_), handler_opts(_)) ->
|
||||
result(E, A).
|
||||
|
||||
-callback process_call(args(_), machine(T), handler_args(_), handler_opts(_)) ->
|
||||
{response(_), result(T)}.
|
||||
-callback process_call(args(_), machine(E, A), handler_args(_), handler_opts(_)) ->
|
||||
{response(_), result(E, A)}.
|
||||
|
||||
%% API
|
||||
|
||||
@ -125,26 +127,26 @@ call(NS, ID, Range, Args, Backend) ->
|
||||
machinery_backend:call(Module, NS, ID, Range, Args, Opts).
|
||||
|
||||
-spec get(namespace(), id(), backend(_)) ->
|
||||
{ok, machine(_)} | {error, notfound}.
|
||||
{ok, machine(_, _)} | {error, notfound}.
|
||||
get(NS, ID, Backend) ->
|
||||
get(NS, ID, {undefined, undefined, forward}, Backend).
|
||||
|
||||
-spec get(namespace(), id(), range(), backend(_)) ->
|
||||
{ok, machine(_)} | {error, notfound}.
|
||||
{ok, machine(_, _)} | {error, notfound}.
|
||||
get(NS, ID, Range, Backend) ->
|
||||
{Module, Opts} = machinery_utils:get_backend(Backend),
|
||||
machinery_backend:get(Module, NS, ID, Range, Opts).
|
||||
|
||||
%% Internal API
|
||||
|
||||
-spec dispatch_signal(signal(_), machine(T), logic_handler(_), handler_opts(_)) ->
|
||||
result(T).
|
||||
-spec dispatch_signal(signal(_), machine(E, A), logic_handler(_), handler_opts(_)) ->
|
||||
result(E, A).
|
||||
dispatch_signal({init, Args}, Machine, {Handler, HandlerArgs}, Opts) ->
|
||||
Handler:init(Args, Machine, HandlerArgs, Opts);
|
||||
dispatch_signal(timeout, Machine, {Handler, HandlerArgs}, Opts) ->
|
||||
Handler:process_timeout(Machine, HandlerArgs, Opts).
|
||||
|
||||
-spec dispatch_call(args(_), machine(T), logic_handler(_), handler_opts(_)) ->
|
||||
{response(_), result(T)}.
|
||||
-spec dispatch_call(args(_), machine(E, A), logic_handler(_), handler_opts(_)) ->
|
||||
{response(_), result(E, A)}.
|
||||
dispatch_call(Args, Machine, {Handler, HandlerArgs}, Opts) ->
|
||||
Handler:process_call(Args, Machine, HandlerArgs, Opts).
|
||||
|
@ -23,7 +23,7 @@
|
||||
{ok, machinery:response(_)} | {error, notfound}.
|
||||
|
||||
-callback get(namespace(), id(), range(), backend_opts()) ->
|
||||
{ok, machinery:machine(_)} | {error, notfound}.
|
||||
{ok, machinery:machine(_, _)} | {error, notfound}.
|
||||
|
||||
%% API
|
||||
|
||||
@ -40,6 +40,6 @@ call(Backend, Namespace, Id, Range, Args, Opts) ->
|
||||
Backend:call(Namespace, Id, Range, Args, Opts).
|
||||
|
||||
-spec get(backend(), namespace(), id(), range(), backend_opts()) ->
|
||||
{ok, machinery:machine(_)} | {error, notfound}.
|
||||
{ok, machinery:machine(_, _)} | {error, notfound}.
|
||||
get(Backend, Namespace, Id, Range, Opts) ->
|
||||
Backend:get(Namespace, Id, Range, Opts).
|
||||
|
@ -70,9 +70,9 @@ construct_namespace(NS) ->
|
||||
|
||||
%%
|
||||
|
||||
-type machine() :: machinery:machine(ev()).
|
||||
-type machine() :: machinery:machine(ev(), _).
|
||||
-type handler_opts() :: machinery:handler_opts(_).
|
||||
-type result() :: machinery:result(ev()).
|
||||
-type result() :: machinery:result(ev(), _).
|
||||
-type response() :: machinery:response(
|
||||
ok | {error, id()}
|
||||
).
|
||||
|
@ -13,7 +13,7 @@
|
||||
-type range() :: machinery:range().
|
||||
-type args(T) :: machinery:args(T).
|
||||
-type response(T) :: machinery:response(T).
|
||||
-type machine(T) :: machinery:machine(T).
|
||||
-type machine(E, A) :: machinery:machine(E, A).
|
||||
-type logic_handler(T) :: machinery:logic_handler(T).
|
||||
|
||||
-define(BACKEND_CORE_OPTS,
|
||||
@ -138,7 +138,7 @@ call(NS, ID, Range, Args, Opts) ->
|
||||
end.
|
||||
|
||||
-spec get(namespace(), id(), range(), backend_opts()) ->
|
||||
{ok, machine(_)} | {error, notfound}.
|
||||
{ok, machine(_, _)} | {error, notfound}.
|
||||
get(NS, ID, Range, Opts) ->
|
||||
Client = get_client(Opts),
|
||||
Schema = get_schema(Opts),
|
||||
@ -304,7 +304,7 @@ marshal(action, V) ->
|
||||
marshal(timer, {timeout, V}) when V > 0 ->
|
||||
{timeout, marshal(integer, V)};
|
||||
|
||||
marshal(deadline, {deadline, V}) ->
|
||||
marshal(timer, {deadline, V}) ->
|
||||
{deadline, marshal(timestamp, V)};
|
||||
|
||||
marshal(namespace, V) ->
|
||||
|
Loading…
Reference in New Issue
Block a user