Current section
Files
Jump to
Current section
Files
src/lap.erl
-module(lap).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch]).
-export([start_with_time/3, start/2, start_in_microseconds/1, start_in_milliseconds/1, start_in_seconds/1, start_in_minutes/1, time_with_time/3, time/2, total_time/1, sort_max/1, intervals/1, pretty_print/1]).
-export_type([lap_data/0, interval_data/0]).
-opaque lap_data() :: {lap_data,
binary(),
birl:time(),
birl:time(),
birl@duration:unit(),
list(interval_data())}.
-opaque interval_data() :: {interval_data, binary(), binary(), integer()}.
-file("/Users/josephlyons/Projects/Personal/gleam/lap/src/lap.gleam", 49).
-spec start_with_time(binary(), birl@duration:unit(), birl:time()) -> lap_data().
start_with_time(Marker, Duration_unit, Time) ->
{lap_data, Marker, Time, Time, Duration_unit, []}.
-file("/Users/josephlyons/Projects/Personal/gleam/lap/src/lap.gleam", 40).
-spec start(binary(), birl@duration:unit()) -> lap_data().
start(Marker, Duration_unit) ->
gleam@list:repeat(birl:now(), 3),
start_with_time(Marker, Duration_unit, birl:now()).
-file("/Users/josephlyons/Projects/Personal/gleam/lap/src/lap.gleam", 24).
-spec start_in_microseconds(binary()) -> lap_data().
start_in_microseconds(Marker) ->
start(Marker, micro_second).
-file("/Users/josephlyons/Projects/Personal/gleam/lap/src/lap.gleam", 28).
-spec start_in_milliseconds(binary()) -> lap_data().
start_in_milliseconds(Marker) ->
start(Marker, milli_second).
-file("/Users/josephlyons/Projects/Personal/gleam/lap/src/lap.gleam", 32).
-spec start_in_seconds(binary()) -> lap_data().
start_in_seconds(Marker) ->
start(Marker, second).
-file("/Users/josephlyons/Projects/Personal/gleam/lap/src/lap.gleam", 36).
-spec start_in_minutes(binary()) -> lap_data().
start_in_minutes(Marker) ->
start(Marker, minute).
-file("/Users/josephlyons/Projects/Personal/gleam/lap/src/lap.gleam", 68).
-spec time_with_time(lap_data(), binary(), birl:time()) -> lap_data().
time_with_time(Data, Marker, Time) ->
{Start_marker, End_marker} = case erlang:element(6, Data) of
[] ->
{erlang:element(2, Data), Marker};
[Previous_interval | _] ->
{erlang:element(3, Previous_interval), Marker}
end,
erlang:setelement(
6,
erlang:setelement(4, Data, Time),
[{interval_data,
Start_marker,
End_marker,
begin
_pipe = birl:difference(Time, erlang:element(4, Data)),
birl@duration:blur_to(_pipe, erlang:element(5, Data))
end} |
erlang:element(6, Data)]
).
-file("/Users/josephlyons/Projects/Personal/gleam/lap/src/lap.gleam", 63).
-spec time(lap_data(), binary()) -> lap_data().
time(Data, Marker) ->
time_with_time(Data, Marker, birl:now()).
-file("/Users/josephlyons/Projects/Personal/gleam/lap/src/lap.gleam", 89).
-spec total_time(lap_data()) -> integer().
total_time(Data) ->
_pipe = erlang:element(4, Data),
_pipe@1 = birl:difference(_pipe, erlang:element(3, Data)),
birl@duration:blur_to(_pipe@1, erlang:element(5, Data)).
-file("/Users/josephlyons/Projects/Personal/gleam/lap/src/lap.gleam", 95).
-spec sort_max(lap_data()) -> lap_data().
sort_max(Data) ->
Intervals = begin
_pipe = erlang:element(6, Data),
gleam@list:sort(
_pipe,
fun(A, B) ->
gleam@int:compare(erlang:element(4, A), erlang:element(4, B))
end
)
end,
erlang:setelement(6, Data, Intervals).
-file("/Users/josephlyons/Projects/Personal/gleam/lap/src/lap.gleam", 103).
-spec intervals(lap_data()) -> list({binary(), binary(), integer()}).
intervals(Data) ->
_pipe = erlang:element(6, Data),
_pipe@1 = gleam@list:map(
_pipe,
fun(Interval) ->
{erlang:element(2, Interval),
erlang:element(3, Interval),
erlang:element(4, Interval)}
end
),
lists:reverse(_pipe@1).
-file("/Users/josephlyons/Projects/Personal/gleam/lap/src/lap.gleam", 111).
-spec pretty_print(lap_data()) -> binary().
pretty_print(Data) ->
Duration_unit_text = case erlang:element(5, Data) of
micro_second ->
<<"μs"/utf8>>;
milli_second ->
<<"ms"/utf8>>;
second ->
<<"s"/utf8>>;
minute ->
<<"min"/utf8>>;
hour ->
<<"h"/utf8>>;
day ->
<<"d"/utf8>>;
week ->
<<"w"/utf8>>;
month ->
<<"mo"/utf8>>;
year ->
<<"y"/utf8>>
end,
Builder = begin
_pipe = tobble:builder(),
tobble:add_row(
_pipe,
[<<"Start"/utf8>>, <<"End"/utf8>>, <<"Interval"/utf8>>]
)
end,
Table = begin
_pipe@1 = Data,
_pipe@2 = intervals(_pipe@1),
_pipe@5 = gleam@list:fold(
_pipe@2,
Builder,
fun(Builder@1, Interval) -> _pipe@3 = Builder@1,
tobble:add_row(
_pipe@3,
[erlang:element(1, Interval),
erlang:element(2, Interval),
<<<<(begin
_pipe@4 = erlang:element(3, Interval),
erlang:integer_to_binary(_pipe@4)
end)/binary,
" "/utf8>>/binary,
Duration_unit_text/binary>>]
) end
),
tobble:build(_pipe@5)
end,
case Table of
{ok, Table@1} ->
_pipe@6 = Table@1,
tobble:render(_pipe@6);
{error, _} ->
<<""/utf8>>
end.