diff options
Diffstat (limited to 'std/result.zc')
| -rw-r--r-- | std/result.zc | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/std/result.zc b/std/result.zc new file mode 100644 index 0000000..b043162 --- /dev/null +++ b/std/result.zc @@ -0,0 +1,42 @@ + +import "./core.zc" + +struct Result<T> { + is_ok: bool; + val: T; + err: char*; +} + +impl Result<T> { + fn Ok(v: T) -> Result<T> { + return Result<T> { is_ok: true, val: v, err: 0 }; + } + + fn Err(e: char*) -> Result<T> { + return Result<T> { is_ok: false, val: 0, err: e }; + } + + fn is_ok(self) -> bool { + return self.is_ok; + } + + fn is_err(self) -> bool { + return !self.is_ok; + } + + fn unwrap(self) -> T { + if (!self.is_ok) { + !"Panic: unwrap called on Err: {self.err}"; + exit(1); + } + return self.val; + } + + fn expect(self, msg: char*) -> T { + if (!self.is_ok) { + !"Panic: {msg}: {self.err}"; + exit(1); + } + return self.val; + } +} |
