emojis: initialize maps lazily

Closes #99
This commit is contained in:
Tulir Asokan
2025-12-07 21:23:29 +02:00
parent 10f1583da9
commit 76e06d4a33
+10 -4
View File
@@ -19,7 +19,10 @@ package emojis
import ( import (
_ "embed" _ "embed"
"encoding/json" "encoding/json"
"fmt"
"sync"
"go.mau.fi/util/exstrings"
"maunium.net/go/mautrix/bridgev2/networkid" "maunium.net/go/mautrix/bridgev2/networkid"
"maunium.net/go/mautrix/id" "maunium.net/go/mautrix/id"
@@ -27,14 +30,15 @@ import (
) )
//go:embed unicodemojipack.json //go:embed unicodemojipack.json
var unicodemojiPackJSON []byte var unicodemojiPackJSON string
var initOnce sync.Once
var unicodemojiPack = map[string]int64{} var unicodemojiPack = map[string]int64{}
var reverseUnicodemojiPack = map[int64]string{} var reverseUnicodemojiPack = map[int64]string{}
func init() { func doInit() {
if err := json.Unmarshal(unicodemojiPackJSON, &unicodemojiPack); err != nil { if err := json.Unmarshal(exstrings.UnsafeBytes(unicodemojiPackJSON), &unicodemojiPack); err != nil {
panic("Failed to unmarshal unicodemojipack") panic(fmt.Errorf("Failed to unmarshal unicodemojipack: %w", err))
} }
for k, v := range unicodemojiPack { for k, v := range unicodemojiPack {
@@ -45,6 +49,7 @@ func init() {
// ConvertKnownEmojis converts known document IDs from the unicode emoji pack // ConvertKnownEmojis converts known document IDs from the unicode emoji pack
// to the corresponding unicode string and returns the remaining IDs. // to the corresponding unicode string and returns the remaining IDs.
func ConvertKnownEmojis(emojiIDs []int64) (result map[networkid.EmojiID]EmojiInfo, remaining []int64) { func ConvertKnownEmojis(emojiIDs []int64) (result map[networkid.EmojiID]EmojiInfo, remaining []int64) {
initOnce.Do(doInit)
result = map[networkid.EmojiID]EmojiInfo{} result = map[networkid.EmojiID]EmojiInfo{}
for _, e := range emojiIDs { for _, e := range emojiIDs {
if v, ok := reverseUnicodemojiPack[e]; ok { 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) { func GetEmojiDocumentID(emoji string) (int64, bool) {
initOnce.Do(doInit)
id, ok := unicodemojiPack[emoji] id, ok := unicodemojiPack[emoji]
return id, ok return id, ok
} }