Current section
Files
Jump to
Current section
Files
src/parrot@internal@cli.erl
-module(parrot@internal@cli).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/parrot/internal/cli.gleam").
-export([engine_from_env/1, parse_env/1]).
-export_type([command/0, engine/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 command() :: usage | {generate, engine(), binary()}.
-type engine() :: s_qlite | my_s_q_l | postgre_s_q_l.
-file("src/parrot/internal/cli.gleam", 66).
?DOC(false).
-spec engine_from_env(binary()) -> {ok, engine()} |
{error, parrot@internal@errors:parrot_error()}.
engine_from_env(Str) ->
case Str of
<<"postgres"/utf8, _/binary>> ->
{ok, postgre_s_q_l};
<<"mysql"/utf8, _/binary>> ->
{ok, my_s_q_l};
<<"file"/utf8>> ->
{ok, s_qlite};
<<"sqlite"/utf8, _/binary>> ->
{ok, s_qlite};
_ ->
{error, {unknown_engine, Str}}
end.
-file("src/parrot/internal/cli.gleam", 77).
?DOC(false).
-spec parse_env(binary()) -> {ok, {engine(), binary()}} | {error, binary()}.
parse_env(Env) ->
Env_var = envoy_ffi:get(Env),
given:ok(
Env_var,
fun(_) ->
{error, <<"Environment Variable \"DATABASE_URL\" is empty!"/utf8>>}
end,
fun(Env_var@1) ->
Engine = engine_from_env(Env_var@1),
given:ok(
Engine,
fun(_) ->
{error,
<<"\"DATABASE_URL\" does not match any of the supported formats (MySQL, PostgreSQL, SQlite)"/utf8>>}
end,
fun(Engine@1) -> {ok, {Engine@1, Env_var@1}} end
)
end
).