From 76e06d4a33fc9ab0a95092bb441f31b52bb447b3 Mon Sep 17 00:00:00 2001 From: Tulir Asokan Date: Sun, 7 Dec 2025 21:23:29 +0200 Subject: [PATCH] emojis: initialize maps lazily Closes #99 --- pkg/connector/emojis/emojis.go | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/pkg/connector/emojis/emojis.go b/pkg/connector/emojis/emojis.go index c9dab0c9..f7cc75d6 100644 --- a/pkg/connector/emojis/emojis.go +++ b/pkg/connector/emojis/emojis.go @@ -19,7 +19,10 @@ package emojis import ( _ "embed" "encoding/json" + "fmt" + "sync" + "go.mau.fi/util/exstrings" "maunium.net/go/mautrix/bridgev2/networkid" "maunium.net/go/mautrix/id" @@ -27,14 +30,15 @@ import ( ) //go:embed unicodemojipack.json -var unicodemojiPackJSON []byte +var unicodemojiPackJSON string +var initOnce sync.Once var unicodemojiPack = map[string]int64{} var reverseUnicodemojiPack = map[int64]string{} -func init() { - if err := json.Unmarshal(unicodemojiPackJSON, &unicodemojiPack); err != nil { - panic("Failed to unmarshal unicodemojipack") +func doInit() { + if err := json.Unmarshal(exstrings.UnsafeBytes(unicodemojiPackJSON), &unicodemojiPack); err != nil { + panic(fmt.Errorf("Failed to unmarshal unicodemojipack: %w", err)) } for k, v := range unicodemojiPack { @@ -45,6 +49,7 @@ func init() { // ConvertKnownEmojis converts known document IDs from the unicode emoji pack // to the corresponding unicode string and returns the remaining IDs. func ConvertKnownEmojis(emojiIDs []int64) (result map[networkid.EmojiID]EmojiInfo, remaining []int64) { + initOnce.Do(doInit) result = map[networkid.EmojiID]EmojiInfo{} for _, e := range emojiIDs { if v, ok := reverseUnicodemojiPack[e]; ok { @@ -57,6 +62,7 @@ func ConvertKnownEmojis(emojiIDs []int64) (result map[networkid.EmojiID]EmojiInf } func GetEmojiDocumentID(emoji string) (int64, bool) { + initOnce.Do(doInit) id, ok := unicodemojiPack[emoji] return id, ok }