-
Notifications
You must be signed in to change notification settings - Fork 0
/
scoper_storage.erl
60 lines (46 loc) · 1.14 KB
/
scoper_storage.erl
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
-module(scoper_storage).
%% API
-export([store/2]).
-export([find/1]).
-export([delete/0]).
-export([delete/1]).
-export([collect/0]).
%% Types
-type key() :: atom().
-type value() :: any().
-type meta() :: #{key() => value()}.
-type scope() :: key().
-type payload() :: meta() | [scope()].
-type data() :: #{scope() => payload()}.
-export_type([key/0, value/0, meta/0, scope/0, payload/0, data/0]).
%%
%% Behaviour definition
%%
-callback store(scope(), payload()) -> ok.
-callback find(scope()) -> payload() | undefined.
-callback delete() -> ok.
-callback delete(scope()) -> ok.
-callback collect() -> data().
%%
%% API
%%
-spec store(scope(), payload()) -> ok.
store(ScopeName, Payload) ->
(logger()):store(ScopeName, Payload).
-spec find(scope()) -> payload() | undefined.
find(ScopeName) ->
(logger()):find(ScopeName).
-spec delete() -> ok.
delete() ->
(logger()):delete().
-spec delete(scope()) -> ok.
delete(ScopeName) ->
(logger()):delete(ScopeName).
-spec collect() -> data().
collect() ->
(logger()):collect().
%%
%% Internal functions
%%
logger() ->
application:get_env(scoper, storage, scoper_storage_procdict).