aboutsummaryrefslogtreecommitdiffhomepage
path: root/vendor/github.com/vmihailenco/msgpack/appengine.go
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/github.com/vmihailenco/msgpack/appengine.go')
-rw-r--r--vendor/github.com/vmihailenco/msgpack/appengine.go64
1 files changed, 64 insertions, 0 deletions
diff --git a/vendor/github.com/vmihailenco/msgpack/appengine.go b/vendor/github.com/vmihailenco/msgpack/appengine.go
new file mode 100644
index 0000000..e8e91e5
--- /dev/null
+++ b/vendor/github.com/vmihailenco/msgpack/appengine.go
@@ -0,0 +1,64 @@
1// +build appengine
2
3package msgpack
4
5import (
6 "reflect"
7
8 ds "google.golang.org/appengine/datastore"
9)
10
11func init() {
12 Register((*ds.Key)(nil), encodeDatastoreKeyValue, decodeDatastoreKeyValue)
13 Register((*ds.Cursor)(nil), encodeDatastoreCursorValue, decodeDatastoreCursorValue)
14}
15
16func EncodeDatastoreKey(e *Encoder, key *ds.Key) error {
17 if key == nil {
18 return e.EncodeNil()
19 }
20 return e.EncodeString(key.Encode())
21}
22
23func encodeDatastoreKeyValue(e *Encoder, v reflect.Value) error {
24 key := v.Interface().(*ds.Key)
25 return EncodeDatastoreKey(e, key)
26}
27
28func DecodeDatastoreKey(d *Decoder) (*ds.Key, error) {
29 v, err := d.DecodeString()
30 if err != nil {
31 return nil, err
32 }
33 if v == "" {
34 return nil, nil
35 }
36 return ds.DecodeKey(v)
37}
38
39func decodeDatastoreKeyValue(d *Decoder, v reflect.Value) error {
40 key, err := DecodeDatastoreKey(d)
41 if err != nil {
42 return err
43 }
44 v.Set(reflect.ValueOf(key))
45 return nil
46}
47
48func encodeDatastoreCursorValue(e *Encoder, v reflect.Value) error {
49 cursor := v.Interface().(ds.Cursor)
50 return e.Encode(cursor.String())
51}
52
53func decodeDatastoreCursorValue(d *Decoder, v reflect.Value) error {
54 s, err := d.DecodeString()
55 if err != nil {
56 return err
57 }
58 cursor, err := ds.DecodeCursor(s)
59 if err != nil {
60 return err
61 }
62 v.Set(reflect.ValueOf(cursor))
63 return nil
64}