Skip to content

Commit c96ad1c

Browse files
committed
feat(EXT), Lib/typing: OptionalObj
1 parent 2cd8e19 commit c96ad1c

File tree

2 files changed

+36
-0
lines changed

2 files changed

+36
-0
lines changed
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
import std/options
2+
import ../../noneType
3+
type
4+
OptionalObj*[T] = distinct Option[T]
5+
6+
using self: OptionalObj
7+
template wrap(meth){.dirty.} =
8+
proc meth*[T](self: OptionalObj[T]): bool = Option[T](self).meth
9+
wrap isSome
10+
wrap isNone
11+
12+
proc `is`*(self; _: NoneType): bool = self.isNone
13+
proc `==`*(self; _: NoneType): bool = self.isNone
14+
15+
converter unsafeGet*[T](self: OptionalObj[T]): T =
16+
assert self.isSome, self.repr & " cannot be None"
17+
Option[T](self).unsafeGet
18+
19+
20+
converter unsafeToNone*[T](self: OptionalObj[T]): NoneType =
21+
assert self.isNone
22+
23+
proc newOptionalObj*[T](x: T): OptionalObj[T] = OptionalObj[T] some(x)
24+
proc newOptionalObj*[T](): OptionalObj[T] = OptionalObj[T] none[T]()
25+
26+
template expOptObjCvt* =
27+
export optional_obj except newOptionalObj, isSome, isNone, OptionalObj
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
2+
import ./optional_obj
3+
export optional_obj
4+
import ../../pystring/strimpl
5+
export strimpl
6+
7+
proc newStrOptionalObj*(x: string): OptionalObj[PyStr] =
8+
if x.len == 0: newOptionalObj[PyStr]()
9+
else: newOptionalObj[PyStr](str x)

0 commit comments

Comments
 (0)