woj-server/pkg/utils/try.go
2024-01-06 14:42:35 +08:00

28 lines
525 B
Go

package utils
type TryChain[T any, V comparable] struct {
result T
error V
success V
}
func NewTry[T any, V comparable](success V) *TryChain[T, V] {
return &TryChain[T, V]{success: success}
}
func (c *TryChain[T, V]) Try(callback func() (T, V)) *TryChain[T, V] {
c.result, c.error = callback()
return c
}
func (c *TryChain[T, V]) Or(callback func() (T, V)) *TryChain[T, V] {
if c.error == c.success {
return c
}
return c.Try(callback)
}
func (c *TryChain[T, V]) Done() (T, V) {
return c.result, c.error
}