Skip to content

Commit 7d5167e

Browse files
authored
feat: add WriteArg and Scan net.IP(#2062)
* feat: add WriteArg net.IP * feat: add Scan net.IP
1 parent 3961b95 commit 7d5167e

File tree

4 files changed

+28
-0
lines changed

4 files changed

+28
-0
lines changed

internal/proto/scan.go

+4
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package proto
33
import (
44
"encoding"
55
"fmt"
6+
"net"
67
"reflect"
78
"time"
89

@@ -115,6 +116,9 @@ func Scan(b []byte, v interface{}) error {
115116
return nil
116117
case encoding.BinaryUnmarshaler:
117118
return v.UnmarshalBinary(b)
119+
case *net.IP:
120+
*v = b
121+
return nil
118122
default:
119123
return fmt.Errorf(
120124
"redis: can't unmarshal %T (consider implementing BinaryUnmarshaler)", v)

internal/proto/writer.go

+3
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import (
44
"encoding"
55
"fmt"
66
"io"
7+
"net"
78
"strconv"
89
"time"
910

@@ -106,6 +107,8 @@ func (w *Writer) WriteArg(v interface{}) error {
106107
return err
107108
}
108109
return w.bytes(b)
110+
case net.IP:
111+
return w.bytes(v)
109112
default:
110113
return fmt.Errorf(
111114
"redis: can't marshal %T (implement encoding.BinaryMarshaler)", v)

internal/proto/writer_test.go

+9
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@ package proto_test
33
import (
44
"bytes"
55
"encoding"
6+
"fmt"
7+
"net"
68
"testing"
79
"time"
810

@@ -64,6 +66,13 @@ var _ = Describe("WriteBuffer", func() {
6466

6567
Expect(buf.Len()).To(Equal(15))
6668
})
69+
70+
It("should append net.IP", func() {
71+
ip := net.ParseIP("192.168.1.1")
72+
err := wr.WriteArgs([]interface{}{ip})
73+
Expect(err).NotTo(HaveOccurred())
74+
Expect(buf.String()).To(Equal(fmt.Sprintf("*1\r\n$16\r\n%s\r\n", bytes.NewBuffer(ip))))
75+
})
6776
})
6877

6978
type discard struct{}

redis_test.go

+12
Original file line numberDiff line numberDiff line change
@@ -316,6 +316,18 @@ var _ = Describe("Client", func() {
316316
err := client.Conn(ctx).Get(ctx, "this-key-does-not-exist").Err()
317317
Expect(err).To(Equal(redis.Nil))
318318
})
319+
320+
It("should set and scan net.IP", func() {
321+
ip := net.ParseIP("192.168.1.1")
322+
err := client.Set(ctx, "ip", ip, 0).Err()
323+
Expect(err).NotTo(HaveOccurred())
324+
325+
var ip2 net.IP
326+
err = client.Get(ctx, "ip").Scan(&ip2)
327+
Expect(err).NotTo(HaveOccurred())
328+
329+
Expect(ip2).To(Equal(ip))
330+
})
319331
})
320332

321333
var _ = Describe("Client timeout", func() {

0 commit comments

Comments
 (0)