woj-server/pkg/utils/try.go
2024-01-06 15:04:52 +08:00

52 lines
897 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
}
type TryChainErr struct {
err error
}
func NewTryErr() *TryChainErr {
return &TryChainErr{}
}
func (c *TryChainErr) Try(callback func() error) *TryChainErr {
c.err = callback()
return c
}
func (c *TryChainErr) Or(callback func() error) *TryChainErr {
if c.err == nil {
return c
}
return c.Try(callback)
}
func (c *TryChainErr) Done() error {
return c.err
}