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
|
return codecs
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var errNoCodecs = errors.New("securecookie: no codecs provided")
|
||||||
|
|
||||||
// EncodeMulti encodes a cookie value using a group of codecs.
|
// EncodeMulti encodes a cookie value using a group of codecs.
|
||||||
//
|
//
|
||||||
// The codecs are tried in order. Multiple codecs are accepted to allow
|
// The codecs are tried in order. Multiple codecs are accepted to allow
|
||||||
// key rotation.
|
// key rotation.
|
||||||
func EncodeMulti(name string, value interface{},
|
func EncodeMulti(name string, value interface{}, codecs ...Codec) (string, error) {
|
||||||
codecs ...Codec) (string, error) {
|
if len(codecs) == 0 {
|
||||||
|
return "", errNoCodecs
|
||||||
|
}
|
||||||
|
|
||||||
var errors MultiError
|
var errors MultiError
|
||||||
for _, codec := range codecs {
|
for _, codec := range codecs {
|
||||||
if encoded, err := codec.Encode(name, value); err == nil {
|
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
|
// The codecs are tried in order. Multiple codecs are accepted to allow
|
||||||
// key rotation.
|
// key rotation.
|
||||||
func DecodeMulti(name string, value string, dst interface{},
|
func DecodeMulti(name string, value string, dst interface{}, codecs ...Codec) error {
|
||||||
codecs ...Codec) error {
|
if len(codecs) == 0 {
|
||||||
|
return errNoCodecs
|
||||||
|
}
|
||||||
|
|
||||||
var errors MultiError
|
var errors MultiError
|
||||||
for _, codec := range codecs {
|
for _, codec := range codecs {
|
||||||
if err := codec.Decode(name, value, dst); err == nil {
|
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 {
|
type FooBar struct {
|
||||||
|
|
Loading…
Reference in a new issue