Init
This commit is contained in:
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
@@ -0,0 +1 @@
|
||||
*.exe
|
||||
13
oi.nimble
Normal file
13
oi.nimble
Normal 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
17
src/oi.nim
Normal 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
1
tests/config.nims
Normal file
@@ -0,0 +1 @@
|
||||
switch("path", "$projectDir/../src")
|
||||
38
tests/testResults.nim
Normal file
38
tests/testResults.nim
Normal 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"
|
||||
Reference in New Issue
Block a user