qvm/vendor/github.com/samber/mo/do.go
Joshua Bell f501abe660 vendor
2026-01-26 21:41:26 -06:00

22 lines
567 B
Go

package mo
import (
"errors"
"fmt"
)
// Do executes a function within a monadic context, capturing any errors that occur.
// If the function executes successfully, its result is wrapped in a successful Result.
// If the function panics (indicating a failure), the panic is caught and converted into an error Result.
func Do[T any](fn func() T) (result Result[T]) {
defer func() {
if r := recover(); r != nil {
if err, ok := r.(error); ok {
result = Err[T](err)
} else {
result = Err[T](errors.New(fmt.Sprint(r)))
}
}
}()
return Ok(fn())
}