Better errors for {En,De}codeMulti.

This commit is contained in:
Kamil Kisiel 2013-10-17 10:33:57 -07:00
parent 6186150e83
commit 155134204c
2 changed files with 25 additions and 4 deletions

View file

@ -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 {

View file

@ -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 {