-module(spectator@internal@common). -compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch]). -export([encode_params/1, add_param/3, get_param/2, sanitize_params/1, truncate_float/1, format_percentage/1, static_file/1, emit_after/4, get_refresh_interval/1]). -file("/Users/jonas/Projects/spectator/src/spectator/internal/common.gleam", 30). -spec encode_params(list({binary(), binary()})) -> binary(). encode_params(Params) -> case Params of [] -> <<""/utf8>>; _ -> <<"?"/utf8, (gleam@uri:query_to_string(Params))/binary>> end. -file("/Users/jonas/Projects/spectator/src/spectator/internal/common.gleam", 37). -spec add_param(list({binary(), binary()}), binary(), binary()) -> list({binary(), binary()}). add_param(Params, Key, Value) -> case Value of <<""/utf8>> -> Params; _ -> [{Key, Value} | Params] end. -file("/Users/jonas/Projects/spectator/src/spectator/internal/common.gleam", 44). -spec get_param(list({binary(), binary()}), binary()) -> {ok, binary()} | {error, nil}. get_param(Params, Key) -> gleam@list:find_map(Params, fun(P) -> case P of {K, <<""/utf8>>} when K =:= Key -> {error, nil}; {K@1, V} when K@1 =:= Key -> {ok, V}; _ -> {error, nil} end end). -file("/Users/jonas/Projects/spectator/src/spectator/internal/common.gleam", 54). -spec sanitize_params(list({binary(), binary()})) -> list({binary(), binary()}). sanitize_params(Params) -> gleam@list:filter_map(Params, fun(P) -> case P of {<<"node"/utf8>>, _} -> {ok, P}; {<<"cookie"/utf8>>, _} -> {ok, P}; {<<"refresh"/utf8>>, _} -> {ok, P}; _ -> {error, nil} end end). -file("/Users/jonas/Projects/spectator/src/spectator/internal/common.gleam", 77). -spec truncate_float(float()) -> binary(). truncate_float(Value) -> spectator_ffi:truncate_float(Value). -file("/Users/jonas/Projects/spectator/src/spectator/internal/common.gleam", 79). -spec format_percentage(float()) -> binary(). format_percentage(Value) -> <<(spectator_ffi:truncate_float(Value))/binary, "%"/utf8>>. -file("/Users/jonas/Projects/spectator/src/spectator/internal/common.gleam", 83). -spec static_file(binary()) -> binary(). static_file(Name) -> _assert_subject = gleam_erlang_ffi:priv_directory(<<"spectator"/utf8>>), {ok, Priv} = case _assert_subject of {ok, _} -> _assert_subject; _assert_fail -> erlang:error(#{gleam_error => let_assert, message => <<"Pattern match failed, no pattern matched the value."/utf8>>, value => _assert_fail, module => <<"spectator/internal/common"/utf8>>, function => <<"static_file"/utf8>>, line => 84}) end, _assert_subject@1 = simplifile:read( <<<>/binary, Name/binary>> ), {ok, Data} = case _assert_subject@1 of {ok, _} -> _assert_subject@1; _assert_fail@1 -> erlang:error(#{gleam_error => let_assert, message => <<"Pattern match failed, no pattern matched the value."/utf8>>, value => _assert_fail@1, module => <<"spectator/internal/common"/utf8>>, function => <<"static_file"/utf8>>, line => 85}) end, Data. -file("/Users/jonas/Projects/spectator/src/spectator/internal/common.gleam", 89). -spec emit_after( integer(), APUJ, gleam@option:option(gleam@erlang@process:subject(APUJ)), fun((gleam@erlang@process:subject(APUJ)) -> APUJ) ) -> lustre@effect:effect(APUJ). emit_after(Delay, Msg, Subject, Subject_created_message) -> case Subject of {some, Self} -> lustre@effect:from( fun(_) -> _ = gleam@erlang@process:send_after(Self, Delay, Msg), nil end ); none -> lustre@server_component:select( fun(Dispatch, Subject@1) -> Selector = begin _pipe = gleam_erlang_ffi:new_selector(), gleam@erlang@process:selecting( _pipe, Subject@1, fun(Msg@1) -> Msg@1 end ) end, _ = gleam@erlang@process:send_after(Subject@1, Delay, Msg), Dispatch(Subject_created_message(Subject@1)), Selector end ) end. -file("/Users/jonas/Projects/spectator/src/spectator/internal/common.gleam", 65). -spec get_refresh_interval(list({binary(), binary()})) -> integer(). get_refresh_interval(Params) -> case get_param(Params, <<"refresh"/utf8>>) of {ok, Rate} -> case gleam@int:parse(Rate) of {ok, R} -> R; {error, _} -> 1000 end; {error, _} -> 1000 end.