From 28f7bfb1e73aaf9f5788eb32c447e89ba17bd357 Mon Sep 17 00:00:00 2001
From: Jono Wenger <jono@elixxir.io>
Date: Wed, 25 Jan 2023 12:29:56 -0800
Subject: [PATCH] Copy EmojiMartData interface emoji-mart directly to
 emojiMartSet

---
 emoji/emojiMart.go      | 35 +++++++++++++++++++++++------------
 emoji/emojiMart_test.go |  5 +++--
 emoji/emojiSet.go       |  2 +-
 3 files changed, 27 insertions(+), 15 deletions(-)

diff --git a/emoji/emojiMart.go b/emoji/emojiMart.go
index 47e3ee0f..74c84172 100644
--- a/emoji/emojiMart.go
+++ b/emoji/emojiMart.go
@@ -19,36 +19,47 @@ type emojiID string
 type codepoint string
 
 // emojiMartSet is a representation of the JSON file format containing the emoji
-// list in emoji-mart.
+// list in emoji-mart. It matches the object EmojiMartData:
+// https://github.com/missive/emoji-mart/blob/main/packages/emoji-mart-data/index.d.ts
 //
 // Doc: https://github.com/missive/emoji-mart/
 // JSON example: https://github.com/missive/emoji-mart/blob/main/packages/emoji-mart-data/sets/14/native.json
 type emojiMartSet struct {
-	Categories []category             `json:"categories"`
-	Emojis     map[emojiID]emoji      `json:"emojis"`
-	Aliases    map[string]emojiID     `json:"aliases"`
-	Sheet      map[string]interface{} `json:"sheet"`
+	Categories []category         `json:"categories"`
+	Emojis     map[emojiID]emoji  `json:"emojis"`
+	Aliases    map[string]emojiID `json:"aliases"`
+	Sheet      sheet              `json:"sheet"`
 }
 
-// category adheres to the category field of the emoji-mart JSON file.
+// category adheres to the categories field within the EmojiMartData Javascript
+// interface.
 type category struct {
-	Emojis []emojiID `json:"emojis"`
 	ID     string    `json:"id"`
+	Emojis []emojiID `json:"emojis"`
 }
 
-// emoji adheres to the emoji field of the emoji-mart JSON file.
+// emoji adheres to the emojis field within the EmojiMartData Javascript
+// interface.
 type emoji struct {
-	Emoticons []string `json:"emoticons,omitempty"`
 	ID        emojiID  `json:"id"`
 	Name      string   `json:"name"`
 	Keywords  []string `json:"keywords"`
 	Skins     []skin   `json:"skins"`
-	Version   float32  `json:"version"`
+	Version   float64  `json:"version"`
+	Emoticons []string `json:"emoticons,omitempty"`
 }
 
-// skin adheres to the skin field within the emoji field of the emoji-mart JSON
-// file.
+// skin adheres to the skins field within the EmojiMartData Javascript interface.
 type skin struct {
 	Unified codepoint `json:"unified"`
 	Native  string    `json:"native"`
+	X       float64   `json:"x,omitempty"`
+	Y       float64   `json:"y,omitempty"`
+}
+
+// sheet adheres to the sheet field within the EmojiMartData Javascript
+// interface.
+type sheet struct {
+	Cols float64 `json:"cols"`
+	Rows float64 `json:"rows"`
 }
diff --git a/emoji/emojiMart_test.go b/emoji/emojiMart_test.go
index 81fe787c..0907d862 100644
--- a/emoji/emojiMart_test.go
+++ b/emoji/emojiMart_test.go
@@ -39,8 +39,9 @@ func Test_emojiMartData_JSON_Marshal_Unmarshal(t *testing.T) {
 		Aliases: map[string]emojiID{
 			"lady_beetle": "ladybug",
 		},
-		Sheet: map[string]interface{}{
-			"test": "data",
+		Sheet: sheet{
+			Cols: 5,
+			Rows: 12,
 		},
 	}
 
diff --git a/emoji/emojiSet.go b/emoji/emojiSet.go
index 147d8811..dbb2095c 100644
--- a/emoji/emojiSet.go
+++ b/emoji/emojiSet.go
@@ -82,7 +82,7 @@ func (s *Set) findIncompatibleEmojis(set *emojiMartSet) (emojisToRemove []emojiI
 			// Determine if the emoji's codepoint should be replaced or removed
 			replacement, replace := s.replace(Skin.Unified)
 			if replace {
-				jww.TRACE.Printf("Replaced codepoint %q with %q for emoji %q",
+				jww.TRACE.Printf("Replaced codepoint %q with %v for emoji %q",
 					Skin.Unified, replacement, id)
 				newSkins = append(newSkins, replacement)
 			} else if !s.remove(Skin.Unified) {
-- 
GitLab