aboutsummaryrefslogtreecommitdiff
path: root/litecodec.go
diff options
context:
space:
mode:
Diffstat (limited to 'litecodec.go')
-rw-r--r--litecodec.go56
1 files changed, 56 insertions, 0 deletions
diff --git a/litecodec.go b/litecodec.go
new file mode 100644
index 0000000..0de4674
--- /dev/null
+++ b/litecodec.go
@@ -0,0 +1,56 @@
+package securecookie
+
+import "fmt"
+
+var _ Codec = (*LiteCodec)(nil)
+
+func NewLiteCodec() *LiteCodec {
+ s := &LiteCodec{
+ sz: GobEncoder{},
+ }
+ return s
+}
+
+// LiteCodec encodes and decodes
+type LiteCodec struct {
+ err error
+ sz Serializer
+}
+
+// Encoding sets the encoding/serialization method for cookies.
+//
+// Default is encoding/gob. To encode special structures using encoding/gob,
+// they must be registered first using gob.Register().
+func (s *LiteCodec) SetSerializer(sz Serializer) *LiteCodec {
+ s.sz = sz
+
+ return s
+}
+
+// Encode encodes a value.
+func (s *LiteCodec) Encode(name string, value interface{}) (string, error) {
+ if s.err != nil {
+ return "", s.err
+ }
+ var err error
+ var b []byte
+ // Serialize.
+ if b, err = s.sz.Serialize(value); err != nil {
+ return "", cookieError{cause: fmt.Errorf(`%w: %s`, err, name), typ: usageError}
+ }
+ // Done.
+ return string(b), nil
+}
+
+// Decode decodes a value. The dst argument must be a pointer.
+func (s *LiteCodec) Decode(name, value string, dst interface{}, _ ...int) error {
+ if s.err != nil {
+ return s.err
+ }
+ // Deserialize.
+ if err := s.sz.Deserialize([]byte(value), dst); err != nil {
+ return cookieError{cause: fmt.Errorf(`%w: %s`, err, name), typ: decodeError}
+ }
+ // Done.
+ return nil
+}