Compare commits

...

2 Commits

Author SHA1 Message Date
4832aa9d6c v0.0.563 Add 'ArrContains' alias for 'InArray'
All checks were successful
Build Docker and Deploy / Run goext test-suite (push) Successful in 2m7s
2025-01-31 21:16:42 +01:00
4d606d3131 v0.0.562 bf
All checks were successful
Build Docker and Deploy / Run goext test-suite (push) Successful in 2m4s
2025-01-29 11:24:20 +01:00
5 changed files with 21 additions and 10 deletions

View File

@@ -1,5 +1,5 @@
package goext
const GoextVersion = "0.0.561"
const GoextVersion = "0.0.563"
const GoextVersionTimestamp = "2025-01-29T11:02:41+0100"
const GoextVersionTimestamp = "2025-01-31T21:16:42+0100"

View File

@@ -24,6 +24,7 @@ func Range[T IntegerConstraint](start T, end T) []T {
return r
}
// ForceArray ensures that the given array is not nil (nil will be converted to empty)
func ForceArray[T any](v []T) []T {
if v == nil {
return make([]T, 0)
@@ -47,6 +48,16 @@ func InArray[T comparable](needle T, haystack []T) bool {
return false
}
// ArrContains checks if the value is contained in the array (same as InArray, but odther name for better findability)
func ArrContains[T comparable](haystack []T, needle T) bool {
for _, v := range haystack {
if v == needle {
return true
}
}
return false
}
func ArrUnique[T comparable](array []T) []T {
m := make(map[T]bool, len(array))
for _, v := range array {

View File

@@ -114,7 +114,7 @@ func (c *Coll[TData]) FindIterateFunc(ctx context.Context, filter bson.M, fn fun
func (c *Coll[TData]) FindIterate(ctx context.Context, filter bson.M, opts ...*options.FindOptions) iter.Seq2[TData, error] {
cursor, err := c.createFindQuery(ctx, filter, opts...)
if err != nil {
return langext.IterSingleValueSeq2[TData, error](nil, exerr.Wrap(err, "").Build())
return langext.IterSingleValueSeq2[TData, error](*new(TData), exerr.Wrap(err, "").Build())
}
return func(yield func(TData, error) bool) {
@@ -123,7 +123,7 @@ func (c *Coll[TData]) FindIterate(ctx context.Context, filter bson.M, opts ...*o
for cursor.Next(ctx) {
v, err := c.decodeSingle(ctx, cursor)
if err != nil {
if !yield(nil, err) {
if !yield(*new(TData), err) {
return
}
continue

View File

@@ -76,15 +76,15 @@ func (c *Coll[TData]) ListIterate(ctx context.Context, filter ct.Filter, pageSiz
if ctks, ok := inTok.(ct.CTKeySort); ok {
_, _, _, _, cursor, err = c.createKSListQuery(ctx, filter, pageSize, ctks)
if err != nil {
return langext.IterSingleValueSeq2[TData, error](nil, exerr.Wrap(err, "").Build())
return langext.IterSingleValueSeq2[TData, error](*new(TData), exerr.Wrap(err, "").Build())
}
} else if ctpag, ok := inTok.(ct.CTPaginated); ok {
_, cursor, err = c.createPaginatedListQuery(ctx, filter, pageSize, ctpag)
if err != nil {
return langext.IterSingleValueSeq2[TData, error](nil, exerr.Wrap(err, "").Build())
return langext.IterSingleValueSeq2[TData, error](*new(TData), exerr.Wrap(err, "").Build())
}
} else {
return langext.IterSingleValueSeq2[TData, error](nil, exerr.New(exerr.TypeCursorTokenDecode, "unknown ct type").Any("token", inTok).Type("tokenType", inTok).Build())
return langext.IterSingleValueSeq2[TData, error](*new(TData), exerr.New(exerr.TypeCursorTokenDecode, "unknown ct type").Any("token", inTok).Type("tokenType", inTok).Build())
}
return func(yield func(TData, error) bool) {
@@ -93,7 +93,7 @@ func (c *Coll[TData]) ListIterate(ctx context.Context, filter ct.Filter, pageSiz
for cursor.Next(ctx) {
v, err := c.decodeSingle(ctx, cursor)
if err != nil {
if !yield(nil, err) {
if !yield(*new(TData), err) {
return
}
continue

View File

@@ -87,7 +87,7 @@ func (c *Coll[TData]) PaginateIterateFunc(ctx context.Context, filter pag.MongoF
func (c *Coll[TData]) PaginateIterate(ctx context.Context, filter pag.MongoFilter, page int, limit *int) iter.Seq2[TData, error] {
page, cursor, _, err := c.createPaginatedQuery(ctx, filter, page, limit)
if err != nil {
return langext.IterSingleValueSeq2[TData, error](nil, exerr.Wrap(err, "").Build())
return langext.IterSingleValueSeq2[TData, error](*new(TData), exerr.Wrap(err, "").Build())
}
return func(yield func(TData, error) bool) {
@@ -96,7 +96,7 @@ func (c *Coll[TData]) PaginateIterate(ctx context.Context, filter pag.MongoFilte
for cursor.Next(ctx) {
v, err := c.decodeSingle(ctx, cursor)
if err != nil {
if !yield(nil, err) {
if !yield(*new(TData), err) {
return
}
continue