#pragma once #include "util/serialize-custom.hpp" #include #include namespace chatterino { namespace messages { struct HighlightPhrase { QString key; bool alert; bool sound; bool regex; bool operator==(const HighlightPhrase &other) const { return std::tie(this->key, this->sound, this->alert, this->regex) == std::tie(other.key, other.sound, other.alert, other.regex); } }; } // namespace messages } // namespace chatterino namespace pajlada { namespace Settings { template <> struct Serialize { static rapidjson::Value get(const chatterino::messages::HighlightPhrase &value, rapidjson::Document::AllocatorType &a) { rapidjson::Value ret(rapidjson::kObjectType); AddMember(ret, "key", value.key, a); AddMember(ret, "alert", value.alert, a); AddMember(ret, "sound", value.sound, a); AddMember(ret, "regex", value.regex, a); return ret; } }; template <> struct Deserialize { static chatterino::messages::HighlightPhrase get(const rapidjson::Value &value) { chatterino::messages::HighlightPhrase ret; if (!value.IsObject()) { return ret; } if (value.HasMember("key")) { const rapidjson::Value &key = value["key"]; if (key.IsString()) { ret.key = key.GetString(); } } if (value.HasMember("alert")) { const rapidjson::Value &alert = value["alert"]; if (alert.IsBool()) { ret.alert = alert.GetBool(); } } if (value.HasMember("sound")) { const rapidjson::Value &sound = value["sound"]; if (sound.IsBool()) { ret.sound = sound.GetBool(); } } if (value.HasMember("regex")) { const rapidjson::Value ®ex = value["regex"]; if (regex.IsBool()) { ret.regex = regex.GetBool(); } } return ret; } }; } // namespace Settings } // namespace pajlada