From 757eb8f4c13012e9ab0a099e88aba01aae24663e Mon Sep 17 00:00:00 2001 From: Joel Wetzell Date: Sun, 15 Dec 2024 23:27:45 -0600 Subject: [PATCH] split message functions out to separate file --- pkg/osc/message.go | 58 ++++++++++++++++++++++++ pkg/osc/{osc_test.go => message_test.go} | 8 ++-- pkg/osc/osc.go | 49 -------------------- 3 files changed, 62 insertions(+), 53 deletions(-) create mode 100644 pkg/osc/message.go rename pkg/osc/{osc_test.go => message_test.go} (98%) diff --git a/pkg/osc/message.go b/pkg/osc/message.go new file mode 100644 index 0000000..a590d10 --- /dev/null +++ b/pkg/osc/message.go @@ -0,0 +1,58 @@ +package osc + +import ( + "errors" + "strings" +) + +func MessageToBytes(message OSCMessage) []byte { + //TODO(jwetzell): add error handling + oscBuffer := []byte{} + + oscBuffer = append(oscBuffer, stringToOSCBytes(message.Address)...) + + var sb strings.Builder + + sb.WriteString(",") + + for _, arg := range message.Args { + sb.WriteString(arg.Type) + } + + oscBuffer = append(oscBuffer, stringToOSCBytes(sb.String())...) + oscBuffer = append(oscBuffer, argsToBuffer(message.Args)...) + + return oscBuffer +} + +func MessageFromBytes(bytes []byte) (OSCMessage, error) { + address, typeAndArgBytes := readOSCString(bytes) + + if address[0] != 47 { + return OSCMessage{}, errors.New("OSC Message address must start with /") + } + + oscMessage := OSCMessage{ + Address: address, + Args: []OSCArg{}, + } + + typeString, argBytes := readOSCString(typeAndArgBytes) + + for index, oscType := range typeString { + if index == 0 { + if oscType != ',' { + return OSCMessage{}, errors.New("type string is malformed") + } + } else { + oscArg, remainingBytes, error := readOSCArg(argBytes, string(oscType)) + if error != nil { + return oscMessage, error + } + argBytes = remainingBytes + oscMessage.Args = append(oscMessage.Args, oscArg) + } + } + + return oscMessage, nil +} diff --git a/pkg/osc/osc_test.go b/pkg/osc/message_test.go similarity index 98% rename from pkg/osc/osc_test.go rename to pkg/osc/message_test.go index c6da803..c4e6352 100644 --- a/pkg/osc/osc_test.go +++ b/pkg/osc/message_test.go @@ -9,7 +9,7 @@ import ( // TestHelloName calls greetings.Hello with a name, checking // for a valid return value. -func TestOSCEncoding(t *testing.T) { +func TestOSCMessageEncoding(t *testing.T) { testCases := []struct { description string @@ -131,7 +131,7 @@ func TestOSCEncoding(t *testing.T) { for _, testCase := range testCases { - actual := ToBytes(testCase.message) + actual := MessageToBytes(testCase.message) if !reflect.DeepEqual(actual, testCase.expected) { t.Errorf("Test '%s' failed to encode properly", testCase.description) @@ -142,7 +142,7 @@ func TestOSCEncoding(t *testing.T) { } -func TestOSCDecoding(t *testing.T) { +func TestOSCMessageDecoding(t *testing.T) { testCases := []struct { description string bytes []byte @@ -265,7 +265,7 @@ func TestOSCDecoding(t *testing.T) { for _, testCase := range testCases { - actual, error := FromBytes(testCase.bytes) + actual, error := MessageFromBytes(testCase.bytes) if error != nil { fmt.Println(error) diff --git a/pkg/osc/osc.go b/pkg/osc/osc.go index 7ecd500..c655a15 100644 --- a/pkg/osc/osc.go +++ b/pkg/osc/osc.go @@ -164,26 +164,6 @@ func argsToBuffer(args []OSCArg) []byte { return argBuffers } -func ToBytes(message OSCMessage) []byte { - //TODO(jwetzell): add error handling - oscBuffer := []byte{} - - oscBuffer = append(oscBuffer, stringToOSCBytes(message.Address)...) - - var sb strings.Builder - - sb.WriteString(",") - - for _, arg := range message.Args { - sb.WriteString(arg.Type) - } - - oscBuffer = append(oscBuffer, stringToOSCBytes(sb.String())...) - oscBuffer = append(oscBuffer, argsToBuffer(message.Args)...) - - return oscBuffer -} - func readOSCString(bytes []byte) (string, []byte) { //TODO(jwetzell): add error handling oscString := "" @@ -350,32 +330,3 @@ func readOSCArg(bytes []byte, oscType string) (OSCArg, []byte, error) { } return oscArg, remainingBytes, readArgError } - -func FromBytes(bytes []byte) (OSCMessage, error) { - //TODO(jwetzell): add Message and Bundle support - address, typeAndArgBytes := readOSCString(bytes) - - oscMessage := OSCMessage{ - Address: address, - Args: []OSCArg{}, - } - - typeString, argBytes := readOSCString(typeAndArgBytes) - - for index, oscType := range typeString { - if index == 0 { - if oscType != ',' { - return OSCMessage{}, errors.New("type string is malformed") - } - } else { - oscArg, remainingBytes, error := readOSCArg(argBytes, string(oscType)) - if error != nil { - return oscMessage, error - } - argBytes = remainingBytes - oscMessage.Args = append(oscMessage.Args, oscArg) - } - } - - return oscMessage, nil -}