diff options
Diffstat (limited to 'vendor/github.com/Rhymen/go-whatsapp/binary/node.go')
-rw-r--r-- | vendor/github.com/Rhymen/go-whatsapp/binary/node.go | 106 |
1 files changed, 0 insertions, 106 deletions
diff --git a/vendor/github.com/Rhymen/go-whatsapp/binary/node.go b/vendor/github.com/Rhymen/go-whatsapp/binary/node.go deleted file mode 100644 index 66b28d88..00000000 --- a/vendor/github.com/Rhymen/go-whatsapp/binary/node.go +++ /dev/null @@ -1,106 +0,0 @@ -package binary - -import ( - "fmt" - pb "github.com/Rhymen/go-whatsapp/binary/proto" - "github.com/golang/protobuf/proto" -) - -type Node struct { - Description string - Attributes map[string]string - Content interface{} -} - -func Marshal(n Node) ([]byte, error) { - if n.Attributes != nil && n.Content != nil { - a, err := marshalMessageArray(n.Content.([]interface{})) - if err != nil { - return nil, err - } - n.Content = a - } - - w := NewEncoder() - if err := w.WriteNode(n); err != nil { - return nil, err - } - - return w.GetData(), nil -} - -func marshalMessageArray(messages []interface{}) ([]Node, error) { - ret := make([]Node, len(messages)) - - for i, m := range messages { - if wmi, ok := m.(*pb.WebMessageInfo); ok { - b, err := marshalWebMessageInfo(wmi) - if err != nil { - return nil, nil - } - ret[i] = Node{"message", nil, b} - } else { - ret[i], ok = m.(Node) - if !ok { - return nil, fmt.Errorf("invalid Node") - } - } - } - - return ret, nil -} - -func marshalWebMessageInfo(p *pb.WebMessageInfo) ([]byte, error) { - b, err := proto.Marshal(p) - if err != nil { - return nil, err - } - return b, nil -} - -func Unmarshal(data []byte) (*Node, error) { - r := NewDecoder(data) - n, err := r.ReadNode() - if err != nil { - return nil, err - } - - if n != nil && n.Attributes != nil && n.Content != nil { - nContent, ok := n.Content.([]Node) - if ok { - n.Content, err = unmarshalMessageArray(nContent) - if err != nil { - return nil, err - } - } - } - - return n, nil -} - -func unmarshalMessageArray(messages []Node) ([]interface{}, error) { - ret := make([]interface{}, len(messages)) - - for i, msg := range messages { - if msg.Description == "message" { - info, err := unmarshalWebMessageInfo(msg.Content.([]byte)) - if err != nil { - return nil, err - } - ret[i] = info - } else { - ret[i] = msg - } - } - - return ret, nil -} - -func unmarshalWebMessageInfo(msg []byte) (*pb.WebMessageInfo, error) { - message := &pb.WebMessageInfo{} - err := proto.Unmarshal(msg, message) - if err != nil { - return nil, err - } - return message, nil -} |