aboutsummaryrefslogtreecommitdiff
path: root/aoc2023/build/packages/adglent/src/priv@prompt.erl
blob: 0277f14356759e6670657400a2e551dfa63d0aa4 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
-module(priv@prompt).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).

-export([get_line/1, confirm/2, value/3]).
-export_type([get_line_error/0]).

-type get_line_error() :: eof | no_data.

-spec get_line(binary()) -> {ok, binary()} | {error, get_line_error()}.
get_line(Prompt) ->
    adglent_ffi:get_line(Prompt).

-spec confirm(binary(), boolean()) -> boolean().
confirm(Message, Auto_accept) ->
    Auto_accept orelse case begin
        _pipe = adglent_ffi:get_line(<<Message/binary, "? (Y/N): "/utf8>>),
        _pipe@1 = gleam@result:unwrap(_pipe, <<"n"/utf8>>),
        gleam@string:trim(_pipe@1)
    end of
        <<"Y"/utf8>> ->
            true;

        <<"y"/utf8>> ->
            true;

        _ ->
            false
    end.

-spec get_value_of_default(binary(), binary(), boolean()) -> binary().
get_value_of_default(Message, Default, Auto_accept) ->
    case Auto_accept of
        true ->
            Default;

        false ->
            _pipe = adglent_ffi:get_line(
                <<<<<<Message/binary, "? ("/utf8>>/binary, Default/binary>>/binary,
                    "): "/utf8>>
            ),
            _pipe@1 = gleam@result:unwrap(_pipe, <<""/utf8>>),
            gleam@string:trim(_pipe@1)
    end.

-spec value(binary(), binary(), boolean()) -> binary().
value(Message, Default, Auto_accept) ->
    case get_value_of_default(Message, Default, Auto_accept) of
        <<""/utf8>> ->
            Default;

        Value ->
            Value
    end.