feat: super 包新增 Verify 函数,适用于业务条件校验
This commit is contained in:
parent
b730d54499
commit
997bbbe2bc
|
@ -0,0 +1,40 @@
|
|||
package super
|
||||
|
||||
// Verify 对特定表达式进行校验,当表达式不成立时,将执行 handle
|
||||
func Verify[V any](handle func(V)) *VerifyHandle[V] {
|
||||
return &VerifyHandle[V]{handle: handle}
|
||||
}
|
||||
|
||||
// VerifyHandle 校验句柄
|
||||
type VerifyHandle[V any] struct {
|
||||
handle func(V)
|
||||
v V
|
||||
hit bool
|
||||
}
|
||||
|
||||
// PreCase 先决校验用例,当 expression 成立时,将跳过 caseHandle 的执行,直接执行 handle 并返回 false
|
||||
// - 常用于对前置参数的空指针校验,例如当 a 为 nil 时,不执行 a.B(),而是直接返回 false
|
||||
func (slf *VerifyHandle[V]) PreCase(expression func() bool, value V, caseHandle func(verify *VerifyHandle[V]) bool) bool {
|
||||
if expression() {
|
||||
slf.handle(value)
|
||||
return false
|
||||
}
|
||||
return caseHandle(slf)
|
||||
}
|
||||
|
||||
// Case 校验用例,当 expression 成立时,将忽略后续 Case,并将在 Do 时执行 handle,返回 false
|
||||
func (slf *VerifyHandle[V]) Case(expression bool, value V) *VerifyHandle[V] {
|
||||
if !slf.hit && expression {
|
||||
slf.v = value
|
||||
slf.hit = true
|
||||
}
|
||||
return slf
|
||||
}
|
||||
|
||||
// Do 执行校验,当校验失败时,将执行 handle,并返回 false
|
||||
func (slf *VerifyHandle[V]) Do() bool {
|
||||
if slf.hit {
|
||||
slf.handle(slf.v)
|
||||
}
|
||||
return !slf.hit
|
||||
}
|
|
@ -0,0 +1,29 @@
|
|||
package super_test
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"github.com/kercylan98/minotaur/utils/super"
|
||||
)
|
||||
|
||||
func ExampleVerify() {
|
||||
var getId = func() int { return 1 }
|
||||
var n *super.VerifyHandle[int]
|
||||
|
||||
super.Verify(func(err error) {
|
||||
fmt.Println(err)
|
||||
}).Case(getId() == 1, errors.New("id can't be 1")).
|
||||
Do()
|
||||
|
||||
super.Verify(func(err error) {
|
||||
fmt.Println(err)
|
||||
}).PreCase(func() bool {
|
||||
return n == nil
|
||||
}, errors.New("n can't be nil"), func(verify *super.VerifyHandle[error]) bool {
|
||||
return verify.Do()
|
||||
})
|
||||
|
||||
// Output:
|
||||
// id can't be 1
|
||||
// n can't be nil
|
||||
}
|
Loading…
Reference in New Issue