From 605d84c4857459ce75d99da3dfbb076851d19b71 Mon Sep 17 00:00:00 2001 From: Tulir Asokan Date: Sat, 15 Jul 2023 15:56:55 +0300 Subject: [PATCH] Remove manual json marshaling step in pblite --- libgm/payload/receiveMessages.go | 8 +------- libgm/payload/registerRefresh.go | 9 +-------- libgm/payload/sendMessage.go | 7 +------ libgm/pblite/serialize.go | 21 +++++++++++---------- libgm/session_handler.go | 2 +- 5 files changed, 15 insertions(+), 32 deletions(-) diff --git a/libgm/payload/receiveMessages.go b/libgm/payload/receiveMessages.go index 90d1683..8233445 100644 --- a/libgm/payload/receiveMessages.go +++ b/libgm/payload/receiveMessages.go @@ -1,8 +1,6 @@ package payload import ( - "encoding/json" - "github.com/google/uuid" "go.mau.fi/mautrix-gmessages/libgm/binary" @@ -20,11 +18,7 @@ func ReceiveMessages(rpcKey []byte) ([]byte, string, error) { Unknown: &binary.ReceiveMessagesRequest_UnknownEmptyObject1{}, }, } - data, err := pblite.Serialize(payload.ProtoReflect()) - if err != nil { - return nil, "", err - } - jsonData, err := json.Marshal(data) + jsonData, err := pblite.Marshal(payload) if err != nil { return nil, "", err } diff --git a/libgm/payload/registerRefresh.go b/libgm/payload/registerRefresh.go index e710b08..25bc42a 100644 --- a/libgm/payload/registerRefresh.go +++ b/libgm/payload/registerRefresh.go @@ -1,8 +1,6 @@ package payload import ( - "encoding/json" - "go.mau.fi/mautrix-gmessages/libgm/binary" "go.mau.fi/mautrix-gmessages/libgm/pblite" ) @@ -21,15 +19,10 @@ func RegisterRefresh(sig []byte, requestID string, timestamp int64, browser *bin MessageType: 2, // hmm } - serialized, serializeErr := pblite.Serialize(payload.ProtoReflect()) + jsonMessage, serializeErr := pblite.Marshal(payload) if serializeErr != nil { return nil, serializeErr } - jsonMessage, marshalErr := json.Marshal(serialized) - if marshalErr != nil { - return nil, marshalErr - } - return jsonMessage, nil } diff --git a/libgm/payload/sendMessage.go b/libgm/payload/sendMessage.go index c9fe2fa..f822ebf 100644 --- a/libgm/payload/sendMessage.go +++ b/libgm/payload/sendMessage.go @@ -1,7 +1,6 @@ package payload import ( - "encoding/json" "fmt" "google.golang.org/protobuf/proto" @@ -113,15 +112,11 @@ func (sm *SendMessageBuilder) Build() ([]byte, error) { } sm.message.MessageData.ProtobufData = encodedMessage - messageProtoJSON, serializeErr := pblite.Serialize(sm.message.ProtoReflect()) + protoJSONBytes, serializeErr := pblite.Marshal(sm.message) if serializeErr != nil { panic(serializeErr) return nil, serializeErr } - protoJSONBytes, marshalErr := json.Marshal(messageProtoJSON) - if marshalErr != nil { - return nil, marshalErr - } return protoJSONBytes, nil } diff --git a/libgm/pblite/serialize.go b/libgm/pblite/serialize.go index e22d426..7bcf86b 100644 --- a/libgm/pblite/serialize.go +++ b/libgm/pblite/serialize.go @@ -82,7 +82,7 @@ func serializeOneOrList(fieldDescriptor protoreflect.FieldDescriptor, fieldValue func serializeOne(fieldDescriptor protoreflect.FieldDescriptor, fieldValue protoreflect.Value) (any, error) { switch fieldDescriptor.Kind() { case protoreflect.MessageKind: - serializedMsg, err := Serialize(fieldValue.Message().Interface().ProtoReflect()) + serializedMsg, err := SerializeToSlice(fieldValue.Message().Interface()) if err != nil { return nil, err } @@ -106,21 +106,22 @@ func serializeOne(fieldDescriptor protoreflect.FieldDescriptor, fieldValue proto } } -func Serialize(m protoreflect.Message) ([]any, error) { +func SerializeToSlice(msg proto.Message) ([]any, error) { + ref := msg.ProtoReflect() maxFieldNumber := 0 - for i := 0; i < m.Descriptor().Fields().Len(); i++ { - fieldNumber := int(m.Descriptor().Fields().Get(i).Number()) + for i := 0; i < ref.Descriptor().Fields().Len(); i++ { + fieldNumber := int(ref.Descriptor().Fields().Get(i).Number()) if fieldNumber > maxFieldNumber { maxFieldNumber = fieldNumber } } serialized := make([]any, maxFieldNumber) - for i := 0; i < m.Descriptor().Fields().Len(); i++ { - fieldDescriptor := m.Descriptor().Fields().Get(i) - fieldValue := m.Get(fieldDescriptor) + for i := 0; i < ref.Descriptor().Fields().Len(); i++ { + fieldDescriptor := ref.Descriptor().Fields().Get(i) + fieldValue := ref.Get(fieldDescriptor) fieldNumber := int(fieldDescriptor.Number()) - if !m.Has(fieldDescriptor) { + if !ref.Has(fieldDescriptor) { continue } serializedVal, err := serializeOneOrList(fieldDescriptor, fieldValue) @@ -133,8 +134,8 @@ func Serialize(m protoreflect.Message) ([]any, error) { return serialized, nil } -func SerializeToJSON(m proto.Message) ([]byte, error) { - serialized, err := Serialize(m.ProtoReflect()) +func Marshal(m proto.Message) ([]byte, error) { + serialized, err := SerializeToSlice(m) if err != nil { return nil, err } diff --git a/libgm/session_handler.go b/libgm/session_handler.go index 1c67473..6b81e8e 100644 --- a/libgm/session_handler.go +++ b/libgm/session_handler.go @@ -142,7 +142,7 @@ func (s *SessionHandler) sendAckRequest() { EmptyArr: &binary.EmptyArr{}, Acks: ackMessages, } - jsonData, err := pblite.SerializeToJSON(ackMessagePayload) + jsonData, err := pblite.Marshal(ackMessagePayload) if err != nil { panic(err) }