28 lines
525 B
Go
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
|
|
}
|