diff options
Diffstat (limited to 'vendor/github.com/vmihailenco/msgpack/appengine.go')
-rw-r--r-- | vendor/github.com/vmihailenco/msgpack/appengine.go | 64 |
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 | |||
3 | package msgpack | ||
4 | |||
5 | import ( | ||
6 | "reflect" | ||
7 | |||
8 | ds "google.golang.org/appengine/datastore" | ||
9 | ) | ||
10 | |||
11 | func init() { | ||
12 | Register((*ds.Key)(nil), encodeDatastoreKeyValue, decodeDatastoreKeyValue) | ||
13 | Register((*ds.Cursor)(nil), encodeDatastoreCursorValue, decodeDatastoreCursorValue) | ||
14 | } | ||
15 | |||
16 | func EncodeDatastoreKey(e *Encoder, key *ds.Key) error { | ||
17 | if key == nil { | ||
18 | return e.EncodeNil() | ||
19 | } | ||
20 | return e.EncodeString(key.Encode()) | ||
21 | } | ||
22 | |||
23 | func encodeDatastoreKeyValue(e *Encoder, v reflect.Value) error { | ||
24 | key := v.Interface().(*ds.Key) | ||
25 | return EncodeDatastoreKey(e, key) | ||
26 | } | ||
27 | |||
28 | func 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 | |||
39 | func 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 | |||
48 | func encodeDatastoreCursorValue(e *Encoder, v reflect.Value) error { | ||
49 | cursor := v.Interface().(ds.Cursor) | ||
50 | return e.Encode(cursor.String()) | ||
51 | } | ||
52 | |||
53 | func 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 | } | ||