/
gladvent.gleam
40 lines (36 loc) · 987 Bytes
/
gladvent.gleam
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
import gleam/string
import gleam/io
import gleam/erlang.{start_arguments as args}
import gladvent/internal/cmd/run
import gladvent/internal/cmd/new
import gladvent/internal/cmd
import glint
import snag
/// Find all runners in the project src/days/ directory and
/// run either the 'run' or 'new' command as specified
///
pub fn main() {
let commands =
glint.new()
|> glint.global_flag(cmd.year, cmd.year_flag())
|> glint.with_pretty_help(glint.default_pretty_help())
|> glint.add(["new"], new.new_command())
|> glint.add(["run"], run.run_command())
|> glint.add(["run", "all"], run.run_all_command())
use out <- glint.run_and_handle(commands, args())
case out {
Ok(out) ->
out
|> string.join("\n\n")
|> io.println
Error(err) -> print_snag_and_halt(err)
}
}
@external(erlang, "erlang", "halt")
fn exit(a: Int) -> Nil
fn print_snag_and_halt(err: snag.Snag) -> Nil {
err
|> snag.pretty_print()
|> io.println()
exit(1)
}