From 39085905783829161738207271aa35386f6ebc72 Mon Sep 17 00:00:00 2001
From: Taylor Gerring <taylor.gerring@gmail.com>
Date: Thu, 2 Apr 2015 15:37:35 +0200
Subject: Make "To" field optional in whisper filter

---
 rpc/args.go      | 13 ++++++++-----
 rpc/args_test.go | 25 +++++++++++++++++++++++++
 2 files changed, 33 insertions(+), 5 deletions(-)

diff --git a/rpc/args.go b/rpc/args.go
index 70618a01a..a8cb7dcb1 100644
--- a/rpc/args.go
+++ b/rpc/args.go
@@ -1021,12 +1021,15 @@ func (args *WhisperFilterArgs) UnmarshalJSON(b []byte) (err error) {
 		return NewInsufficientParamsError(len(obj), 1)
 	}
 
-	var argstr string
-	argstr, ok := obj[0].To.(string)
-	if !ok {
-		return NewInvalidTypeError("to", "is not a string")
+	if obj[0].To == nil {
+		args.To = ""
+	} else {
+		argstr, ok := obj[0].To.(string)
+		if !ok {
+			return NewInvalidTypeError("to", "is not a string")
+		}
+		args.To = argstr
 	}
-	args.To = argstr
 
 	t := make([]string, len(obj[0].Topics))
 	for i, j := range obj[0].Topics {
diff --git a/rpc/args_test.go b/rpc/args_test.go
index 0ac8f657b..b88bab280 100644
--- a/rpc/args_test.go
+++ b/rpc/args_test.go
@@ -1805,6 +1805,16 @@ func TestWhisperFilterArgsEmpty(t *testing.T) {
 	}
 }
 
+func TestWhisperFilterArgsToInt(t *testing.T) {
+	input := `[{"to": 2}]`
+
+	args := new(WhisperFilterArgs)
+	str := ExpectInvalidTypeError(json.Unmarshal([]byte(input), args))
+	if len(str) > 0 {
+		t.Error(str)
+	}
+}
+
 func TestWhisperFilterArgsToBool(t *testing.T) {
 	input := `[{"topics": ["0x68656c6c6f20776f726c64"], "to": false}]`
 
@@ -1815,6 +1825,21 @@ func TestWhisperFilterArgsToBool(t *testing.T) {
 	}
 }
 
+func TestWhisperFilterArgsToMissing(t *testing.T) {
+	input := `[{"topics": ["0x68656c6c6f20776f726c64"]}]`
+	expected := new(WhisperFilterArgs)
+	expected.To = ""
+
+	args := new(WhisperFilterArgs)
+	if err := json.Unmarshal([]byte(input), &args); err != nil {
+		t.Error(err)
+	}
+
+	if args.To != expected.To {
+		t.Errorf("To shoud be %v but is %v", expected.To, args.To)
+	}
+}
+
 func TestWhisperFilterArgsTopicInt(t *testing.T) {
 	input := `[{"topics": [6], "to": "0x34ag445g3455b34"}]`
 
-- 
cgit v1.2.3