Current section

Files

Jump to
gladvent src gladvent.gleam
Raw

src/gladvent.gleam

import gleam/map
import gleam/string
import gleam/result
import gleam/io
import gleam/erlang.{start_arguments as args}
import cmd/run.{RunnerMap}
import cmd/new
import glint
import glint/flag
import snag
/// Find all runners in the project src/days/ directory and
/// run either the 'run' or 'new' command as specified
///
pub fn main() {
case run.build_runners_from_days_dir() {
Ok(runners) -> execute(given: runners)
Error(err) -> print_snag_and_halt(err)
}
}
/// Given the daily runners, create the command tree and run the specified command
///
pub fn execute(given runners: RunnerMap) {
let commands =
glint.new()
|> run.register_command(runners)
|> new.register_command()
let args = args()
case commands
|> glint.execute(args) {
Ok(glint.Out(Ok(output))) ->
output
|> string.join("\n\n")
|> io.println
Ok(glint.Help(help)) -> io.println(help)
Ok(glint.Out(Error(err))) | Error(err) -> print_snag_and_halt(err)
}
}
external fn exit(Int) -> Nil =
"erlang" "halt"
fn print_snag_and_halt(err: snag.Snag) -> Nil {
err
|> snag.pretty_print()
|> io.println()
exit(1)
}