forked from AbleOS/holey-bytes
95e1e8bcab
Signed-off-by: Jakub Doka <jakub.doka2@gmail.com>
32 lines
995 B
Plaintext
32 lines
995 B
Plaintext
ResultInner := fn($T: type, $E: type): type return union {ok: T, err: E}
|
|
|
|
Result := fn($T: type, $E: type): type return struct {
|
|
inner: ResultInner(T, E),
|
|
is_ok: bool,
|
|
|
|
$ok := fn(k: T): Self return .(.{ok: k}, true)
|
|
$err := fn(k: E): Self return .(.{err: k}, false)
|
|
$unwrap := fn(self: Self): T return self.expect("Panic: Unwrap on Error Variant.\0".ptr)
|
|
$unwrap_unchecked := fn(self: Self): T return self.inner.ok
|
|
unwrap_or := fn(self: Self, v: T): T if self.is_ok return self.inner.ok else return v
|
|
unwrap_or_else := fn(self: Self, $F: type): T if self.is_ok return self.inner.ok else return F(self.inner.err)
|
|
expect := fn(self: Self, msg: ^u8): T if self.is_ok return self.inner.ok else {
|
|
@eca(0, msg)
|
|
die
|
|
}
|
|
}
|
|
|
|
SomeError := enum {
|
|
SkillIssue,
|
|
}
|
|
|
|
div := fn(a: uint, b: uint): Result(uint, SomeError) {
|
|
if b != 0 return Result(uint, SomeError).ok(a / b)
|
|
return Result(uint, SomeError).err(.SkillIssue)
|
|
}
|
|
|
|
main := fn(): uint {
|
|
a := div(100, 0)
|
|
return a.expect("goof\0".ptr)
|
|
}
|