-module(libero@cli). -compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]). -define(FILEPATH, "src/libero/cli.gleam"). -export([parse_args/1, parse_command/0]). -export_type([database/0, command/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( " CLI command router for the Libero framework.\n" "\n" " Usage: gleam run -m libero -- [args]\n" " Commands: new, add, gen, build\n" ). -type database() :: postgres | sqlite. -type command() :: {new, binary(), gleam@option:option(database())} | {add, binary(), binary()} | gen | build | unknown. -file("src/libero/cli.gleam", 61). -spec parse_database(binary()) -> {ok, database()} | {error, nil}. parse_database(Value) -> case Value of <<"pg"/utf8>> -> {ok, postgres}; <<"sqlite"/utf8>> -> {ok, sqlite}; _ -> {error, nil} end. -file("src/libero/cli.gleam", 30). ?DOC( " Parse a list of argument strings into a Command.\n" " Separated from parse_command so tests can call it without argv.\n" ). -spec parse_args(list(binary())) -> command(). parse_args(Args) -> case Args of [<<"new"/utf8>>, Name, <<"--database"/utf8>>, Db | _] -> case parse_database(Db) of {ok, Database} -> {new, Name, {some, Database}}; {error, nil} -> gleam_stdlib:println_error( <<"error: --database must be pg or sqlite, got: "/utf8, Db/binary>> ), unknown end; [<<"new"/utf8>>, _, <<"--database"/utf8>>] -> gleam_stdlib:println_error( <<"error: --database requires a value (pg or sqlite)"/utf8>> ), unknown; [<<"new"/utf8>>, Name@1 | _] -> {new, Name@1, none}; [<<"add"/utf8>>, Name@2, <<"--target"/utf8>>, Target | _] -> {add, Name@2, Target}; [<<"add"/utf8>>, _ | _] -> gleam_stdlib:println_error(<<"error: --target is required"/utf8>>), gleam_stdlib:println_error( <<" Usage: gleam run -m libero -- add --target "/utf8>> ), unknown; [<<"gen"/utf8>> | _] -> gen; [<<"build"/utf8>> | _] -> build; _ -> unknown end. -file("src/libero/cli.gleam", 24). ?DOC(" Parse CLI arguments into a Command.\n"). -spec parse_command() -> command(). parse_command() -> parse_args(erlang:element(4, argv:load())).