forked from extern/nushell
125 lines
3.4 KiB
Plaintext
125 lines
3.4 KiB
Plaintext
|
def _assert [
|
|||
|
cond: bool
|
|||
|
msg: string
|
|||
|
] {
|
|||
|
if not $cond {
|
|||
|
error make {msg: $msg}
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
# ```nushell
|
|||
|
# >_ assert ($a == 3)
|
|||
|
# >_ assert ($a != 3)
|
|||
|
# Error:
|
|||
|
# × condition given to `assert` does not hold
|
|||
|
# ╭─[entry #12:5:1]
|
|||
|
# 5 │ if not $cond {
|
|||
|
# 6 │ error make {msg: $msg}
|
|||
|
# · ─────┬────
|
|||
|
# · ╰── originates from here
|
|||
|
# 7 │ }
|
|||
|
# ╰────
|
|||
|
# ```
|
|||
|
export def assert [cond: bool] {
|
|||
|
_assert $cond "condition given to `assert` does not hold"
|
|||
|
}
|
|||
|
|
|||
|
# ```nushell
|
|||
|
# >_ assert_eq $a "a string"
|
|||
|
# Error:
|
|||
|
# × left and right operand of `assert eq` should have the same type
|
|||
|
# ╭─[entry #12:5:1]
|
|||
|
# 5 │ if not $cond {
|
|||
|
# 6 │ error make {msg: $msg}
|
|||
|
# · ─────┬────
|
|||
|
# · ╰── originates from here
|
|||
|
# 7 │ }
|
|||
|
# ╰────
|
|||
|
#
|
|||
|
# >_ assert_eq $a 3
|
|||
|
# >_ assert_eq $a 1
|
|||
|
# Error:
|
|||
|
# × left is not equal to right
|
|||
|
# ╭─[entry #12:5:1]
|
|||
|
# 5 │ if not $cond {
|
|||
|
# 6 │ error make {msg: $msg}
|
|||
|
# · ─────┬────
|
|||
|
# · ╰── originates from here
|
|||
|
# 7 │ }
|
|||
|
# ╰────
|
|||
|
# ```
|
|||
|
export def "assert eq" [left: any, right: any] {
|
|||
|
_assert (($left | describe) == ($right | describe)) $"left and right operand of `assert eq` should have the same type"
|
|||
|
_assert ($left == $right) "left is not equal to right"
|
|||
|
}
|
|||
|
|
|||
|
# ```nushell
|
|||
|
# >_ assert_ne $a "a string"
|
|||
|
# Error:
|
|||
|
# × left and right operand of `assert eq` should have the same type
|
|||
|
# ╭─[entry #12:5:1]
|
|||
|
# 5 │ if not $cond {
|
|||
|
# 6 │ error make {msg: $msg}
|
|||
|
# · ─────┬────
|
|||
|
# · ╰── originates from here
|
|||
|
# 7 │ }
|
|||
|
# ╰────
|
|||
|
#
|
|||
|
# >_ assert_ne $a 1
|
|||
|
# >_ assert_ne $a 3
|
|||
|
# Error:
|
|||
|
# × left is equal to right
|
|||
|
# ╭─[entry #12:5:1]
|
|||
|
# 5 │ if not $cond {
|
|||
|
# 6 │ error make {msg: $msg}
|
|||
|
# · ─────┬────
|
|||
|
# · ╰── originates from here
|
|||
|
# 7 │ }
|
|||
|
# ╰────
|
|||
|
# ```
|
|||
|
export def "assert ne" [left: any, right: any] {
|
|||
|
_assert (($left | describe) == ($right | describe)) $"left and right operand of `assert eq` should have the same type"
|
|||
|
_assert ($left != $right) "left is equal to right"
|
|||
|
}
|
|||
|
|
|||
|
# ```nushell
|
|||
|
# >_ let branches = {
|
|||
|
# ))) 1: { print "this is the 1st branch"}
|
|||
|
# ))) 2: { print "this is the 2nd branch" }
|
|||
|
# ))) 3: { print "this is the 3rd branch" }
|
|||
|
# ))) 4: { print "this is the 4th branch" }
|
|||
|
# ))) }
|
|||
|
#
|
|||
|
# >_ match 1 $branches
|
|||
|
# ))) match 2 $branches
|
|||
|
# ))) match 3 $branches
|
|||
|
# ))) match 4 $branches
|
|||
|
# ))) match 5 $branches
|
|||
|
# this is the 1st branch
|
|||
|
# this is the 2nd branch
|
|||
|
# this is the 3rd branch
|
|||
|
# this is the 4th branch
|
|||
|
#
|
|||
|
# >_ match 1 $branches { "this is the default branch" }
|
|||
|
# ))) match 2 $branches { "this is the default branch" }
|
|||
|
# ))) match 3 $branches { "this is the default branch" }
|
|||
|
# ))) match 4 $branches { "this is the default branch" }
|
|||
|
# ))) match 5 $branches { "this is the default branch" }
|
|||
|
# this is the 1st branch
|
|||
|
# this is the 2nd branch
|
|||
|
# this is the 3rd branch
|
|||
|
# this is the 4th branch
|
|||
|
# this is the default branch
|
|||
|
# ```
|
|||
|
export def match [
|
|||
|
input:string
|
|||
|
matchers:record
|
|||
|
default?: block
|
|||
|
] {
|
|||
|
if (($matchers | get -i $input) != null) {
|
|||
|
$matchers | get $input | do $in
|
|||
|
} else if ($default != null) {
|
|||
|
do $default
|
|||
|
}
|
|||
|
}
|