Documentation
¶
Overview ¶
Package erroriter provides ErrorIterator type and methods to work with iterations possibly containing errors.
Index ¶
Examples ¶
Constants ¶
This section is empty.
Variables ¶
var ErrIterationStop = errors.New("iteration stop")
ErrIterationStop indicates that iteration is over.
Functions ¶
This section is empty.
Types ¶
type ErrorIterator ¶
ErrorIterator is an iterator yielding itertools.Pair of value of type T and error.
func Map ¶
func Map[T, U any](i *itertools.Iterator[T], mapper func(T) (U, error)) *ErrorIterator[U]
Map creates new ErrorIterator which contains elements of type U produced by applying mapper to elements of source iterator.
Example ¶
package main
import (
"fmt"
"github.com/KSpaceer/itertools"
"github.com/KSpaceer/itertools/erroriter"
"strconv"
)
func main() {
data := []string{"1", "wdqe", "3", "4", "qwcqwqdq"}
iter := erroriter.Map(
itertools.NewSliceIterator(data),
strconv.Atoi,
)
for iter.Next() {
v, err := iter.Result()
if err != nil {
fmt.Println("got error")
} else {
fmt.Println(v)
}
}
}
Output: 1 got error 3 4 got error
func New ¶
func New[T any](f func() (T, error)) *ErrorIterator[T]
New creates ErrorIterator that yields elements using function f. Iterator yields elements until returned error is ErrIterationStop.
func (*ErrorIterator[T]) CollectUntilError ¶
func (i *ErrorIterator[T]) CollectUntilError() ([]T, error)
CollectUntilError collects actual values into slice. CollectUntilError returns this slice or first encountered error.
Example ¶
package main
import (
"fmt"
"github.com/KSpaceer/itertools/erroriter"
"strconv"
)
func main() {
data := []int{1, 2, 3, 4, 5}
var idx int
iter := erroriter.New(func() (int, error) {
if idx >= len(data) {
return 0, erroriter.ErrIterationStop
}
v := data[idx]
idx++
return v, nil
})
result, err := iter.CollectUntilError()
if err != nil {
fmt.Println("got error")
} else {
fmt.Println(result)
}
sdata := []string{"1", "2", "adqweqw", "4", "5"}
idx = 0
iter = erroriter.New(func() (int, error) {
if idx >= len(sdata) {
return 0, erroriter.ErrIterationStop
}
s := sdata[idx]
idx++
return strconv.Atoi(s)
})
result, err = iter.CollectUntilError()
if err != nil {
fmt.Println("got error")
} else {
fmt.Println(result)
}
}
Output: [1 2 3 4 5] got error
func (*ErrorIterator[T]) Result ¶
func (i *ErrorIterator[T]) Result() (T, error)
Result unpacks itertools.Pair element, returning value and error.
Example ¶
package main
import (
"fmt"
"github.com/KSpaceer/itertools/erroriter"
"strconv"
)
func main() {
iter := erroriter.New(func() (int, error) {
return strconv.Atoi("16")
})
iter.Next()
result, err := iter.Result()
if err != nil {
fmt.Println("got error")
} else {
fmt.Println(result)
}
iter = erroriter.New(func() (int, error) {
return strconv.Atoi("xadqwe")
})
iter.Next()
result, err = iter.Result()
if err != nil {
fmt.Println("got error")
} else {
fmt.Println(result)
}
}
Output: 16 got error