Better errors for {En,De}codeMulti.
This commit is contained in:
parent
6186150e83
commit
155134204c
2 changed files with 25 additions and 4 deletions
|
@ -357,12 +357,17 @@ func CodecsFromPairs(keyPairs ...[]byte) []Codec {
|
|||
return codecs
|
||||
}
|
||||
|
||||
var errNoCodecs = errors.New("securecookie: no codecs provided")
|
||||
|
||||
// EncodeMulti encodes a cookie value using a group of codecs.
|
||||
//
|
||||
// The codecs are tried in order. Multiple codecs are accepted to allow
|
||||
// key rotation.
|
||||
func EncodeMulti(name string, value interface{},
|
||||
codecs ...Codec) (string, error) {
|
||||
func EncodeMulti(name string, value interface{}, codecs ...Codec) (string, error) {
|
||||
if len(codecs) == 0 {
|
||||
return "", errNoCodecs
|
||||
}
|
||||
|
||||
var errors MultiError
|
||||
for _, codec := range codecs {
|
||||
if encoded, err := codec.Encode(name, value); err == nil {
|
||||
|
@ -378,8 +383,11 @@ func EncodeMulti(name string, value interface{},
|
|||
//
|
||||
// The codecs are tried in order. Multiple codecs are accepted to allow
|
||||
// key rotation.
|
||||
func DecodeMulti(name string, value string, dst interface{},
|
||||
codecs ...Codec) error {
|
||||
func DecodeMulti(name string, value string, dst interface{}, codecs ...Codec) error {
|
||||
if len(codecs) == 0 {
|
||||
return errNoCodecs
|
||||
}
|
||||
|
||||
var errors MultiError
|
||||
for _, codec := range codecs {
|
||||
if err := codec.Decode(name, value, dst); err == nil {
|
||||
|
|
|
@ -144,6 +144,19 @@ func TestMultiError(t *testing.T) {
|
|||
}
|
||||
}
|
||||
|
||||
func TestMultiNoCodecs(t *testing.T) {
|
||||
_, err := EncodeMulti("foo", "bar")
|
||||
if err != errNoCodecs {
|
||||
t.Errorf("EncodeMulti: bad value for error, got: %v", err)
|
||||
}
|
||||
|
||||
var dst []byte
|
||||
err = DecodeMulti("foo", "bar", &dst)
|
||||
if err != errNoCodecs {
|
||||
t.Errorf("DecodeMulti: bad value for error, got: %v", err)
|
||||
}
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
type FooBar struct {
|
||||
|
|
Loading…
Reference in a new issue