-
Notifications
You must be signed in to change notification settings - Fork 4
/
operator.go
105 lines (93 loc) · 2.32 KB
/
operator.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
package tarantool
import (
"github.com/vmihailenco/msgpack/v5"
)
type Op struct {
encode func(enc *msgpack.Encoder) error
}
func (op Op) EncodeMsgpack(enc *msgpack.Encoder) error {
return op.encode(enc)
}
// OpAdd ...
func OpAdd(field uint64, val interface{}) Op {
return Op{encode: func(enc *msgpack.Encoder) error {
_ = enc.EncodeArrayLen(3)
_ = enc.EncodeString("+")
_ = enc.EncodeUint(field)
return enc.Encode(val)
}}
}
// OpSub ...
func OpSub(field uint64, val interface{}) Op {
return Op{encode: func(enc *msgpack.Encoder) error {
_ = enc.EncodeArrayLen(3)
_ = enc.EncodeString("-")
_ = enc.EncodeUint(field)
return enc.Encode(val)
}}
}
// OpBitAND ...
func OpBitAND(field, val uint64) Op {
return Op{encode: func(enc *msgpack.Encoder) error {
_ = enc.EncodeArrayLen(3)
_ = enc.EncodeString("&")
_ = enc.EncodeUint(field)
return enc.EncodeUint(val)
}}
}
// OpBitXOR ...
func OpBitXOR(field, val uint64) Op {
return Op{encode: func(enc *msgpack.Encoder) error {
_ = enc.EncodeArrayLen(3)
_ = enc.EncodeString("^")
_ = enc.EncodeUint(field)
return enc.EncodeUint(val)
}}
}
// OpBitOR ...
func OpBitOR(field, val uint64) Op {
return Op{encode: func(enc *msgpack.Encoder) error {
_ = enc.EncodeArrayLen(3)
_ = enc.EncodeString("|")
_ = enc.EncodeUint(field)
return enc.EncodeUint(val)
}}
}
// OpDelete ...
func OpDelete(from, count uint64) Op {
return Op{encode: func(enc *msgpack.Encoder) error {
_ = enc.EncodeArrayLen(3)
_ = enc.EncodeString("#")
_ = enc.EncodeUint(from)
return enc.EncodeUint(count)
}}
}
// OpInsert ...
func OpInsert(before uint64, val interface{}) Op {
return Op{encode: func(enc *msgpack.Encoder) error {
_ = enc.EncodeArrayLen(3)
_ = enc.EncodeString("!")
_ = enc.EncodeUint(before)
return enc.Encode(val)
}}
}
// OpAssign ...
func OpAssign(field uint64, val interface{}) Op {
return Op{encode: func(enc *msgpack.Encoder) error {
_ = enc.EncodeArrayLen(3)
_ = enc.EncodeString("=")
_ = enc.EncodeUint(field)
return enc.Encode(val)
}}
}
// OpSplice ...
func OpSplice(field, offset, position uint64, replace string) Op {
return Op{encode: func(enc *msgpack.Encoder) error {
_ = enc.EncodeArrayLen(4)
_ = enc.EncodeString(":")
_ = enc.EncodeUint(field)
_ = enc.EncodeUint(offset)
_ = enc.EncodeUint(position)
return enc.EncodeString(replace)
}}
}