diff --git a/values.go b/values.go new file mode 100644 index 0000000..52209da --- /dev/null +++ b/values.go @@ -0,0 +1,35 @@ +package main + +import ( + "fmt" + "strings" +) + +var ( + start_string byte = '+' + start_error byte = '-' + start_integer byte = ':' + start_bulkstring byte = '$' + start_array byte = '*' +) + +type value interface { +} + +type simpleString string + +func readValue(b []byte) (value, error) { + if len(b) < 2 { + return nil, fmt.Errorf("unable to read redis protocol value: input is too small") + } + switch b[0] { + case start_string: + return readString(b[1:]) + default: + return nil, fmt.Errorf("unable to read redis protocol value: illegal start character: %c", b[0]) + } +} + +func readString(b []byte) (value, error) { + return simpleString(strings.Trim(string(b), "\r\n")), nil +} diff --git a/values_test.go b/values_test.go new file mode 100644 index 0000000..6e5c97f --- /dev/null +++ b/values_test.go @@ -0,0 +1,16 @@ +package main + +import ( + "testing" +) + +func TestSimpleString(t *testing.T) { + s, err := readValue([]byte(`+hello`)) + if err != nil { + t.Errorf("bad input: %v", err) + } + if s != simpleString("hello") { + t.Errorf("expected 'hello', got '%s'", s) + } +} +