Current section
Files
Jump to
Current section
Files
src/libphonenumber_erlang_sup.erl
-module(libphonenumber_erlang_sup).
-behaviour(supervisor).
-export([start_link/0]).
-export([init/1]).
-include_lib("libphonenumber_erlang/include/phonenumbers.hrl").
start_link() ->
supervisor:start_link({local, ?MODULE}, ?MODULE, []).
init([]) ->
init_ets(),
load_countryphonenumbers_rules(),
Procs = [],
{ok, {{one_for_one, 1, 5}, Procs}}.
%% -------------------------------------------------------------------
%% @private
%% -------------------------------------------------------------------
-spec load_countryphonenumbers_rules() -> ok.
load_countryphonenumbers_rules() ->
PhoneNumberMetadata = code:priv_dir(libphonenumber_erlang) ++ "/" ++ ?FILE_PHONE_PHONE_FORMATS,
Rules = libphonenumber_parser:xml_file2memory(PhoneNumberMetadata),
maps:fold(
fun(Code, CodeRulesInfo, _) ->
CodeRules = [#code_set{id = Id, lengths = Length, name = Name, pattern = Pattern} ||
#{id := Id, lengths := Length, pattern := Pattern, name := Name} <- CodeRulesInfo],
Record = #countryphones{
code = Code,
code_rules = CodeRules},
ets:insert(?ETS_TABLE, Record)
end, #{}, Rules),
ok.
%% -------------------------------------------------------------------
%% @private
%% -------------------------------------------------------------------
init_ets() ->
ets:new(?ETS_TABLE,
[named_table, public, ordered_set, {keypos, 2},
{write_concurrency, true}, {read_concurrency, true}]).