@@ -1102,3 +1102,49 @@ template `?`*[T, E](self: Result[T, E]): auto =
11021102
11031103 when not (T is void ):
11041104 v.vResultPrivate
1105+
1106+ # Collection integration
1107+
1108+ iterator values * [T, E](self: Result [T, E]): T =
1109+ # # Iterate over a Result as a 0/1-item collection, returning its value if set
1110+ if self.oResultPrivate:
1111+ yield self.vResultPrivate
1112+
1113+ iterator errors * [T, E](self: Result [T, E]): E =
1114+ # # Iterate over a Result as a 0/1-item collection, returning its error if set
1115+ if not self.oResultPrivate:
1116+ yield self.eResultPrivate
1117+
1118+ iterator items * [T](self: Opt [T]): T =
1119+ # # Iterate over an Opt as a 0/1-item collection, returning its value if set
1120+ if self.oResultPrivate:
1121+ yield self.vResultPrivate
1122+
1123+ iterator mvalues * [T, E](self: var Result [T, E]): var T =
1124+ if self.oResultPrivate:
1125+ yield self.vResultPrivate
1126+
1127+ iterator merrors * [T, E](self: var Result [T, E]): var E =
1128+ if not self.oResultPrivate:
1129+ yield self.eResultPrivate
1130+
1131+ iterator mitems * [T](self: var Opt [T]): var T =
1132+ if self.oResultPrivate:
1133+ yield self.vResultPrivate
1134+
1135+ func containsValue * (self: Result , v: auto ): bool =
1136+ # # Return true iff the given result is set to a value that equals `v`
1137+ self.oResultPrivate and self.vResultPrivate == v
1138+
1139+ func containsError * (self: Result , e: auto ): bool =
1140+ # # Return true iff the given result is set to an error that equals `e`
1141+ not self.oResultPrivate and self.eResultPrivate == e
1142+
1143+ func contains * (self: Opt , v: auto ): bool =
1144+ # # Return true iff the given `Opt` is set to a value that equals `v` - can
1145+ # # also be used in the "infix" `in` form:
1146+ # #
1147+ # # ```nim
1148+ # # assert "value" in Opt.some("value")
1149+ # # ```
1150+ self.oResultPrivate and self.vResultPrivate == v
0 commit comments