-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathcauder_wx_config.erl
69 lines (54 loc) · 1.99 KB
/
cauder_wx_config.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
61
62
63
64
65
66
67
68
69
-module(cauder_wx_config).
%% API
-export([load/0, save/1]).
-define(CONFIG_FILE, "econfig.cfg").
-include("cauder.hrl").
-include("cauder_wx.hrl").
-type config() :: #config{}.
-export_type([config/0]).
%%%=============================================================================
%%% API
%%%=============================================================================
-spec load() -> Config when
Config :: config().
load() ->
FileName = filename:join(config_dir(), ?CONFIG_FILE),
case file:consult(FileName) of
{ok, [#config{} = Config]} -> config_check(Config);
_ -> #config{}
end.
-spec save(Config) -> 'ok' when
Config :: config().
save(#config{} = Config) ->
FileName = filename:join(config_dir(), ?CONFIG_FILE),
case filelib:ensure_dir(FileName) of
ok -> file:write_file(FileName, io_lib:format("~p.\n", [Config]));
{error, _} -> ok
end.
%%%=============================================================================
%%% Internal functions
%%%=============================================================================
-spec config_dir() -> File when
File :: file:filename_all().
config_dir() -> filename:basedir(user_config, ?APP_NAME).
-spec config_check(Config) -> CheckedConfig when
Config :: config(),
CheckedConfig :: config().
config_check(#config{bindings_mode = BindingMode, history_mode = HistoryMode, mailbox_mode = MailboxMode} = Config) when
is_boolean(Config#config.current_expression),
is_boolean(Config#config.bindings),
is_boolean(Config#config.stack),
is_boolean(Config#config.log),
is_boolean(Config#config.history),
is_boolean(Config#config.mailbox),
is_atom(BindingMode),
BindingMode =:= all orelse BindingMode =:= relevant,
is_atom(HistoryMode),
HistoryMode =:= full orelse HistoryMode =:= concurrent,
is_atom(MailboxMode),
MailboxMode =:= all orelse MailboxMode =:= process,
is_boolean(Config#config.status_bar)
->
Config;
config_check(_) ->
#config{}.