nurse/redis/validation.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
}