-module(oaspec@internal@progress). -compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]). -define(FILEPATH, "src/oaspec/internal/progress.gleam"). -export([noop/0, from_fn/1, report/2, timed/1, format_ms/1, timed_stage/3, stdout_with_elapsed/0]). -export_type([reporter/0]). -if(?OTP_RELEASE >= 27). -define(MODULEDOC(Str), -moduledoc(Str)). -define(DOC(Str), -doc(Str)). -else. -define(MODULEDOC(Str), -compile([])). -define(DOC(Str), -compile([])). -endif. ?MODULEDOC(false). -opaque reporter() :: {reporter, fun((binary()) -> nil)}. -file("src/oaspec/internal/progress.gleam", 29). ?DOC(false). -spec noop() -> reporter(). noop() -> {reporter, fun(_) -> nil end}. -file("src/oaspec/internal/progress.gleam", 36). ?DOC(false). -spec from_fn(fun((binary()) -> nil)) -> reporter(). from_fn(Emit) -> {reporter, Emit}. -file("src/oaspec/internal/progress.gleam", 41). ?DOC(false). -spec report(reporter(), binary()) -> nil. report(Reporter, Message) -> (erlang:element(2, Reporter))(Message). -file("src/oaspec/internal/progress.gleam", 48). ?DOC(false). -spec timed(fun(() -> TUF)) -> {integer(), TUF}. timed(Body) -> Start = oaspec_ffi:monotonic_ms(), Result = Body(), End = oaspec_ffi:monotonic_ms(), {End - Start, Result}. -file("src/oaspec/internal/progress.gleam", 80). ?DOC(false). -spec format_ms(integer()) -> binary(). format_ms(Ms) -> case Ms < 1000 of true -> <<(erlang:integer_to_binary(Ms))/binary, "ms"/utf8>>; false -> Total_seconds = Ms div 1000, Tenths = (Ms - (Total_seconds * 1000)) div 100, case Total_seconds >= 60 of true -> Minutes = Total_seconds div 60, Seconds = Total_seconds - (Minutes * 60), <<<<<<<<<<(erlang:integer_to_binary(Minutes))/binary, "m"/utf8>>/binary, (erlang:integer_to_binary(Seconds))/binary>>/binary, "."/utf8>>/binary, (erlang:integer_to_binary(Tenths))/binary>>/binary, "s"/utf8>>; false -> <<<<<<(erlang:integer_to_binary(Total_seconds))/binary, "."/utf8>>/binary, (erlang:integer_to_binary(Tenths))/binary>>/binary, "s"/utf8>> end end. -file("src/oaspec/internal/progress.gleam", 63). ?DOC(false). -spec timed_stage(reporter(), binary(), fun(() -> TUG)) -> TUG. timed_stage(Reporter, Label, Body) -> report(Reporter, <