From b0048da2649245d724a5dd81363ffeabe5939d9b Mon Sep 17 00:00:00 2001
From: Timothy du Heaume <timothy.duheaume@gmail.com>
Date: Wed, 5 Feb 2020 10:28:12 +0900
Subject: [PATCH] prserve insertion order of react/role mappings

---
 Cargo.toml            | 1 +
 src/config.rs         | 6 ++++--
 src/main.rs           | 1 +
 src/reaction_roles.rs | 4 ++--
 4 files changed, 8 insertions(+), 4 deletions(-)

diff --git a/Cargo.toml b/Cargo.toml
index 41b4994..f34380b 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -16,3 +16,4 @@ serde_yaml = "^0.8"
 serenity = "0.8.0"
 simplelog = "^0.7.4"
 guard = "0.5.0"
+indexmap = { version = "1.3.1", features = ["serde-1"] }
diff --git a/src/config.rs b/src/config.rs
index 452553c..2db968d 100644
--- a/src/config.rs
+++ b/src/config.rs
@@ -1,7 +1,7 @@
 use serde::Deserialize;
 use serde_yaml;
 use serenity::model::id;
-use std::collections::HashMap;
+use indexmap::IndexMap;
 use std::fs;
 
 lazy_static! {
@@ -44,8 +44,10 @@ impl UccbotConfig {
     }
 }
 
+pub type ReactRoleMap = IndexMap<String, id::RoleId>;
+
 #[derive(Debug, Deserialize, Clone)]
 pub struct ReactionMapping {
     pub message: serenity::model::id::MessageId,
-    pub mapping: HashMap<String, id::RoleId>,
+    pub mapping: ReactRoleMap,
 }
diff --git a/src/main.rs b/src/main.rs
index cb27c05..9121024 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -4,6 +4,7 @@ extern crate lazy_static;
 #[macro_use]
 extern crate log;
 extern crate simplelog;
+extern crate indexmap;
 #[macro_use] extern crate guard;
 use simplelog::*;
 use std::fs::{read_to_string, File};
diff --git a/src/reaction_roles.rs b/src/reaction_roles.rs
index 35861b9..faa2a23 100644
--- a/src/reaction_roles.rs
+++ b/src/reaction_roles.rs
@@ -1,4 +1,4 @@
-use crate::config::CONFIG;
+use crate::config::{CONFIG, ReactRoleMap};
 use crate::util::{get_react_from_string, get_string_from_react};
 use serenity::{
     client::Context,
@@ -178,7 +178,7 @@ fn get_all_role_reaction_message(
     ctx: &Context,
 ) -> Vec<(
     Message,
-    &'static HashMap<String, serenity::model::id::RoleId>,
+    &'static ReactRoleMap,
 )> {
     let guild = ctx.http.get_guild(CONFIG.server_id).unwrap();
     info!("  Find role-react message: guild determined");
-- 
GitLab