From fa895b37d6c17218821f1e70719470d17bb76b04 Mon Sep 17 00:00:00 2001 From: Jordan Orelli Date: Thu, 7 Aug 2014 18:15:19 +0000 Subject: [PATCH] integers are now []byte --- values.go | 34 ++++++++++++++++++---------------- values_test.go | 30 +++++++++++++++--------------- 2 files changed, 33 insertions(+), 31 deletions(-) diff --git a/values.go b/values.go index 238dd7f..10f39c7 100644 --- a/values.go +++ b/values.go @@ -108,8 +108,7 @@ func readValue(r io.Reader) (value, error) { case start_error: return ErrorVal(line), nil case start_integer: - line = line[:len(line)-2] - return Integer(line[1:]), nil + return IntVal(line), nil case start_bulkstring: line = line[:len(line)-2] return readBulkString(line[1:], br) @@ -131,8 +130,8 @@ func (s StringVal) Write(w io.Writer) (int, error) { func String(s string) value { b := make(StringVal, len(s)+3) - b[0] = '+' - copy(b[1:], []byte(s)) + b[0] = start_string + copy(b[1:], s) b[len(b)-2] = '\r' b[len(b)-1] = '\n' return b @@ -143,17 +142,13 @@ func String(s string) value { type ErrorVal []byte func (e ErrorVal) Write(w io.Writer) (int, error) { - // w.Write([]byte{'-'}) - // w.Write([]byte(e)) - // w.Write([]byte{'\r', '\n'}) - // return 0, nil return w.Write(e) } func Error(s string) value { b := make(ErrorVal, len(s)+3) - b[0] = '-' - copy(b[1:], []byte(s)) + b[0] = start_error + copy(b[1:], s) b[len(b)-2] = '\r' b[len(b)-1] = '\n' return b @@ -161,13 +156,20 @@ func Error(s string) value { // ------------------------------------------------------------------------------ -type Integer []byte +type IntVal []byte -func (i Integer) Write(w io.Writer) (int, error) { - w.Write([]byte{':'}) - w.Write(i) - w.Write([]byte{'\r', '\n'}) - return 0, nil +func (i IntVal) Write(w io.Writer) (int, error) { + return w.Write(i) +} + +func Int(i int) value { + s := strconv.Itoa(i) + b := make(ErrorVal, len(s)+3) + b[0] = start_integer + copy(b[1:], s) + b[len(b)-2] = '\r' + b[len(b)-1] = '\n' + return b } // ------------------------------------------------------------------------------ diff --git a/values_test.go b/values_test.go index 37f1ad3..f439fb8 100644 --- a/values_test.go +++ b/values_test.go @@ -56,13 +56,13 @@ var valueTests = []valueTest{ {"$4\r\netsy\r\n", BulkString("etsy")}, {"$12\r\nSaskatchewan\r\n", BulkString("Saskatchewan")}, - // {":0", Integer(0)}, - // {":1", Integer(1)}, - // {":-1", Integer(-1)}, - // {":12345", Integer(12345)}, - // {":-12345", Integer(-12345)}, - // {":9223372036854775807", Integer(9223372036854775807)}, // int64 max - // {":-9223372036854775808", Integer(-9223372036854775808)}, // int64 min + {":0\r\n", Int(0)}, + {":1\r\n", Int(1)}, + {":-1\r\n", Int(-1)}, + {":12345\r\n", Int(12345)}, + {":-12345\r\n", Int(-12345)}, + {":9223372036854775807\r\n", Int(9223372036854775807)}, // int64 max + {":-9223372036854775808\r\n", Int(-9223372036854775808)}, // int64 min {"+hello\r\n+extra\r\n", String("hello")}, {"+one two\r\n+extra\r\n", String("one two")}, // intermediate space @@ -74,13 +74,13 @@ var valueTests = []valueTest{ {"-one two \r\n+extra\r\n", Error("one two ")}, // trailing space {"- one two\r\n+extra\r\n", Error(" one two")}, // leading space - // {":0\r\n+extra\r\n", Integer(0)}, - // {":1\r\n+extra\r\n", Integer(1)}, - // {":-1\r\n+extra\r\n", Integer(-1)}, - // {":12345\r\n+extra\r\n", Integer(12345)}, - // {":-12345\r\n+extra\r\n", Integer(-12345)}, - // {":9223372036854775807\r\n+extra\r\n", Integer(9223372036854775807)}, // int64 max - // {":-9223372036854775808\r\n+extra\r\n", Integer(-9223372036854775808)}, // int64 min + {":0\r\n+extra\r\n", Int(0)}, + {":1\r\n+extra\r\n", Int(1)}, + {":-1\r\n+extra\r\n", Int(-1)}, + {":12345\r\n+extra\r\n", Int(12345)}, + {":-12345\r\n+extra\r\n", Int(-12345)}, + {":9223372036854775807\r\n+extra\r\n", Int(9223372036854775807)}, // int64 max + {":-9223372036854775808\r\n+extra\r\n", Int(-9223372036854775808)}, // int64 min {"*-1\r\n", nil}, // nil array // {"*0\r\n", Array{}}, // is this a thing? I have no idea. @@ -100,7 +100,7 @@ type streamTest []interface{} var streamTests = []streamTest{ {"+hello\r\n", String("hello")}, - // {":1\r\n:2\r\n:3\r\n", Integer(1), Integer(2), Integer(3)}, + {":1\r\n:2\r\n:3\r\n", Int(1), Int(2), Int(3)}, // {"*0\r\n", Array{}}, // {"*1\r\n+one\r\n", Array{String("one")}}, // {"*2\r\n+one\r\n+two\r\n", Array{String("one"), String("two")}},