Initial commit
This commit is contained in:
59
pkg/message/parser.go
Normal file
59
pkg/message/parser.go
Normal file
@@ -0,0 +1,59 @@
|
||||
package message
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"errors"
|
||||
"fmt"
|
||||
"reflect"
|
||||
)
|
||||
|
||||
func ParseRequest(msg []byte) (Request, error) {
|
||||
request, err := Parse(msg)
|
||||
if err != nil {
|
||||
return request, err
|
||||
}
|
||||
|
||||
return request, nil
|
||||
}
|
||||
|
||||
func Parse(msg []byte) (Request, error) {
|
||||
var v map[string]interface{}
|
||||
var parsed Request
|
||||
|
||||
if err := json.Unmarshal(msg, &v); err != nil {
|
||||
return parsed, fmt.Errorf("Could not parse message: %w", err)
|
||||
}
|
||||
|
||||
switch v["event"] {
|
||||
case "subscribe":
|
||||
parsed.Method = "subscribe"
|
||||
streams, ok := v["streams"]
|
||||
if !ok {
|
||||
return parsed, fmt.Errorf("No streams provided")
|
||||
}
|
||||
switch reflect.TypeOf(streams).Kind() {
|
||||
case reflect.Slice:
|
||||
streams := reflect.ValueOf(v["streams"])
|
||||
for i := 0; i < streams.Len(); i++ {
|
||||
parsed.Streams = append(parsed.Streams, streams.Index(i).Interface().(string))
|
||||
}
|
||||
}
|
||||
case "unsubscribe":
|
||||
parsed.Method = "unsubscribe"
|
||||
streams, ok := v["streams"]
|
||||
if !ok {
|
||||
return parsed, fmt.Errorf("No streams provided")
|
||||
}
|
||||
switch reflect.TypeOf(streams).Kind() {
|
||||
case reflect.Slice:
|
||||
streams := reflect.ValueOf(v["streams"])
|
||||
for i := 0; i < streams.Len(); i++ {
|
||||
parsed.Streams = append(parsed.Streams, streams.Index(i).Interface().(string))
|
||||
}
|
||||
}
|
||||
default:
|
||||
return parsed, errors.New("Could not parse Type: Invalid event")
|
||||
}
|
||||
|
||||
return parsed, nil
|
||||
}
|
||||
Reference in New Issue
Block a user