From 3d217ed5ff0df1f9bddc989b0cce71f210529674 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?rich=CE=9Brd?= Date: Wed, 8 Nov 2023 12:09:10 -0400 Subject: [PATCH] fix: WakuMessage json encoding (#880) --- flake.nix | 2 +- waku/v2/protocol/pb/codec.go | 29 +++++++++++++++++++++++++++++ waku/v2/protocol/pb/validation.go | 18 ------------------ 3 files changed, 30 insertions(+), 19 deletions(-) create mode 100644 waku/v2/protocol/pb/codec.go diff --git a/flake.nix b/flake.nix index d900d0ab..07d4c860 100644 --- a/flake.nix +++ b/flake.nix @@ -29,7 +29,7 @@ ]; doCheck = false; # FIXME: This needs to be manually changed when updating modules. - vendorSha256 = "sha256-4xChSKAkwwrFp5/ZMnhtvsR4drVfw1cLE3YXwVHeW0A="; + vendorSha256 = "sha256-1m5byn1CVD8Awzbo9XY94FgitC+uetTfon/8bBh5DiE="; # Fix for 'nix run' trying to execute 'go-waku'. meta = { mainProgram = "waku"; }; }; diff --git a/waku/v2/protocol/pb/codec.go b/waku/v2/protocol/pb/codec.go new file mode 100644 index 00000000..dd0c143f --- /dev/null +++ b/waku/v2/protocol/pb/codec.go @@ -0,0 +1,29 @@ +package pb + +import ( + "google.golang.org/protobuf/encoding/protojson" + "google.golang.org/protobuf/proto" +) + +func (m *WakuMessage) MarshalJSON() ([]byte, error) { + return (protojson.MarshalOptions{}).Marshal(m) +} + +func Unmarshal(data []byte) (*WakuMessage, error) { + msg := &WakuMessage{} + err := proto.Unmarshal(data, msg) + if err != nil { + return nil, err + } + + err = msg.Validate() + if err != nil { + return nil, err + } + + return msg, nil +} + +func (m *WakuMessage) UnmarshalJSON(data []byte) error { + return (protojson.UnmarshalOptions{}).Unmarshal(data, m) +} diff --git a/waku/v2/protocol/pb/validation.go b/waku/v2/protocol/pb/validation.go index fb1e000b..89bc788a 100644 --- a/waku/v2/protocol/pb/validation.go +++ b/waku/v2/protocol/pb/validation.go @@ -2,8 +2,6 @@ package pb import ( "errors" - - "google.golang.org/protobuf/proto" ) const MaxMetaAttrLength = 64 @@ -29,19 +27,3 @@ func (msg *WakuMessage) Validate() error { return nil } - -func Unmarshal(data []byte) (*WakuMessage, error) { - msg := &WakuMessage{} - err := proto.Unmarshal(data, msg) - if err != nil { - return nil, err - } - - err = msg.Validate() - if err != nil { - return nil, err - } - - return msg, nil - -}