-module(d1_gleamflare@internal).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/d1_gleamflare/internal.gleam").
-export([api_error_decoder/0, optional_field/2, envelope_decoder/0, base_request/1, stringify_errors/1, stringify_httpc_error/1, send_request/2]).
-export_type([envelope/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).
-type envelope() :: {envelope,
boolean(),
list(d1_gleamflare@types:cloudflare_api_error()),
gleam@option:option(gleam@dynamic:dynamic_())}.
-file("src/d1_gleamflare/internal.gleam", 19).
?DOC(false).
-spec api_error_decoder() -> fun((gleam@dynamic:dynamic_()) -> {ok,
d1_gleamflare@types:cloudflare_api_error()} |
{error, list(gleam@dynamic:decode_error())}).
api_error_decoder() ->
gleam@dynamic:decode2(
fun(Field@0, Field@1) -> {cloudflare_api_error, Field@0, Field@1} end,
gleam@dynamic:field(<<"code"/utf8>>, fun gleam@dynamic:int/1),
gleam@dynamic:field(<<"message"/utf8>>, fun gleam@dynamic:string/1)
).
-file("src/d1_gleamflare/internal.gleam", 27).
?DOC(false).
-spec optional_field(
binary(),
fun((gleam@dynamic:dynamic_()) -> {ok, HAB} |
{error, list(gleam@dynamic:decode_error())})
) -> fun((gleam@dynamic:dynamic_()) -> {ok, gleam@option:option(HAB)} |
{error, list(gleam@dynamic:decode_error())}).
optional_field(Name, Inner) ->
fun(D) ->
case (gleam@dynamic:field(Name, gleam@dynamic:optional(Inner)))(D) of
{ok, Opt} ->
{ok, Opt};
{error,
[{decode_error, <<"field"/utf8>>, <<"nothing"/utf8>>, Path}]} when Path =:= [Name] ->
{ok, none};
{error, Errs} ->
{error, Errs}
end
end.
-file("src/d1_gleamflare/internal.gleam", 40).
?DOC(false).
-spec envelope_decoder() -> fun((gleam@dynamic:dynamic_()) -> {ok, envelope()} |
{error, list(gleam@dynamic:decode_error())}).
envelope_decoder() ->
gleam@dynamic:decode3(
fun(Field@0, Field@1, Field@2) -> {envelope, Field@0, Field@1, Field@2} end,
gleam@dynamic:field(<<"success"/utf8>>, fun gleam@dynamic:bool/1),
gleam@dynamic:field(
<<"errors"/utf8>>,
gleam@dynamic:list(api_error_decoder())
),
optional_field(<<"result"/utf8>>, fun gleam@dynamic:dynamic/1)
).
-file("src/d1_gleamflare/internal.gleam", 49).
?DOC(false).
-spec base_request(d1_gleamflare@types:client()) -> gleam@http@request:request(binary()).
base_request(Client) ->
_pipe = gleam@http@request:new(),
_pipe@1 = gleam@http@request:set_scheme(_pipe, https),
_pipe@2 = gleam@http@request:set_host(
_pipe@1,
<<"api.cloudflare.com"/utf8>>
),
_pipe@3 = gleam@http@request:set_header(
_pipe@2,
<<"authorization"/utf8>>,
<<"Bearer "/utf8, (erlang:element(3, Client))/binary>>
),
_pipe@4 = gleam@http@request:set_header(
_pipe@3,
<<"content-type"/utf8>>,
<<"application/json"/utf8>>
),
_pipe@5 = gleam@http@request:set_header(
_pipe@4,
<<"accept"/utf8>>,
<<"application/json"/utf8>>
),
gleam@http@request:set_body(_pipe@5, <<""/utf8>>).
-file("src/d1_gleamflare/internal.gleam", 59).
?DOC(false).
-spec stringify_errors(list(gleam@dynamic:decode_error())) -> binary().
stringify_errors(Errors) ->
_pipe = Errors,
_pipe@1 = gleam@list:map(
_pipe,
fun(Err) ->
<<<<<<<<<<(erlang:element(2, Err))/binary, " at "/utf8>>/binary,
(gleam@string:join(
erlang:element(4, Err),
<<"."/utf8>>
))/binary>>/binary,
" (found: "/utf8>>/binary,
(erlang:element(3, Err))/binary>>/binary,
")"/utf8>>
end
),
gleam@string:join(_pipe@1, <<", "/utf8>>).
-file("src/d1_gleamflare/internal.gleam", 116).
?DOC(false).
-spec stringify_httpc_error(any()) -> binary().
stringify_httpc_error(Err) ->
gleam@string:inspect(Err).
-file("src/d1_gleamflare/internal.gleam", 67).
?DOC(false).
-spec send_request(
gleam@http@request:request(binary()),
fun((gleam@dynamic:dynamic_()) -> {ok, HAJ} |
{error, list(gleam@dynamic:decode_error())})
) -> {ok, HAJ} | {error, d1_gleamflare@types:error()}.
send_request(Req, Result_decoder) ->
case gleam@httpc:send(Req) of
{ok, Res} ->
case gleam@json:decode(erlang:element(4, Res), envelope_decoder()) of
{ok, Envelope} ->
case erlang:element(2, Envelope) of
true ->
case erlang:element(4, Envelope) of
{some, Res_dynamic} ->
case Result_decoder(Res_dynamic) of
{ok, Val} ->
{ok, Val};
{error, Errs} ->
{error,
{json_error,
<<"Failed to decode response result: "/utf8,
(stringify_errors(Errs))/binary>>}}
end;
none ->
case Result_decoder(
gleam_stdlib:identity(nil)
) of
{ok, Val@1} ->
{ok, Val@1};
{error, Errs@1} ->
{error,
{json_error,
<<"Expected result field but it was missing: "/utf8,
(stringify_errors(
Errs@1
))/binary>>}}
end
end;
false ->
{error, {api_error, erlang:element(3, Envelope)}}
end;
{error, Json_err} ->
case (erlang:element(2, Res) < 200) orelse (erlang:element(
2,
Res
)
>= 300) of
true ->
{error,
{http_error,
erlang:element(2, Res),
erlang:element(4, Res)}};
false ->
{error,
{json_error,
<<"Failed to decode JSON: "/utf8,
(gleam@string:inspect(Json_err))/binary>>}}
end
end;
{error, Httpc_err} ->
{error, {network_error, stringify_httpc_error(Httpc_err)}}
end.