-
-
Notifications
You must be signed in to change notification settings - Fork 581
/
decode.go
77 lines (68 loc) · 1.91 KB
/
decode.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
package apiproto
import (
"bytes"
"encoding/json"
"strconv"
"strings"
)
// UnmarshalJSON helps to unmarshal command method when set as string.
func (m *Command_MethodType) UnmarshalJSON(data []byte) error {
if len(data) > 2 {
if v, ok := Command_MethodType_value[strings.ToUpper(string(data[1:len(data)-1]))]; ok {
*m = Command_MethodType(v)
return nil
}
}
val, err := strconv.Atoi(string(data))
if err != nil {
return err
}
*m = Command_MethodType(val)
return nil
}
// CommandDecoder ...
type CommandDecoder interface {
Reset([]byte)
Decode() (*Command, error)
}
var _ CommandDecoder = (*JSONCommandDecoder)(nil)
// JSONCommandDecoder ...
type JSONCommandDecoder struct {
decoder *json.Decoder
}
// NewJSONCommandDecoder ...
func NewJSONCommandDecoder(data []byte) *JSONCommandDecoder {
return &JSONCommandDecoder{
decoder: json.NewDecoder(bytes.NewReader(data)),
}
}
// Reset ...
func (d *JSONCommandDecoder) Reset(data []byte) {
d.decoder = json.NewDecoder(bytes.NewReader(data))
}
// Decode ...
func (d *JSONCommandDecoder) Decode() (*Command, error) {
var c Command
err := d.decoder.Decode(&c)
if err != nil {
return nil, err
}
return &c, nil
}
// RequestDecoder ...
type RequestDecoder interface {
DecodeBatch([]byte) (*BatchRequest, error)
DecodePublish([]byte) (*PublishRequest, error)
DecodeBroadcast([]byte) (*BroadcastRequest, error)
DecodeSubscribe([]byte) (*SubscribeRequest, error)
DecodeUnsubscribe([]byte) (*UnsubscribeRequest, error)
DecodeDisconnect([]byte) (*DisconnectRequest, error)
DecodePresence([]byte) (*PresenceRequest, error)
DecodePresenceStats([]byte) (*PresenceStatsRequest, error)
DecodeHistory([]byte) (*HistoryRequest, error)
DecodeHistoryRemove([]byte) (*HistoryRemoveRequest, error)
DecodeInfo([]byte) (*InfoRequest, error)
DecodeRPC([]byte) (*RPCRequest, error)
DecodeRefresh([]byte) (*RefreshRequest, error)
DecodeChannels([]byte) (*ChannelsRequest, error)
}