From 309788de37505253293416c3323962f9a16bbd07 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?P=C3=A9ter=20Szil=C3=A1gyi?= <peterke@gmail.com>
Date: Mon, 17 Aug 2015 14:04:20 +0300
Subject: [PATCH] rpc: update the xeth over RPC API to use the success/failure
 messages

---
 rpc/xeth.go | 18 +++++++++++++-----
 1 file changed, 13 insertions(+), 5 deletions(-)

diff --git a/rpc/xeth.go b/rpc/xeth.go
index 65a1edeb8..9527a96c0 100644
--- a/rpc/xeth.go
+++ b/rpc/xeth.go
@@ -53,7 +53,7 @@ func (self *Xeth) Call(method string, params []interface{}) (map[string]interfac
 		Method:  method,
 		Params:  data,
 	}
-	// Send the request over and process the response
+	// Send the request over and retrieve the response
 	if err := self.client.Send(req); err != nil {
 		return nil, err
 	}
@@ -61,9 +61,17 @@ func (self *Xeth) Call(method string, params []interface{}) (map[string]interfac
 	if err != nil {
 		return nil, err
 	}
-	value, ok := res.(map[string]interface{})
-	if !ok {
-		return nil, fmt.Errorf("Invalid response type: have %v, want %v", reflect.TypeOf(res), reflect.TypeOf(make(map[string]interface{})))
+	// Ensure the response is valid, and extract the results
+	success, isSuccessResponse := res.(*shared.SuccessResponse)
+	failure, isFailureResponse := res.(*shared.ErrorResponse)
+	switch {
+	case isFailureResponse:
+		return nil, fmt.Errorf("Method invocation failed: %v", failure.Error)
+
+	case isSuccessResponse:
+		return success.Result.(map[string]interface{}), nil
+
+	default:
+		return nil, fmt.Errorf("Invalid response type: %v", reflect.TypeOf(res))
 	}
-	return value, nil
 }
-- 
GitLab