decode.go 792 B

1234567891011121314151617181920212223242526272829303132
  1. package armadilloutil
  2. import (
  3. "errors"
  4. "fmt"
  5. "google.golang.org/protobuf/proto"
  6. "git.bobomao.top/joey/whatsmeow/proto/waCommon"
  7. )
  8. var ErrUnsupportedVersion = errors.New("unsupported subprotocol version")
  9. func Unmarshal[T proto.Message](into T, msg *waCommon.SubProtocol, expectedVersion int32) (T, error) {
  10. if msg.GetVersion() != expectedVersion {
  11. return into, fmt.Errorf("%w %d in %T (expected %d)", ErrUnsupportedVersion, msg.GetVersion(), into, expectedVersion)
  12. }
  13. err := proto.Unmarshal(msg.GetPayload(), into)
  14. return into, err
  15. }
  16. func Marshal[T proto.Message](msg T, version int32) (*waCommon.SubProtocol, error) {
  17. payload, err := proto.Marshal(msg)
  18. if err != nil {
  19. return nil, err
  20. }
  21. return &waCommon.SubProtocol{
  22. Payload: payload,
  23. Version: &version,
  24. }, nil
  25. }