Skip to main content

src/oadr3@runner.erl

-module(oadr3@runner).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/oadr3/runner.gleam").
-export([handle_errors/1, run/1]).

-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(" Utility functions for running midas tasks\n").

-file("src/oadr3/runner.gleam", 9).
-spec handle_errors({ok, KOG} | {error, any()}) -> {ok, KOG} |
    {error, snag:snag()}.
handle_errors(Response) ->
    case Response of
        {ok, Response1} ->
            {ok, Response1};

        {error, Reason} ->
            _pipe = snag:new(gleam@string:inspect(Reason)),
            _pipe@1 = snag:layer(_pipe, <<"failed to decode"/utf8>>),
            {error, _pipe@1}
    end.

-file("src/oadr3/runner.gleam", 29).
-spec map_http_response(
    {ok, gleam@http@response:response(bitstring())} |
        {error, gleam@httpc:http_error()}
) -> {ok, gleam@http@response:response(bitstring())} |
    {error, midas@effect:fetch_error()}.
map_http_response(Response) ->
    case Response of
        {ok, Response@1} ->
            {ok, Response@1};

        {error, invalid_utf8_response} ->
            {error, unable_to_read_body};

        {error, {failed_to_connect, _, _}} ->
            {error, {network_error, <<"Failed to connect"/utf8>>}};

        {error, response_timeout} ->
            {error, {network_error, <<"Connect timed out"/utf8>>}}
    end.

-file("src/oadr3/runner.gleam", 20).
?DOC(" Will return e.Done upon success\n").
-spec run(midas@effect:effect(KNL, KNM)) -> midas@effect:effect(KNL, KNM).
run(Effect) ->
    case Effect of
        {fetch, Request, Resume} ->
            run(Resume(map_http_response(gleam@httpc:send_bits(Request))));

        Any ->
            Any
    end.