Compare commits

...

3 Commits

Author SHA1 Message Date
c42324c58f v0.0.35 2022-12-14 18:25:07 +01:00
3a9c3f4e9e v0.0.34 2022-12-11 03:12:02 +01:00
becd8f1ebc v0.0.33 2022-12-11 02:34:38 +01:00
3 changed files with 134 additions and 8 deletions

View File

@@ -70,7 +70,73 @@ func ArrEqualsExact[T comparable](arr1 []T, arr2 []T) bool {
return true return true
} }
func ArrAll(arr interface{}, fn func(int) bool) bool { func ArrAll[T any](arr []T, fn func(T) bool) bool {
for _, av := range arr {
if !fn(av) {
return false
}
}
return true
}
func ArrAllErr[T any](arr []T, fn func(T) (bool, error)) (bool, error) {
for _, av := range arr {
v, err := fn(av)
if err != nil {
return false, err
}
if !v {
return false, nil
}
}
return true, nil
}
func ArrNone[T any](arr []T, fn func(T) bool) bool {
for _, av := range arr {
if fn(av) {
return false
}
}
return true
}
func ArrNoneErr[T any](arr []T, fn func(T) (bool, error)) (bool, error) {
for _, av := range arr {
v, err := fn(av)
if err != nil {
return false, err
}
if v {
return false, nil
}
}
return true, nil
}
func ArrAny[T any](arr []T, fn func(T) bool) bool {
for _, av := range arr {
if fn(av) {
return true
}
}
return false
}
func ArrAnyErr[T any](arr []T, fn func(T) (bool, error)) (bool, error) {
for _, av := range arr {
v, err := fn(av)
if err != nil {
return false, err
}
if v {
return true, nil
}
}
return false, nil
}
func ArrIdxAll(arr any, fn func(int) bool) bool {
av := reflect.ValueOf(arr) av := reflect.ValueOf(arr)
for i := 0; i < av.Len(); i++ { for i := 0; i < av.Len(); i++ {
if !fn(i) { if !fn(i) {
@@ -80,7 +146,7 @@ func ArrAll(arr interface{}, fn func(int) bool) bool {
return true return true
} }
func ArrAllErr(arr interface{}, fn func(int) (bool, error)) (bool, error) { func ArrIdxAllErr(arr any, fn func(int) (bool, error)) (bool, error) {
av := reflect.ValueOf(arr) av := reflect.ValueOf(arr)
for i := 0; i < av.Len(); i++ { for i := 0; i < av.Len(); i++ {
v, err := fn(i) v, err := fn(i)
@@ -94,7 +160,7 @@ func ArrAllErr(arr interface{}, fn func(int) (bool, error)) (bool, error) {
return true, nil return true, nil
} }
func ArrNone(arr interface{}, fn func(int) bool) bool { func ArrIdxNone(arr any, fn func(int) bool) bool {
av := reflect.ValueOf(arr) av := reflect.ValueOf(arr)
for i := 0; i < av.Len(); i++ { for i := 0; i < av.Len(); i++ {
if fn(i) { if fn(i) {
@@ -104,7 +170,7 @@ func ArrNone(arr interface{}, fn func(int) bool) bool {
return true return true
} }
func ArrNoneErr(arr interface{}, fn func(int) (bool, error)) (bool, error) { func ArrIdxNoneErr(arr any, fn func(int) (bool, error)) (bool, error) {
av := reflect.ValueOf(arr) av := reflect.ValueOf(arr)
for i := 0; i < av.Len(); i++ { for i := 0; i < av.Len(); i++ {
v, err := fn(i) v, err := fn(i)
@@ -118,7 +184,7 @@ func ArrNoneErr(arr interface{}, fn func(int) (bool, error)) (bool, error) {
return true, nil return true, nil
} }
func ArrAny(arr interface{}, fn func(int) bool) bool { func ArrIdxAny(arr any, fn func(int) bool) bool {
av := reflect.ValueOf(arr) av := reflect.ValueOf(arr)
for i := 0; i < av.Len(); i++ { for i := 0; i < av.Len(); i++ {
if fn(i) { if fn(i) {
@@ -128,7 +194,7 @@ func ArrAny(arr interface{}, fn func(int) bool) bool {
return false return false
} }
func ArrAnyErr(arr interface{}, fn func(int) (bool, error)) (bool, error) { func ArrIdxAnyErr(arr any, fn func(int) (bool, error)) (bool, error) {
av := reflect.ValueOf(arr) av := reflect.ValueOf(arr)
for i := 0; i < av.Len(); i++ { for i := 0; i < av.Len(); i++ {
v, err := fn(i) v, err := fn(i)
@@ -142,7 +208,7 @@ func ArrAnyErr(arr interface{}, fn func(int) (bool, error)) (bool, error) {
return false, nil return false, nil
} }
func ArrFirst[T comparable](arr []T, comp func(v T) bool) (T, bool) { func ArrFirst[T any](arr []T, comp func(v T) bool) (T, bool) {
for _, v := range arr { for _, v := range arr {
if comp(v) { if comp(v) {
return v, true return v, true
@@ -151,7 +217,7 @@ func ArrFirst[T comparable](arr []T, comp func(v T) bool) (T, bool) {
return *new(T), false return *new(T), false
} }
func ArrLast[T comparable](arr []T, comp func(v T) bool) (T, bool) { func ArrLast[T any](arr []T, comp func(v T) bool) (T, bool) {
found := false found := false
result := *new(T) result := *new(T)
for _, v := range arr { for _, v := range arr {

View File

@@ -107,3 +107,11 @@ func NumToStringOpt[V IntConstraint](v *V, fallback string) string {
return fmt.Sprintf("%d", v) return fmt.Sprintf("%d", v)
} }
} }
func StrRepeat(val string, count int) string {
r := ""
for i := 0; i < count; i++ {
r += val
}
return r
}

52
sq/scanner.go Normal file
View File

@@ -0,0 +1,52 @@
package sq
import (
"database/sql"
"errors"
"github.com/jmoiron/sqlx"
)
func ScanSingle[TData any](rows *sqlx.Rows, close bool) (TData, error) {
if rows.Next() {
var data TData
err := rows.StructScan(&data)
if err != nil {
return *new(TData), err
}
if rows.Next() {
_ = rows.Close()
return *new(TData), errors.New("sql returned more than onw row")
}
if close {
err = rows.Close()
if err != nil {
return *new(TData), err
}
}
return data, nil
} else {
if close {
_ = rows.Close()
}
return *new(TData), sql.ErrNoRows
}
}
func ScanAll[TData any](rows *sqlx.Rows, close bool) ([]TData, error) {
res := make([]TData, 0)
for rows.Next() {
var data TData
err := rows.StructScan(&data)
if err != nil {
return nil, err
}
res = append(res, data)
}
if close {
err := rows.Close()
if err != nil {
return nil, err
}
}
return res, nil
}