aboutsummaryrefslogtreecommitdiff
path: root/aoc-2020-gleam/src/util/runner.gleam
blob: 938f5b3bb9d1d4535b084e0fe0ee92d1eec44b4a (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
import gleam/list
import gleam/int
import gleam/io
import gleam/result as res
import gleam/erlang.{start_arguments}

fn get_day(handler: fn(Int) -> Nil) -> Result(Nil, String) {
  let args = start_arguments()

  use first <- res.then(
    args
    |> list.first()
    |> res.replace_error("Pass the day as first argument!"),
  )

  use day <- res.then(
    first
    |> int.parse()
    |> res.replace_error("The day argument must be a number!"),
  )

  handler(day)

  Ok(Nil)
}

pub fn with_day(handler: fn(Int) -> Nil) -> Nil {
  handler
  |> get_day
  |> res.map_error(io.println)
  |> res.unwrap(or: Nil)
}