From 6ac16e3b5cbfaeb260678ec53e1e052a50b01232 Mon Sep 17 00:00:00 2001 From: Matt Silverlock Date: Mon, 28 Mar 2016 22:20:53 -0700 Subject: [feature] NopEncoder: accept/return []byte. - [docs] Update doc.go for golint. --- securecookie.go | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) (limited to 'securecookie.go') diff --git a/securecookie.go b/securecookie.go index be43e9d..83dd606 100644 --- a/securecookie.go +++ b/securecookie.go @@ -101,6 +101,7 @@ var ( errTimestampTooNew = cookieError{typ: decodeError, msg: "timestamp is too new"} errTimestampExpired = cookieError{typ: decodeError, msg: "expired timestamp"} errDecryptionFailed = cookieError{typ: decodeError, msg: "the value could not be decrypted"} + errValueNotByte = cookieError{typ: decodeError, msg: "value not a []byte."} // ErrMacInvalid indicates that cookie decoding failed because the HMAC // could not be extracted and verified. Direct use of this error @@ -181,6 +182,11 @@ type GobEncoder struct{} // json.Unmarshaller interfaces. type JSONEncoder struct{} +// NopEncoder does not encode cookie values, and instead simply accepts a []byte +// (as an interface{}) and returns a []byte. This is particularly useful when +// you encoding an object upstream and do not wish to re-encode it. +type NopEncoder struct{} + // MaxLength restricts the maximum length, in bytes, for the cookie value. // // Default is 4096, which is the maximum value accepted by Internet Explorer. @@ -457,6 +463,25 @@ func (e JSONEncoder) Deserialize(src []byte, dst interface{}) error { return nil } +// Serialize passes a []byte through as-is. +func (e NopEncoder) Serialize(src interface{}) ([]byte, error) { + if b, ok := src.([]byte); ok { + return b, nil + } + + return nil, errValueNotByte +} + +// Deserialize passes a []byte through as-is. +func (e NopEncoder) Deserialize(src []byte, dst interface{}) error { + if _, ok := dst.([]byte); ok { + dst = src + return nil + } + + return errValueNotByte +} + // Encoding ------------------------------------------------------------------- // encode encodes a value using base64. -- cgit v1.2.3