Packages

Gleam implementation of Pika ID

Retired package: Deprecated

Current section

Files

Jump to
pika_id src pika_id@utils.erl
Raw

src/pika_id@utils.erl

-module(pika_id@utils).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch]).
-export([get_timestamp/0, getifaddrs/0, get_mac_address/0, compute_node_id/0, is_alphanumeric_list/1]).
-export_type([address/0]).
-type address() :: {hwaddr, list(integer())} |
flags |
addr |
netmask |
broadaddr.
-spec get_timestamp() -> integer().
get_timestamp() ->
_pipe = millisecond,
os:system_time(_pipe).
-spec getifaddrs() -> {ok, list({list(integer()), list(address())})} |
{error, binary()}.
getifaddrs() ->
inet:getifaddrs().
-spec filter_hwaddrs(list(address())) -> address().
filter_hwaddrs(Addresses) ->
_assert_subject = gleam@list:find(Addresses, fun(Address) -> case Address of
{hwaddr, [0, 0, 0, 0, 0, 0]} ->
false;
{hwaddr, [_, _, _, _, _, _]} ->
true;
_ ->
false
end end),
{ok, Hwaddr} = case _assert_subject of
{ok, _} -> _assert_subject;
_assert_fail ->
erlang:error(#{gleam_error => let_assert,
message => <<"Assertion pattern match failed"/utf8>>,
value => _assert_fail,
module => <<"pika_id/utils"/utf8>>,
function => <<"filter_hwaddrs"/utf8>>,
line => 53})
end,
Hwaddr.
-spec get_mac_address() -> binary().
get_mac_address() ->
_assert_subject = inet:getifaddrs(),
{ok, Interfaces} = case _assert_subject of
{ok, _} -> _assert_subject;
_assert_fail ->
erlang:error(#{gleam_error => let_assert,
message => <<"Assertion pattern match failed"/utf8>>,
value => _assert_fail,
module => <<"pika_id/utils"/utf8>>,
function => <<"get_mac_address"/utf8>>,
line => 28})
end,
Unfiltered_hwaddrs = begin
_pipe = Interfaces,
_pipe@1 = gleam@list:map(
_pipe,
fun(Interface) ->
{_, Addresses_list} = Interface,
Addresses_list
end
),
_pipe@2 = gleam@list:map(
_pipe@1,
fun(Addresses) ->
gleam@list:filter_map(Addresses, fun(Address) -> case Address of
{hwaddr, _} ->
{ok, Address};
_ ->
{error, nil}
end end)
end
),
gleam@list:flatten(_pipe@2)
end,
_assert_subject@1 = filter_hwaddrs(Unfiltered_hwaddrs),
{hwaddr, Mac_list} = case _assert_subject@1 of
{hwaddr, _} -> _assert_subject@1;
_assert_fail@1 ->
erlang:error(#{gleam_error => let_assert,
message => <<"Assertion pattern match failed"/utf8>>,
value => _assert_fail@1,
module => <<"pika_id/utils"/utf8>>,
function => <<"get_mac_address"/utf8>>,
line => 45})
end,
_pipe@3 = Mac_list,
_pipe@6 = gleam@list:map(_pipe@3, fun(Num) -> _pipe@4 = Num,
_pipe@5 = gleam@int:to_base16(_pipe@4),
gleam@string:pad_left(_pipe@5, 2, <<"0"/utf8>>) end),
gleam@string:join(_pipe@6, <<":"/utf8>>).
-spec compute_node_id() -> integer().
compute_node_id() ->
_assert_subject = begin
_pipe = get_mac_address(),
_pipe@1 = gleam@string:replace(_pipe, <<":"/utf8>>, <<""/utf8>>),
gleam@int:base_parse(_pipe@1, 16)
end,
{ok, Id} = case _assert_subject of
{ok, _} -> _assert_subject;
_assert_fail ->
erlang:error(#{gleam_error => let_assert,
message => <<"Assertion pattern match failed"/utf8>>,
value => _assert_fail,
module => <<"pika_id/utils"/utf8>>,
function => <<"compute_node_id"/utf8>>,
line => 66})
end,
Id rem 1024.
-spec is_alphanumeric_list(list(binary())) -> {ok, binary()} | {error, nil}.
is_alphanumeric_list(Str_list) ->
_assert_subject = gleam@regex:from_string(<<"^[0-9a-z]+$"/utf8>>),
{ok, Reg} = case _assert_subject of
{ok, _} -> _assert_subject;
_assert_fail ->
erlang:error(#{gleam_error => let_assert,
message => <<"Assertion pattern match failed"/utf8>>,
value => _assert_fail,
module => <<"pika_id/utils"/utf8>>,
function => <<"is_alphanumeric_list"/utf8>>,
line => 72})
end,
_pipe = Str_list,
gleam@list:find(_pipe, fun(Str) -> not gleam@regex:check(Reg, Str) end).