Packages

A gleam Open-meteo API client to get weather forecasts.

Current section

Files

Jump to
sunny src sunny@internal@utils.erl
Raw

src/sunny@internal@utils.erl

-module(sunny@internal@utils).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch]).
-export([make_request/1, get_final_url/6, param_list_to_string/2, parse_float_or_int/1, decode14/15, decode18/19]).
-export_type([request_parameter/0]).
-type request_parameter() :: {request_parameter, binary(), binary()}.
-spec make_request(binary()) -> {ok, binary()} | {error, efetch:http_error()}.
make_request(Url) ->
_assert_subject = gleam@http@request:to(Url),
{ok, Request} = 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 => <<"sunny/internal/utils"/utf8>>,
function => <<"make_request"/utf8>>,
line => 11})
end,
gleam@result:'try'(
begin
_pipe = Request,
_pipe@1 = gleam@http@request:prepend_header(
_pipe,
<<"accept"/utf8>>,
<<"application/json"/utf8>>
),
efetch:send(_pipe@1)
end,
fun(Response) -> {ok, erlang:element(4, Response)} end
).
-spec get_final_url(
binary(),
binary(),
boolean(),
binary(),
binary(),
list(request_parameter())
) -> binary().
get_final_url(Base_url, Prefix, Commercial, Endpoint, Apikey, Params) ->
<<<<<<<<<<<<<<"https://"/utf8, (case Commercial of
true ->
<<"customer-"/utf8>>;
false ->
<<""/utf8>>
end)/binary>>/binary, (case Prefix of
<<""/utf8>> ->
<<""/utf8>>;
_ ->
<<Prefix/binary, "-"/utf8>>
end)/binary>>/binary, Base_url/binary>>/binary, Endpoint/binary>>/binary, "?"/utf8>>/binary, (gleam@list:fold(
Params,
<<""/utf8>>,
fun(A, B) ->
<<<<<<<<A/binary, (erlang:element(2, B))/binary>>/binary,
"="/utf8>>/binary,
(erlang:element(3, B))/binary>>/binary,
"&"/utf8>>
end
))/binary>>/binary, (case Commercial of
true ->
<<<<"&apikey"/utf8, "="/utf8>>/binary, Apikey/binary>>;
false ->
<<""/utf8>>
end)/binary>>.
-spec param_list_to_string(list(LRX), fun((LRX) -> binary())) -> binary().
param_list_to_string(Params, To_string_fn) ->
_pipe = Params,
_pipe@1 = gleam@list:fold(
_pipe,
<<""/utf8>>,
fun(A, B) ->
<<<<A/binary, (To_string_fn(B))/binary>>/binary, ","/utf8>>
end
),
gleam@string:drop_right(_pipe@1, 1).
-spec parse_float_or_int(binary()) -> {ok, float()} | {error, nil}.
parse_float_or_int(S) ->
Res = gleam@int:parse(S),
case Res of
{ok, I} ->
{ok, gleam@int:to_float(I)};
{error, _} ->
gleam@float:parse(S)
end.
-spec all_errors({ok, any()} | {error, list(gleam@dynamic:decode_error())}) -> list(gleam@dynamic:decode_error()).
all_errors(Result) ->
case Result of
{ok, _} ->
[];
{error, Errors} ->
Errors
end.
-spec decode14(
fun((LSG, LSH, LSI, LSJ, LSK, LSL, LSM, LSN, LSO, LSP, LSQ, LSR, LSS, LST) -> LSU),
fun((gleam@dynamic:dynamic_()) -> {ok, LSG} |
{error, list(gleam@dynamic:decode_error())}),
fun((gleam@dynamic:dynamic_()) -> {ok, LSH} |
{error, list(gleam@dynamic:decode_error())}),
fun((gleam@dynamic:dynamic_()) -> {ok, LSI} |
{error, list(gleam@dynamic:decode_error())}),
fun((gleam@dynamic:dynamic_()) -> {ok, LSJ} |
{error, list(gleam@dynamic:decode_error())}),
fun((gleam@dynamic:dynamic_()) -> {ok, LSK} |
{error, list(gleam@dynamic:decode_error())}),
fun((gleam@dynamic:dynamic_()) -> {ok, LSL} |
{error, list(gleam@dynamic:decode_error())}),
fun((gleam@dynamic:dynamic_()) -> {ok, LSM} |
{error, list(gleam@dynamic:decode_error())}),
fun((gleam@dynamic:dynamic_()) -> {ok, LSN} |
{error, list(gleam@dynamic:decode_error())}),
fun((gleam@dynamic:dynamic_()) -> {ok, LSO} |
{error, list(gleam@dynamic:decode_error())}),
fun((gleam@dynamic:dynamic_()) -> {ok, LSP} |
{error, list(gleam@dynamic:decode_error())}),
fun((gleam@dynamic:dynamic_()) -> {ok, LSQ} |
{error, list(gleam@dynamic:decode_error())}),
fun((gleam@dynamic:dynamic_()) -> {ok, LSR} |
{error, list(gleam@dynamic:decode_error())}),
fun((gleam@dynamic:dynamic_()) -> {ok, LSS} |
{error, list(gleam@dynamic:decode_error())}),
fun((gleam@dynamic:dynamic_()) -> {ok, LST} |
{error, list(gleam@dynamic:decode_error())})
) -> fun((gleam@dynamic:dynamic_()) -> {ok, LSU} |
{error, list(gleam@dynamic:decode_error())}).
decode14(
Constructor,
T1,
T2,
T3,
T4,
T5,
T6,
T7,
T8,
T9,
T10,
T11,
T12,
T13,
T14
) ->
fun(X) ->
case {T1(X),
T2(X),
T3(X),
T4(X),
T5(X),
T6(X),
T7(X),
T8(X),
T9(X),
T10(X),
T11(X),
T12(X),
T13(X),
T14(X)} of
{{ok, A},
{ok, B},
{ok, C},
{ok, D},
{ok, E},
{ok, F},
{ok, G},
{ok, H},
{ok, I},
{ok, J},
{ok, K},
{ok, L},
{ok, M},
{ok, N}} ->
{ok, Constructor(A, B, C, D, E, F, G, H, I, J, K, L, M, N)};
{A@1,
B@1,
C@1,
D@1,
E@1,
F@1,
G@1,
H@1,
I@1,
J@1,
K@1,
L@1,
M@1,
N@1} ->
{error,
gleam@list:concat(
[all_errors(A@1),
all_errors(B@1),
all_errors(C@1),
all_errors(D@1),
all_errors(E@1),
all_errors(F@1),
all_errors(G@1),
all_errors(H@1),
all_errors(I@1),
all_errors(J@1),
all_errors(K@1),
all_errors(L@1),
all_errors(M@1),
all_errors(N@1)]
)}
end
end.
-spec decode18(
fun((LTK, LTL, LTM, LTN, LTO, LTP, LTQ, LTR, LTS, LTT, LTU, LTV, LTW, LTX, LTY, LTZ, LUA, LUB) -> LUC),
fun((gleam@dynamic:dynamic_()) -> {ok, LTK} |
{error, list(gleam@dynamic:decode_error())}),
fun((gleam@dynamic:dynamic_()) -> {ok, LTL} |
{error, list(gleam@dynamic:decode_error())}),
fun((gleam@dynamic:dynamic_()) -> {ok, LTM} |
{error, list(gleam@dynamic:decode_error())}),
fun((gleam@dynamic:dynamic_()) -> {ok, LTN} |
{error, list(gleam@dynamic:decode_error())}),
fun((gleam@dynamic:dynamic_()) -> {ok, LTO} |
{error, list(gleam@dynamic:decode_error())}),
fun((gleam@dynamic:dynamic_()) -> {ok, LTP} |
{error, list(gleam@dynamic:decode_error())}),
fun((gleam@dynamic:dynamic_()) -> {ok, LTQ} |
{error, list(gleam@dynamic:decode_error())}),
fun((gleam@dynamic:dynamic_()) -> {ok, LTR} |
{error, list(gleam@dynamic:decode_error())}),
fun((gleam@dynamic:dynamic_()) -> {ok, LTS} |
{error, list(gleam@dynamic:decode_error())}),
fun((gleam@dynamic:dynamic_()) -> {ok, LTT} |
{error, list(gleam@dynamic:decode_error())}),
fun((gleam@dynamic:dynamic_()) -> {ok, LTU} |
{error, list(gleam@dynamic:decode_error())}),
fun((gleam@dynamic:dynamic_()) -> {ok, LTV} |
{error, list(gleam@dynamic:decode_error())}),
fun((gleam@dynamic:dynamic_()) -> {ok, LTW} |
{error, list(gleam@dynamic:decode_error())}),
fun((gleam@dynamic:dynamic_()) -> {ok, LTX} |
{error, list(gleam@dynamic:decode_error())}),
fun((gleam@dynamic:dynamic_()) -> {ok, LTY} |
{error, list(gleam@dynamic:decode_error())}),
fun((gleam@dynamic:dynamic_()) -> {ok, LTZ} |
{error, list(gleam@dynamic:decode_error())}),
fun((gleam@dynamic:dynamic_()) -> {ok, LUA} |
{error, list(gleam@dynamic:decode_error())}),
fun((gleam@dynamic:dynamic_()) -> {ok, LUB} |
{error, list(gleam@dynamic:decode_error())})
) -> fun((gleam@dynamic:dynamic_()) -> {ok, LUC} |
{error, list(gleam@dynamic:decode_error())}).
decode18(
Constructor,
T1,
T2,
T3,
T4,
T5,
T6,
T7,
T8,
T9,
T10,
T11,
T12,
T13,
T14,
T15,
T16,
T17,
T18
) ->
fun(X) ->
case {T1(X),
T2(X),
T3(X),
T4(X),
T5(X),
T6(X),
T7(X),
T8(X),
T9(X),
T10(X),
T11(X),
T12(X),
T13(X),
T14(X),
T15(X),
T16(X),
T17(X),
T18(X)} of
{{ok, A},
{ok, B},
{ok, C},
{ok, D},
{ok, E},
{ok, F},
{ok, G},
{ok, H},
{ok, I},
{ok, J},
{ok, K},
{ok, L},
{ok, M},
{ok, N},
{ok, O},
{ok, P},
{ok, Q},
{ok, R}} ->
{ok,
Constructor(
A,
B,
C,
D,
E,
F,
G,
H,
I,
J,
K,
L,
M,
N,
O,
P,
Q,
R
)};
{A@1,
B@1,
C@1,
D@1,
E@1,
F@1,
G@1,
H@1,
I@1,
J@1,
K@1,
L@1,
M@1,
N@1,
O@1,
P@1,
Q@1,
R@1} ->
{error,
gleam@list:concat(
[all_errors(A@1),
all_errors(B@1),
all_errors(C@1),
all_errors(D@1),
all_errors(E@1),
all_errors(F@1),
all_errors(G@1),
all_errors(H@1),
all_errors(I@1),
all_errors(J@1),
all_errors(K@1),
all_errors(L@1),
all_errors(M@1),
all_errors(N@1),
all_errors(O@1),
all_errors(P@1),
all_errors(Q@1),
all_errors(R@1)]
)}
end
end.