From 1cb6a70c37259ccf2244053289fde94460b30d82 Mon Sep 17 00:00:00 2001 From: boreq Date: Mon, 6 Mar 2023 18:51:32 +0100 Subject: [PATCH] Use jsoniter for all marshaling and unmarshaling We run on phones so every bit of performance matters to the users and clearly this library is much faster. This is easier than benchmarking everything. At this point we've proven it is a good idea. --- CHANGELOG.md | 3 ++- cmd/log-debugger/debugger/event.go | 3 ++- internal/fixtures/fixtures.go | 4 ++-- migrations/migrations.go | 4 ++-- service/adapters/badger/ban_list_repository.go | 6 +++--- service/adapters/migrations/badger_storage.go | 7 +++---- .../domain/feeds/content/transport/mapping_contact.go | 6 +++--- service/domain/feeds/content/transport/mapping_pub.go | 7 +++---- service/domain/feeds/content/transport/marshaler.go | 4 ++-- service/domain/feeds/formats/format_scuttlebutt.go | 5 +++-- service/domain/messages/blobs_createWants.go | 6 +++--- service/domain/messages/blobs_get.go | 11 +++++------ service/domain/messages/blobs_get_test.go | 2 +- service/domain/messages/create_history_stream.go | 2 +- service/domain/messages/ebt_replicate.go | 5 ++--- service/domain/messages/invite_use.go | 7 +++---- service/domain/messages/room_attendants.go | 6 +++--- service/domain/messages/room_listAliases.go | 7 +++---- service/domain/messages/room_metadata.go | 5 ++--- service/domain/messages/room_registerAlias.go | 4 ++-- service/domain/messages/room_registerAlias_test.go | 4 ++-- service/domain/messages/room_revokeAlias.go | 5 ++--- service/domain/messages/tunnel_connect.go | 9 ++++----- service/domain/transport/rpc/transport.go | 6 +++--- 24 files changed, 61 insertions(+), 67 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5cf13018..df3322bc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -20,7 +20,8 @@ ### Fixed -- ... +- Improved performance by using "github.com/json-iterator/go" instead of + "encoding/json". ### Security diff --git a/cmd/log-debugger/debugger/event.go b/cmd/log-debugger/debugger/event.go index 822fad22..19a82727 100644 --- a/cmd/log-debugger/debugger/event.go +++ b/cmd/log-debugger/debugger/event.go @@ -8,6 +8,7 @@ import ( "time" "github.com/boreq/errors" + jsoniter "github.com/json-iterator/go" "github.com/planetary-social/scuttlego/cmd/log-debugger/debugger/log" "github.com/planetary-social/scuttlego/logging" "github.com/planetary-social/scuttlego/service/domain/messages" @@ -143,7 +144,7 @@ func prettifyBody(body string) (string, error) { annotatedNotes[note.Ref().String()] = fmt.Sprintf("%s (sequence=%d, receive=%t replicate=%t)", string(b), note.Sequence(), note.Receive(), note.Replicate()) } - j, err := json.Marshal(annotatedNotes) + j, err := jsoniter.Marshal(annotatedNotes) if err != nil { return "", errors.Wrap(err, "error marshaling annotated notes") } diff --git a/internal/fixtures/fixtures.go b/internal/fixtures/fixtures.go index 82c21475..5970015d 100644 --- a/internal/fixtures/fixtures.go +++ b/internal/fixtures/fixtures.go @@ -4,7 +4,6 @@ import ( "context" cryptorand "crypto/rand" "encoding/base64" - "encoding/json" "fmt" "math" "math/rand" @@ -16,6 +15,7 @@ import ( "time" "github.com/dgraph-io/badger/v3" + jsoniter "github.com/json-iterator/go" "github.com/planetary-social/scuttlego/internal" "github.com/planetary-social/scuttlego/logging" "github.com/planetary-social/scuttlego/service/app/common" @@ -192,7 +192,7 @@ func SomeRawContent() message.RawContent { "type": SomeString(), SomeString(): SomeString(), } - j, err := json.Marshal(v) + j, err := jsoniter.Marshal(v) if err != nil { panic(err) } diff --git a/migrations/migrations.go b/migrations/migrations.go index d5ec9575..fcd4e860 100644 --- a/migrations/migrations.go +++ b/migrations/migrations.go @@ -2,11 +2,11 @@ package migrations import ( "context" - "encoding/json" "fmt" "github.com/boreq/errors" "github.com/hashicorp/go-multierror" + jsoniter "github.com/json-iterator/go" "github.com/planetary-social/scuttlego/internal" "github.com/planetary-social/scuttlego/logging" ) @@ -182,7 +182,7 @@ func (r Runner) runMigration(ctx context.Context, migration Migration, onRunning return errors.Wrap(err, "error loading state") } - humanReadableState, err := json.Marshal(state) + humanReadableState, err := jsoniter.Marshal(state) if err != nil { return errors.Wrap(err, "state json marshal error") } diff --git a/service/adapters/badger/ban_list_repository.go b/service/adapters/badger/ban_list_repository.go index 1b69d91b..6667c4e0 100644 --- a/service/adapters/badger/ban_list_repository.go +++ b/service/adapters/badger/ban_list_repository.go @@ -1,11 +1,11 @@ package badger import ( - "encoding/json" "fmt" "github.com/boreq/errors" "github.com/dgraph-io/badger/v3" + jsoniter "github.com/json-iterator/go" "github.com/planetary-social/scuttlego/service/adapters/badger/utils" "github.com/planetary-social/scuttlego/service/app/commands" "github.com/planetary-social/scuttlego/service/domain/bans" @@ -102,7 +102,7 @@ func (b BanListRepository) CreateFeedMapping(ref refs.Feed) error { bucket := b.mappingBucket() - v, err := json.Marshal(storedBannableRef{ + v, err := jsoniter.Marshal(storedBannableRef{ Typ: storedBannableRefTypeFeed, Ref: ref.String(), }) @@ -150,7 +150,7 @@ func (b BanListRepository) LookupMapping(hash bans.Hash) (commands.BannableRef, } var v storedBannableRef - if err := json.Unmarshal(value, &v); err != nil { + if err := jsoniter.Unmarshal(value, &v); err != nil { return commands.BannableRef{}, errors.Wrap(err, "unmarshal failed") } diff --git a/service/adapters/migrations/badger_storage.go b/service/adapters/migrations/badger_storage.go index 06cbe3c1..42004cc1 100644 --- a/service/adapters/migrations/badger_storage.go +++ b/service/adapters/migrations/badger_storage.go @@ -1,10 +1,9 @@ package migrations import ( - "encoding/json" - "github.com/boreq/errors" "github.com/dgraph-io/badger/v3" + jsoniter "github.com/json-iterator/go" "github.com/planetary-social/scuttlego/migrations" "github.com/planetary-social/scuttlego/service/adapters/badger/utils" ) @@ -42,7 +41,7 @@ func (b *BadgerStorage) LoadState(name string) (migrations.State, error) { return errors.Wrap(err, "error getting value") } - if err := json.Unmarshal(value, &state); err != nil { + if err := jsoniter.Unmarshal(value, &state); err != nil { return errors.Wrap(err, "error unmarshaling state") } @@ -58,7 +57,7 @@ func (b *BadgerStorage) LoadState(name string) (migrations.State, error) { } func (b *BadgerStorage) SaveState(name string, state migrations.State) error { - marshaledState, err := json.Marshal(state) + marshaledState, err := jsoniter.Marshal(state) if err != nil { return errors.Wrap(err, "error marshaling state") } diff --git a/service/domain/feeds/content/transport/mapping_contact.go b/service/domain/feeds/content/transport/mapping_contact.go index 2bfcca49..8afc2872 100644 --- a/service/domain/feeds/content/transport/mapping_contact.go +++ b/service/domain/feeds/content/transport/mapping_contact.go @@ -1,10 +1,10 @@ package transport import ( - "encoding/json" "fmt" "github.com/boreq/errors" + jsoniter "github.com/json-iterator/go" "github.com/planetary-social/scuttlego/internal" "github.com/planetary-social/scuttlego/service/domain/feeds/content/known" "github.com/planetary-social/scuttlego/service/domain/refs" @@ -24,12 +24,12 @@ var ContactMapping = MessageContentMapping{ return nil, errors.Wrap(err, "could not marshal contact action") } - return json.Marshal(t) + return jsoniter.Marshal(t) }, Unmarshal: func(b []byte) (known.KnownMessageContent, error) { var t transportContact - if err := json.Unmarshal(b, &t); err != nil { + if err := jsoniter.Unmarshal(b, &t); err != nil { return nil, errors.Wrap(err, "json unmarshal failed") } diff --git a/service/domain/feeds/content/transport/mapping_pub.go b/service/domain/feeds/content/transport/mapping_pub.go index 6fb67f41..e68d93f4 100644 --- a/service/domain/feeds/content/transport/mapping_pub.go +++ b/service/domain/feeds/content/transport/mapping_pub.go @@ -1,9 +1,8 @@ package transport import ( - "encoding/json" - "github.com/boreq/errors" + jsoniter "github.com/json-iterator/go" "github.com/planetary-social/scuttlego/service/domain/feeds/content/known" "github.com/planetary-social/scuttlego/service/domain/refs" ) @@ -21,12 +20,12 @@ var PubMapping = MessageContentMapping{ }, } - return json.Marshal(t) + return jsoniter.Marshal(t) }, Unmarshal: func(b []byte) (known.KnownMessageContent, error) { var t transportPub - if err := json.Unmarshal(b, &t); err != nil { + if err := jsoniter.Unmarshal(b, &t); err != nil { return nil, errors.Wrap(err, "json unmarshal failed") } diff --git a/service/domain/feeds/content/transport/marshaler.go b/service/domain/feeds/content/transport/marshaler.go index 137ce217..1831615c 100644 --- a/service/domain/feeds/content/transport/marshaler.go +++ b/service/domain/feeds/content/transport/marshaler.go @@ -1,11 +1,11 @@ package transport import ( - "encoding/json" "fmt" "strings" "github.com/boreq/errors" + jsoniter "github.com/json-iterator/go" "github.com/planetary-social/scuttlego/logging" "github.com/planetary-social/scuttlego/service/domain/feeds/content" "github.com/planetary-social/scuttlego/service/domain/feeds/content/known" @@ -74,7 +74,7 @@ func (m *Marshaler) Unmarshal(b message.RawContent) (known.KnownMessageContent, func (m *Marshaler) identifyContentType(b message.RawContent) (known.MessageContentType, error) { var typ MessageContentType - if err := json.Unmarshal(b.Bytes(), &typ); err != nil { + if err := jsoniter.Unmarshal(b.Bytes(), &typ); err != nil { return "", errors.Wrap(err, "json unmarshal of message content type failed") } if typ.MessageContentType == "" { diff --git a/service/domain/feeds/formats/format_scuttlebutt.go b/service/domain/feeds/formats/format_scuttlebutt.go index 0a2077d3..ea16f827 100644 --- a/service/domain/feeds/formats/format_scuttlebutt.go +++ b/service/domain/feeds/formats/format_scuttlebutt.go @@ -5,6 +5,7 @@ import ( "time" "github.com/boreq/errors" + jsoniter "github.com/json-iterator/go" "github.com/planetary-social/scuttlego/service/domain/feeds" "github.com/planetary-social/scuttlego/service/domain/feeds/message" "github.com/planetary-social/scuttlego/service/domain/identity" @@ -91,7 +92,7 @@ func (s *Scuttlebutt) Load(verifiedRawMessage message.VerifiedRawMessage) (messa } var dmsg legacy.DeserializedMessage - if err := json.Unmarshal(verifiedRawMessage.Bytes(), &dmsg); err != nil { + if err := jsoniter.Unmarshal(verifiedRawMessage.Bytes(), &dmsg); err != nil { return message.MessageWithoutId{}, errors.Wrap(err, "json unmarshal failed") } @@ -100,7 +101,7 @@ func (s *Scuttlebutt) Load(verifiedRawMessage message.VerifiedRawMessage) (messa func (s *Scuttlebutt) Peek(raw message.RawMessage) (feeds.PeekedMessage, error) { var dmsg peekedSsbMessage - if err := json.Unmarshal(raw.Bytes(), &dmsg); err != nil { + if err := jsoniter.Unmarshal(raw.Bytes(), &dmsg); err != nil { return feeds.PeekedMessage{}, errors.Wrap(err, "json unmarshal failed") } diff --git a/service/domain/messages/blobs_createWants.go b/service/domain/messages/blobs_createWants.go index ee980553..c75b0af4 100644 --- a/service/domain/messages/blobs_createWants.go +++ b/service/domain/messages/blobs_createWants.go @@ -1,11 +1,11 @@ package messages import ( - "encoding/json" "fmt" "strings" "github.com/boreq/errors" + jsoniter "github.com/json-iterator/go" "github.com/planetary-social/scuttlego/service/domain/blobs" "github.com/planetary-social/scuttlego/service/domain/refs" "github.com/planetary-social/scuttlego/service/domain/transport/rpc" @@ -33,7 +33,7 @@ type BlobsCreateWantsResponse struct { func NewBlobsCreateWantsResponseFromBytes(b []byte) (BlobsCreateWantsResponse, error) { m := make(blobsCreateWantsResponseTransport) - if err := json.Unmarshal(b, &m); err != nil { + if err := jsoniter.Unmarshal(b, &m); err != nil { return BlobsCreateWantsResponse{}, errors.Wrap(err, "json unmarshal failed") } @@ -99,7 +99,7 @@ func (resp BlobsCreateWantsResponse) MarshalJSON() ([]byte, error) { panic("not all cases are covered") } - return json.Marshal(m) + return jsoniter.Marshal(m) } type blobsCreateWantsResponseTransport map[string]int64 diff --git a/service/domain/messages/blobs_get.go b/service/domain/messages/blobs_get.go index bb9a20c9..73bd22f0 100644 --- a/service/domain/messages/blobs_get.go +++ b/service/domain/messages/blobs_get.go @@ -1,10 +1,9 @@ package messages import ( - "encoding/json" - "github.com/boreq/errors" "github.com/hashicorp/go-multierror" + jsoniter "github.com/json-iterator/go" "github.com/planetary-social/scuttlego/service/domain/blobs" "github.com/planetary-social/scuttlego/service/domain/refs" "github.com/planetary-social/scuttlego/service/domain/transport/rpc" @@ -76,7 +75,7 @@ func NewBlobsGetArgumentsFromBytes(b []byte) (BlobsGetArguments, error) { func newBlobsGetArgumentsFromBytesString(b []byte) (BlobsGetArguments, error) { var args []string - if err := json.Unmarshal(b, &args); err != nil { + if err := jsoniter.Unmarshal(b, &args); err != nil { return BlobsGetArguments{}, errors.Wrap(err, "json unmarshal failed") } @@ -95,7 +94,7 @@ func newBlobsGetArgumentsFromBytesString(b []byte) (BlobsGetArguments, error) { func newBlobsGetArgumentsFromBytesObject(b []byte) (BlobsGetArguments, error) { var args []blobsGetArgumentsTransport - if err := json.Unmarshal(b, &args); err != nil { + if err := jsoniter.Unmarshal(b, &args); err != nil { return BlobsGetArguments{}, errors.Wrap(err, "json unmarshal failed") } @@ -149,7 +148,7 @@ func (a BlobsGetArguments) MarshalJSON() ([]byte, error) { a.hash.String(), } - return json.Marshal(args) + return jsoniter.Marshal(args) } args := []blobsGetArgumentsTransport{ @@ -168,7 +167,7 @@ func (a BlobsGetArguments) MarshalJSON() ([]byte, error) { args[0].Max = &v } - return json.Marshal(args) + return jsoniter.Marshal(args) } func (a BlobsGetArguments) Hash() refs.Blob { diff --git a/service/domain/messages/blobs_get_test.go b/service/domain/messages/blobs_get_test.go index 6318d131..2eaeabb1 100644 --- a/service/domain/messages/blobs_get_test.go +++ b/service/domain/messages/blobs_get_test.go @@ -136,7 +136,7 @@ func TestNewBlobsGetArgumentsFromBytesObject(t *testing.T) { { Name: "different_key_and_hash", Payload: `[{"hash":"&2b3zi3R00MZ6X+9jXgZMCS6/N1W1PGM2leOEKvpKQjA=.sha256","key":"&eb3zi3R00MZ6X+9jXgZMCS6/N1W1PGM2leOEKvpKQjA=.sha256","max":5242880}]`, - ExpectedError: errors.New("2 errors occurred:\n\t* error unmarshaling arguments as string: json unmarshal failed: json: cannot unmarshal object into Go value of type string\n\t* error unmarshaling arguments as object: could not create a blob ref: key and hash are set but have different values\n\n"), + ExpectedError: errors.New("2 errors occurred:\n\t* error unmarshaling arguments as string: json unmarshal failed: []string: ReadString: expects \" or n, but found {, error found in #2 byte of ...|[{\"hash\":\"&2|..., bigger context ...|[{\"hash\":\"&2b3zi3R00MZ6X+9jXgZMCS6/N1W1PGM2leOEKvpKQ|...\n\t* error unmarshaling arguments as object: could not create a blob ref: key and hash are set but have different values\n\n"), }, } diff --git a/service/domain/messages/create_history_stream.go b/service/domain/messages/create_history_stream.go index 766d5d03..2db50512 100644 --- a/service/domain/messages/create_history_stream.go +++ b/service/domain/messages/create_history_stream.go @@ -177,7 +177,7 @@ func (c CreateHistoryStreamResponse) MarshalJSON() ([]byte, error) { Value: c.value.Bytes(), Timestamp: c.timestamp.UnixMilli(), } - return json.Marshal(transport) + return jsoniter.Marshal(transport) } func sequencePointerToIntPointer(sequence *message.Sequence) *int { diff --git a/service/domain/messages/ebt_replicate.go b/service/domain/messages/ebt_replicate.go index 0b069f76..3d3d1935 100644 --- a/service/domain/messages/ebt_replicate.go +++ b/service/domain/messages/ebt_replicate.go @@ -1,7 +1,6 @@ package messages import ( - "encoding/json" "strconv" "github.com/boreq/errors" @@ -52,7 +51,7 @@ func NewEbtReplicateArguments( func NewEbtReplicateArgumentsFromBytes(b []byte) (EbtReplicateArguments, error) { var args []ebtReplicateArgumentsTransport - if err := json.Unmarshal(b, &args); err != nil { + if err := jsoniter.Unmarshal(b, &args); err != nil { return EbtReplicateArguments{}, errors.Wrap(err, "json unmarshal failed") } @@ -92,7 +91,7 @@ func (c EbtReplicateArguments) MarshalJSON() ([]byte, error) { Format: f, }, } - return json.Marshal(transport) + return jsoniter.Marshal(transport) } const ebtReplicateFormatTransportClassic = "classic" diff --git a/service/domain/messages/invite_use.go b/service/domain/messages/invite_use.go index 5f1fe453..ca2c36ee 100644 --- a/service/domain/messages/invite_use.go +++ b/service/domain/messages/invite_use.go @@ -1,9 +1,8 @@ package messages import ( - "encoding/json" - "github.com/boreq/errors" + jsoniter "github.com/json-iterator/go" "github.com/planetary-social/scuttlego/service/domain/refs" "github.com/planetary-social/scuttlego/service/domain/transport/rpc" ) @@ -42,7 +41,7 @@ func NewInviteUseArguments(feed refs.Identity) (InviteUseArguments, error) { func NewInviteUseArgumentsFromBytes(b []byte) (InviteUseArguments, error) { var args []inviteUseArgumentsTransport - if err := json.Unmarshal(b, &args); err != nil { + if err := jsoniter.Unmarshal(b, &args); err != nil { return InviteUseArguments{}, errors.Wrap(err, "json unmarshal failed") } @@ -59,7 +58,7 @@ func NewInviteUseArgumentsFromBytes(b []byte) (InviteUseArguments, error) { } func (i InviteUseArguments) MarshalJSON() ([]byte, error) { - return json.Marshal([]inviteUseArgumentsTransport{ + return jsoniter.Marshal([]inviteUseArgumentsTransport{ { Feed: i.feed.String(), }, diff --git a/service/domain/messages/room_attendants.go b/service/domain/messages/room_attendants.go index 7bcdded5..5f138020 100644 --- a/service/domain/messages/room_attendants.go +++ b/service/domain/messages/room_attendants.go @@ -1,10 +1,10 @@ package messages import ( - "encoding/json" "fmt" "github.com/boreq/errors" + jsoniter "github.com/json-iterator/go" "github.com/planetary-social/scuttlego/service/domain/refs" "github.com/planetary-social/scuttlego/service/domain/transport/rpc" ) @@ -30,7 +30,7 @@ type RoomAttendantsResponseState struct { func NewRoomAttendantsResponseStateFromBytes(b []byte) (RoomAttendantsResponseState, error) { var transport roomAttendantsResponseStateTransport - if err := json.Unmarshal(b, &transport); err != nil { + if err := jsoniter.Unmarshal(b, &transport); err != nil { return RoomAttendantsResponseState{}, errors.Wrap(err, "json unmarshal failed") } @@ -65,7 +65,7 @@ type RoomAttendantsResponseJoinedOrLeft struct { func NewRoomAttendantsResponseJoinedOrLeftFromBytes(b []byte) (RoomAttendantsResponseJoinedOrLeft, error) { var transport roomAttendantsResponseJoinedOrLeftTransport - if err := json.Unmarshal(b, &transport); err != nil { + if err := jsoniter.Unmarshal(b, &transport); err != nil { return RoomAttendantsResponseJoinedOrLeft{}, errors.Wrap(err, "json unmarshal failed") } diff --git a/service/domain/messages/room_listAliases.go b/service/domain/messages/room_listAliases.go index 7da7b369..198081e9 100644 --- a/service/domain/messages/room_listAliases.go +++ b/service/domain/messages/room_listAliases.go @@ -1,9 +1,8 @@ package messages import ( - "encoding/json" - "github.com/boreq/errors" + jsoniter "github.com/json-iterator/go" "github.com/planetary-social/scuttlego/service/domain/refs" "github.com/planetary-social/scuttlego/service/domain/rooms/aliases" "github.com/planetary-social/scuttlego/service/domain/transport/rpc" @@ -46,7 +45,7 @@ func NewRoomListAliasesArguments( } func (i RoomListAliasesArguments) MarshalJSON() ([]byte, error) { - return json.Marshal([]string{ + return jsoniter.Marshal([]string{ i.identity.String(), }) } @@ -57,7 +56,7 @@ type RoomListAliasesResponse struct { func NewRoomListAliasesResponseFromBytes(b []byte) (RoomListAliasesResponse, error) { var aliasesAsStrings []string - if err := json.Unmarshal(b, &aliasesAsStrings); err != nil { + if err := jsoniter.Unmarshal(b, &aliasesAsStrings); err != nil { return RoomListAliasesResponse{}, errors.Wrap(err, "json unmarshal failed") } diff --git a/service/domain/messages/room_metadata.go b/service/domain/messages/room_metadata.go index 94a3d5ac..1c117f1d 100644 --- a/service/domain/messages/room_metadata.go +++ b/service/domain/messages/room_metadata.go @@ -1,9 +1,8 @@ package messages import ( - "encoding/json" - "github.com/boreq/errors" + jsoniter "github.com/json-iterator/go" "github.com/planetary-social/scuttlego/service/domain/rooms/features" "github.com/planetary-social/scuttlego/service/domain/transport/rpc" ) @@ -30,7 +29,7 @@ type RoomMetadataResponse struct { func NewRoomMetadataResponseFromBytes(b []byte) (RoomMetadataResponse, error) { var transport roomMetadataTransport - if err := json.Unmarshal(b, &transport); err != nil { + if err := jsoniter.Unmarshal(b, &transport); err != nil { return RoomMetadataResponse{}, errors.Wrap(err, "json unmarshal failed") } diff --git a/service/domain/messages/room_registerAlias.go b/service/domain/messages/room_registerAlias.go index 78732e09..9578ca96 100644 --- a/service/domain/messages/room_registerAlias.go +++ b/service/domain/messages/room_registerAlias.go @@ -2,9 +2,9 @@ package messages import ( "encoding/base64" - "encoding/json" "github.com/boreq/errors" + jsoniter "github.com/json-iterator/go" "github.com/planetary-social/scuttlego/service/domain/rooms/aliases" "github.com/planetary-social/scuttlego/service/domain/transport/rpc" ) @@ -53,7 +53,7 @@ func NewRoomRegisterAliasArguments( } func (i RoomRegisterAliasArguments) MarshalJSON() ([]byte, error) { - return json.Marshal([]string{ + return jsoniter.Marshal([]string{ i.alias.String(), base64.StdEncoding.EncodeToString(i.signature.Bytes()) + ".sig.ed25519", }) diff --git a/service/domain/messages/room_registerAlias_test.go b/service/domain/messages/room_registerAlias_test.go index c3161292..9f947c6e 100644 --- a/service/domain/messages/room_registerAlias_test.go +++ b/service/domain/messages/room_registerAlias_test.go @@ -2,9 +2,9 @@ package messages_test import ( "encoding/base64" - "encoding/json" "testing" + jsoniter "github.com/json-iterator/go" "github.com/planetary-social/scuttlego/internal/fixtures" "github.com/planetary-social/scuttlego/service/domain/messages" "github.com/planetary-social/scuttlego/service/domain/refs" @@ -34,7 +34,7 @@ func TestNewRoomRegisterAlias(t *testing.T) { require.Equal(t, rpc.MustNewProcedureName([]string{"room", "registerAlias"}), req.Name()) var actualArgs []string - err = json.Unmarshal(req.Arguments(), &actualArgs) + err = jsoniter.Unmarshal(req.Arguments(), &actualArgs) require.NoError(t, err) require.Equal(t, []string{ diff --git a/service/domain/messages/room_revokeAlias.go b/service/domain/messages/room_revokeAlias.go index e3fe5c40..ae5ff41d 100644 --- a/service/domain/messages/room_revokeAlias.go +++ b/service/domain/messages/room_revokeAlias.go @@ -1,9 +1,8 @@ package messages import ( - "encoding/json" - "github.com/boreq/errors" + jsoniter "github.com/json-iterator/go" "github.com/planetary-social/scuttlego/service/domain/rooms/aliases" "github.com/planetary-social/scuttlego/service/domain/transport/rpc" ) @@ -45,7 +44,7 @@ func NewRoomRevokeAliasArguments( } func (i RoomRevokeAliasArguments) MarshalJSON() ([]byte, error) { - return json.Marshal([]string{ + return jsoniter.Marshal([]string{ i.alias.String(), }) } diff --git a/service/domain/messages/tunnel_connect.go b/service/domain/messages/tunnel_connect.go index 0d41cad9..932b2e81 100644 --- a/service/domain/messages/tunnel_connect.go +++ b/service/domain/messages/tunnel_connect.go @@ -1,9 +1,8 @@ package messages import ( - "encoding/json" - "github.com/boreq/errors" + jsoniter "github.com/json-iterator/go" "github.com/planetary-social/scuttlego/service/domain/refs" "github.com/planetary-social/scuttlego/service/domain/transport/rpc" ) @@ -65,7 +64,7 @@ func NewTunnelConnectToPortalArguments( } func (i TunnelConnectToPortalArguments) MarshalJSON() ([]byte, error) { - return json.Marshal([]tunnelConnectToPortalArgumentsTransport{ + return jsoniter.Marshal([]tunnelConnectToPortalArgumentsTransport{ { Portal: i.portal.String(), Target: i.target.String(), @@ -105,7 +104,7 @@ func NewTunnelConnectToTargetArguments( func NewTunnelConnectToTargetArgumentsFromBytes(b []byte) (TunnelConnectToTargetArguments, error) { var args []tunnelConnectToTargetArgumentsTransport - if err := json.Unmarshal(b, &args); err != nil { + if err := jsoniter.Unmarshal(b, &args); err != nil { return TunnelConnectToTargetArguments{}, errors.Wrap(err, "json unmarshal failed") } @@ -148,7 +147,7 @@ func (t TunnelConnectToTargetArguments) Origin() refs.Identity { } func (t TunnelConnectToTargetArguments) MarshalJSON() ([]byte, error) { - return json.Marshal([]tunnelConnectToTargetArgumentsTransport{ + return jsoniter.Marshal([]tunnelConnectToTargetArgumentsTransport{ { Portal: t.portal.String(), Target: t.target.String(), diff --git a/service/domain/transport/rpc/transport.go b/service/domain/transport/rpc/transport.go index 76e2571b..90a8111b 100644 --- a/service/domain/transport/rpc/transport.go +++ b/service/domain/transport/rpc/transport.go @@ -27,7 +27,7 @@ func MarshalRequestBody(req *Request) ([]byte, error) { Args: req.Arguments(), } - j, err := json.Marshal(body) + j, err := jsoniter.Marshal(body) if err != nil { return nil, errors.Wrap(err, "could not marshal the request body") } @@ -152,10 +152,10 @@ func sendCloseStream(raw MessageSender, number int, errToSent error) error { var content []byte if errToSent == nil { - content = []byte("true") // todo why true, is there any reason for this? do we have to send something specific? is this documented? + content = []byte("true") } else { var mErr error - content, mErr = json.Marshal(struct { + content, mErr = jsoniter.Marshal(struct { Error string `json:"error"` }{errToSent.Error()}) if mErr != nil {