Skip to content

Commit 7e727b0

Browse files
author
ivahaev
committed
new type Error
1 parent b66bb7c commit 7e727b0

File tree

4 files changed

+29
-6
lines changed

4 files changed

+29
-6
lines changed

msg.go

+6-2
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,10 @@ type wampMsg struct {
88
Args []interface{}
99
}
1010

11+
type Error struct {
12+
Desc string `json:"desc"`
13+
}
14+
1115
func createMessage(args ...interface{}) ([]byte, error) {
1216
return json.Marshal(args)
1317
}
@@ -24,13 +28,13 @@ func createWelcomeMessage(id string) ([]byte, error) {
2428
return createMessage(msgWelcome, id, 1, identity)
2529
}
2630

27-
func createError(err interface{}) string {
31+
func createError(err interface{}) Error {
2832
var text string
2933
switch err.(type) {
3034
case error:
3135
text = err.(error).Error()
3236
case string:
3337
text = err.(string)
3438
}
35-
return "error#" + text
39+
return Error{"error#" + text}
3640
}

parser.go

+15
Original file line numberDiff line numberDiff line change
@@ -69,3 +69,18 @@ func parseWampMessage(typ int, msg []interface{}) (*wampMsg, error) {
6969
}
7070
return message, nil
7171
}
72+
73+
func parseErrMsg(in interface{}) (Error, error) {
74+
switch in.(type) {
75+
case string:
76+
return Error{in.(string)}, nil
77+
case map[string]interface{}:
78+
_desc, ok := in.(map[string]interface{})["desc"]
79+
if !ok {
80+
return Error{}, errors.New("Invalid input error interface{}")
81+
}
82+
desc, ok := _desc.(string)
83+
return Error{desc}, nil
84+
}
85+
return Error{}, errors.New("Invalid input error interface{}")
86+
}

wamp.go

+5-2
Original file line numberDiff line numberDiff line change
@@ -470,10 +470,13 @@ func (w *Wango) handleCallError(c *Conn, msg []interface{}) {
470470
res := new(callResult)
471471
res.err = errors.New("RPC error#")
472472
if len(callResultMessage.Args) > 0 {
473-
if _err := callResultMessage.Args[0].(string); ok {
474-
err = errors.New("RPC error#" + _err)
473+
var _err Error
474+
_err, err = parseErrMsg(callResultMessage.Args[0])
475+
if err == nil {
476+
err = errors.New("RPC error#" + _err.Desc)
475477
}
476478
}
479+
477480
resChan <- &callResult{nil, err}
478481
}
479482

wango_test.go

+3-2
Original file line numberDiff line numberDiff line change
@@ -179,7 +179,7 @@ func TestClientConnectingAndRPC(t *testing.T) {
179179

180180
_, err = client.Call("wango.test-error")
181181
if err == nil {
182-
t.Fatal("Can't call")
182+
t.Fatal("Call must fail", err)
183183
}
184184
}
185185

@@ -427,7 +427,8 @@ func connectAndRPC(path, uri string, args ...interface{}) (interface{}, error) {
427427
return message[2], nil
428428
}
429429
if message[0].(float64) == msgCallError && message[1].(string) == msgId {
430-
return nil, errors.New(message[2].(string))
430+
errDesc, _ := parseErrMsg(message[2])
431+
return nil, errors.New(errDesc.Desc)
431432
}
432433
}
433434
}

0 commit comments

Comments
 (0)