aboutsummaryrefslogtreecommitdiff
path: root/aoc2023/build/packages/adglent/src/priv/errors.gleam
blob: 14c35ca892142b259446e8bf0e9f517ae7e883a5 (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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
import gleam/result
import gleam/string
import gleam/io

pub fn map_messages(
  result: Result(a, b),
  success_message: String,
  error_message: String,
) -> Result(String, String) {
  result
  |> result.map_error(fn(error) {
    "Error - " <> error_message <> ": " <> string.inspect(error)
  })
  |> result.replace(success_message)
}

pub fn map_error(
  result: Result(a, b),
  error_message: String,
) -> Result(a, String) {
  result
  |> result.map_error(fn(error) {
    error_message <> ": " <> string.inspect(error)
  })
}

pub fn print_result(result: Result(String, String)) {
  result
  |> result.unwrap_both
  |> io.println
  result
}

pub fn print_error(result: Result(a, String)) {
  result
  |> result.map_error(fn(err) {
    io.println(err)
    err
  })
}

pub fn assert_ok(result: Result(a, String)) {
  let assert Ok(value) =
    result
    |> result.map_error(fn(err) {
      halt(1)
      err
    })
  value
}

@target(erlang)
@external(erlang, "erlang", "halt")
fn halt(a: Int) -> Nil