49 lines
871 B
Go
49 lines
871 B
Go
package redis
|
|
|
|
import (
|
|
"errors"
|
|
"fmt"
|
|
|
|
"github.com/go-redis/redis/v8"
|
|
)
|
|
|
|
var (
|
|
_ CmdValidator = (ValidationChain)(nil)
|
|
_ CmdValidator = StringCmdValidator("")
|
|
)
|
|
|
|
type (
|
|
CmdValidator interface {
|
|
Validate(cmder redis.Cmder) error
|
|
}
|
|
|
|
ValidationChain []CmdValidator
|
|
)
|
|
|
|
func (v ValidationChain) Validate(cmder redis.Cmder) error {
|
|
for i := range v {
|
|
if err := v[i].Validate(cmder); err != nil {
|
|
return err
|
|
}
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
type StringCmdValidator string
|
|
|
|
func (s StringCmdValidator) Validate(cmder redis.Cmder) error {
|
|
if err := cmder.Err(); err != nil {
|
|
return err
|
|
}
|
|
|
|
if stringCmd, ok := cmder.(*redis.StringCmd); !ok {
|
|
return errors.New("not a string result")
|
|
} else if got, err := stringCmd.Result(); err != nil {
|
|
return err
|
|
} else if want := string(s); got != want {
|
|
return fmt.Errorf("want %s but got %s", want, got)
|
|
}
|
|
|
|
return nil
|
|
}
|