diff --git a/append.go b/append.go index 422f24d..c9397a0 100644 --- a/append.go +++ b/append.go @@ -312,3 +312,39 @@ func AppendTile38(b []byte, data []byte) []byte { func AppendNull(b []byte) []byte { return append(b, '$', '-', '1', '\r', '\n') } + +// AppendBulkFloat appends a float64, as bulk bytes. +func AppendBulkFloat(b []byte, f float64) []byte { + mark1 := len(b) + b = strconv.AppendFloat(b, f, 'f', -1, 64) + mark2 := len(b) + b = AppendBulk(b, b[mark1:mark2]) + mark3 := len(b) + copy(b[mark1:], b[mark2:]) + b = b[:mark1+(mark3-mark2)] + return b +} + +// AppendBulkInt appends an int64, as bulk bytes. +func AppendBulkInt(b []byte, x int64) []byte { + mark1 := len(b) + b = strconv.AppendInt(b, x, 10) + mark2 := len(b) + b = AppendBulk(b, b[mark1:mark2]) + mark3 := len(b) + copy(b[mark1:], b[mark2:]) + b = b[:mark1+(mark3-mark2)] + return b +} + +// AppendBulkUint appends an uint64, as bulk bytes. +func AppendBulkUint(b []byte, x uint64) []byte { + mark1 := len(b) + b = strconv.AppendUint(b, x, 10) + mark2 := len(b) + b = AppendBulk(b, b[mark1:mark2]) + mark3 := len(b) + copy(b[mark1:], b[mark2:]) + b = b[:mark1+(mark3-mark2)] + return b +} diff --git a/append_test.go b/append_test.go index 238b1e4..bfa8d86 100644 --- a/append_test.go +++ b/append_test.go @@ -92,3 +92,36 @@ func TestNextCommand(t *testing.T) { } } } + +func TestAppendBulkFloat(t *testing.T) { + var b []byte + b = AppendString(b, "HELLO") + b = AppendBulkFloat(b, 9.123192839) + b = AppendString(b, "HELLO") + exp := "+HELLO\r\n$11\r\n9.123192839\r\n+HELLO\r\n" + if string(b) != exp { + t.Fatalf("expected '%s', got '%s'", exp, b) + } +} + +func TestAppendBulkInt(t *testing.T) { + var b []byte + b = AppendString(b, "HELLO") + b = AppendBulkInt(b, -9182739137) + b = AppendString(b, "HELLO") + exp := "+HELLO\r\n$11\r\n-9182739137\r\n+HELLO\r\n" + if string(b) != exp { + t.Fatalf("expected '%s', got '%s'", exp, b) + } +} + +func TestAppendBulkUint(t *testing.T) { + var b []byte + b = AppendString(b, "HELLO") + b = AppendBulkInt(b, 91827391370) + b = AppendString(b, "HELLO") + exp := "+HELLO\r\n$11\r\n91827391370\r\n+HELLO\r\n" + if string(b) != exp { + t.Fatalf("expected '%s', got '%s'", exp, b) + } +}