Compare commits

...

3 Commits

Author SHA1 Message Date
a445e6f623 v0.0.107 2023-04-26 11:35:28 +02:00
0aa6310971 v0.0.106 2023-04-26 11:34:46 +02:00
2f66ab1cf0 v0.0.105 2023-04-23 19:31:48 +02:00
2 changed files with 79 additions and 0 deletions

View File

@@ -15,3 +15,11 @@ func ArrToMap[T comparable, V any](a []V, keyfunc func(V) T) map[T]V {
} }
return result return result
} }
func CopyMap[K comparable, V any](a map[K]V) map[K]V {
result := make(map[K]V, len(a))
for k, v := range a {
result[k] = v
}
return result
}

71
langext/panic.go Normal file
View File

@@ -0,0 +1,71 @@
package langext
type PanicWrappedErr struct {
panic any
}
func (p PanicWrappedErr) Error() string {
return "A panic occured"
}
func (p PanicWrappedErr) ReoveredObj() any {
return p.panic
}
func RunPanicSafe(fn func()) (err error) {
defer func() {
if rec := recover(); rec != nil {
err = PanicWrappedErr{panic: rec}
}
}()
fn()
return nil
}
func RunPanicSafeR1(fn func() error) (err error) {
defer func() {
if rec := recover(); rec != nil {
err = PanicWrappedErr{panic: rec}
}
}()
return fn()
}
func RunPanicSafeR2[T1 any](fn func() (T1, error)) (r1 T1, err error) {
defer func() {
if rec := recover(); rec != nil {
r1 = *new(T1)
err = PanicWrappedErr{panic: rec}
}
}()
return fn()
}
func RunPanicSafeR3[T1 any, T2 any](fn func() (T1, T2, error)) (r1 T1, r2 T2, err error) {
defer func() {
if rec := recover(); rec != nil {
r1 = *new(T1)
r2 = *new(T2)
err = PanicWrappedErr{panic: rec}
}
}()
return fn()
}
func RunPanicSafeR4[T1 any, T2 any, T3 any](fn func() (T1, T2, T3, error)) (r1 T1, r2 T2, r3 T3, err error) {
defer func() {
if rec := recover(); rec != nil {
r1 = *new(T1)
r2 = *new(T2)
r3 = *new(T3)
err = PanicWrappedErr{panic: rec}
}
}()
return fn()
}