浏览代码

Add Ints reply helper function

Wallace C Ricardo 11 年之前
父节点
当前提交
baa8d958fe
共有 2 个文件被更改,包括 41 次插入0 次删除
  1. 17 0
      redis/reply.go
  2. 24 0
      redis/reply_test.go

+ 17 - 0
redis/reply.go

@@ -270,3 +270,20 @@ func Strings(reply interface{}, err error) ([]string, error) {
 	}
 	}
 	return nil, fmt.Errorf("redigo: unexpected type for Strings, got type %T", reply)
 	return nil, fmt.Errorf("redigo: unexpected type for Strings, got type %T", reply)
 }
 }
+
+// Ints is a helper that converts an array command reply to a []int. If
+// err is not equal to nil, then Ints returns nil, err.
+func Ints(reply interface{}, err error) ([]int, error) {
+	var ints []int
+	if reply == nil {
+		return ints, ErrNil
+	}
+	values, err := Values(reply, err)
+	if err != nil {
+		return ints, err
+	}
+	if err := ScanSlice(values, &ints); err != nil {
+		return ints, err
+	}
+	return ints, nil
+}

+ 24 - 0
redis/reply_test.go

@@ -37,6 +37,16 @@ var replyTests = []struct {
 	actual   valueError
 	actual   valueError
 	expected valueError
 	expected valueError
 }{
 }{
+	{
+		"ints([v1, v2])",
+		ve(redis.Ints([]interface{}{[]byte("4"), []byte("5")}, nil)),
+		ve([]int{4, 5}, nil),
+	},
+	{
+		"ints(nil)",
+		ve(redis.Ints(nil, nil)),
+		ve([]int(nil), redis.ErrNil),
+	},
 	{
 	{
 		"strings([v1, v2])",
 		"strings([v1, v2])",
 		ve(redis.Strings([]interface{}{[]byte("v1"), []byte("v2")}, nil)),
 		ve(redis.Strings([]interface{}{[]byte("v1"), []byte("v2")}, nil)),
@@ -127,6 +137,20 @@ func ExampleInt() {
 	// 2
 	// 2
 }
 }
 
 
+func ExampleInts() {
+	c, err := dial()
+	if err != nil {
+		panic(err)
+	}
+	defer c.Close()
+
+	c.Do("SADD", "set_with_integers", 4, 5, 6)
+	ints, _ := redis.Ints(c.Do("SMEMBERS", "set_with_integers"))
+	fmt.Printf("%#v\n", ints)
+	// Output:
+	// []int{4, 5, 6}
+}
+
 func ExampleString() {
 func ExampleString() {
 	c, err := dial()
 	c, err := dial()
 	if err != nil {
 	if err != nil {