This commit is contained in:
2020-07-01 14:12:09 +02:00
commit f832858583
5 changed files with 70 additions and 0 deletions

1
.gitignore vendored Normal file
View File

@@ -0,0 +1 @@
*.exe

13
oi.nimble Normal file
View File

@@ -0,0 +1,13 @@
# Package
version = "0.1.0"
author = "luxick"
description = "Generic result type for operations that can fail."
license = "GPL-2.0"
srcDir = "src"
# Dependencies
requires "nim >= 1.2.4"

17
src/oi.nim Normal file
View File

@@ -0,0 +1,17 @@
type
Err = string
OI*[T] = object of RootObj
case isOk*: bool
of true:
val*: T
of false:
error*: string
proc ok*[T](val: T): OI[T] =
OI[T](isOK: true, val: val)
proc fail*(oi: OI, msg: string): OI =
OI(isOK: false, error: msg)
proc fail*(msg: string): OI[auto] =
OI[auto](isOK: false, error: msg)

1
tests/config.nims Normal file
View File

@@ -0,0 +1 @@
switch("path", "$projectDir/../src")

38
tests/testResults.nim Normal file
View File

@@ -0,0 +1,38 @@
# To run these tests, simply execute `nimble test`.
import unittest
import oi
test "Check OK":
let test = ok 1
check test.isOk == true
test "Check fail":
let test = fail "no data here"
check test.isOk == false
test "Check proc results":
proc createValue: OI[string] =
let myString = "This is test code!"
ok myString
let data = createValue()
check data.isOk
check data.val == "This is test code!"
test "Check failing proc":
proc destinedToFail(): OI[int] =
result.fail "no data found"
let data = destinedToFail()
check data.isOk == false
check data.error == "no data found"
test "Check changing result":
proc checker(): OI[int] =
result = ok 42
# something happend here
result = fail "data got corrupted"
let data = checker()
check data.isOk == false
check data.error == "data got corrupted"