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