-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, intervals/1, pretty_print/1]). -export_type([lap_data/0, interval_data/0]). -opaque lap_data() :: {lap_data, birl:time(), binary(), birl@duration:unit(), list(interval_data())}. -opaque interval_data() :: {interval_data, binary(), binary(), birl@duration:duration()}. -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, Time, Marker, 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", 62). -spec time_with_time(lap_data(), binary(), birl:time()) -> lap_data(). time_with_time(Data, Marker, Time) -> {Start_marker, End_marker} = case erlang:element(5, Data) of [] -> {erlang:element(3, Data), Marker}; [Last_interval | _] -> {erlang:element(3, Last_interval), Marker} end, erlang:setelement( 5, erlang:setelement(2, Data, Time), [{interval_data, Start_marker, End_marker, birl:difference(Time, erlang:element(2, Data))} | erlang:element(5, Data)] ). -file("/Users/josephlyons/Projects/Personal/gleam/lap/src/lap.gleam", 57). -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", 78). -spec intervals(lap_data()) -> list({binary(), binary(), integer()}). intervals(Data) -> _pipe = erlang:element(5, Data), _pipe@2 = gleam@list:map( _pipe, fun(Interval) -> {erlang:element(2, Interval), erlang:element(3, Interval), begin _pipe@1 = erlang:element(4, Interval), birl@duration:blur_to(_pipe@1, erlang:element(4, Data)) end} end ), lists:reverse(_pipe@2). -file("/Users/josephlyons/Projects/Personal/gleam/lap/src/lap.gleam", 90). -spec pretty_print(lap_data()) -> binary(). pretty_print(Data) -> Table = begin _pipe = tobble:builder(), tobble:add_row( _pipe, [<<"Start"/utf8>>, <<"End"/utf8>>, <<"Interval"/utf8>>] ) end, Table@1 = begin _pipe@1 = Data, _pipe@2 = intervals(_pipe@1), _pipe@5 = gleam@list:fold( _pipe@2, Table, fun(Builder, Interval) -> _pipe@3 = Builder, 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] ) end ), tobble:build(_pipe@5) end, case Table@1 of {ok, Table@2} -> _pipe@6 = Table@2, tobble:render(_pipe@6); {error, _} -> <<""/utf8>> end.