Move ToSimpleMessage out of Message

It doesn't need access to any private members.
This commit is contained in:
Oliver Hamlet
2022-02-19 13:45:52 +00:00
parent a239aae888
commit 5bce0b9e06
3 changed files with 34 additions and 33 deletions
+11 -10
View File
@@ -96,16 +96,6 @@ public:
*/
LOOT_API std::vector<MessageContent> GetContent() const;
/**
* Get the message as a SimpleMessage given a language.
* @param language
* The preferred language for the message content.
* @return A SimpleMessage object for the preferred language, or for English
* if message text is not available for the given language.
*/
LOOT_API std::optional<SimpleMessage> ToSimpleMessage(
const std::string& language) const;
private:
MessageType type_{MessageType::say};
std::vector<MessageContent> content_;
@@ -153,6 +143,17 @@ LOOT_API bool operator<=(const Message& lhs, const Message& rhs);
* Message object, false otherwise.
*/
LOOT_API bool operator>=(const Message& lhs, const Message& rhs);
/**
* Get the message as a SimpleMessage given a language.
* @param language
* The preferred language for the message content.
* @return A SimpleMessage object for the preferred language, or for English
* if message text is not available for the given language.
*/
LOOT_API std::optional<SimpleMessage> ToSimpleMessage(
const Message& message,
const std::string& language);
}
#endif
+17 -17
View File
@@ -62,23 +62,6 @@ MessageType Message::GetType() const { return type_; }
std::vector<MessageContent> Message::GetContent() const { return content_; }
std::optional<SimpleMessage> Message::ToSimpleMessage(
const std::string& language) const {
auto content = SelectMessageContent(content_, language);
if (!content.has_value()) {
return std::nullopt;
}
SimpleMessage simpleMessage;
simpleMessage.type = GetType();
simpleMessage.language = content.value().GetLanguage();
simpleMessage.text = content.value().GetText();
simpleMessage.condition = GetCondition();
return simpleMessage;
}
bool operator==(const Message& lhs, const Message& rhs) {
return lhs.GetType() == rhs.GetType() &&
lhs.GetCondition() == rhs.GetCondition() &&
@@ -114,4 +97,21 @@ bool operator>(const Message& lhs, const Message& rhs) { return rhs < lhs; }
bool operator<=(const Message& lhs, const Message& rhs) { return !(lhs > rhs); }
bool operator>=(const Message& lhs, const Message& rhs) { return !(lhs < rhs); }
std::optional<SimpleMessage> ToSimpleMessage(const Message& message,
const std::string& language) {
auto content = SelectMessageContent(message.GetContent(), language);
if (!content.has_value()) {
return std::nullopt;
}
SimpleMessage simpleMessage;
simpleMessage.type = message.GetType();
simpleMessage.language = content.value().GetLanguage();
simpleMessage.text = content.value().GetText();
simpleMessage.condition = message.GetCondition();
return simpleMessage;
}
}
@@ -363,20 +363,20 @@ TEST_P(
EXPECT_TRUE(message2 >= message1);
}
TEST_P(MessageTest, toSimpleMessageShouldSelectTextAndLanguageUsingGetContent) {
TEST(ToSimpleMessage, shouldSelectTextAndLanguageUsingGetContent) {
Message message(MessageType::warn,
MessageContents({
MessageContent("content1", german),
std::vector<MessageContent>({
MessageContent("content1", "de"),
MessageContent("content2"),
MessageContent("content3", french),
MessageContent("content3", "fr"),
}),
"condition1");
SimpleMessage simpleMessage = message.ToSimpleMessage(french).value();
SimpleMessage simpleMessage = ToSimpleMessage(message, "fr").value();
EXPECT_EQ(MessageType::warn, simpleMessage.type);
EXPECT_EQ("content3", simpleMessage.text);
EXPECT_EQ(french, simpleMessage.language);
EXPECT_EQ("fr", simpleMessage.language);
EXPECT_EQ("condition1", simpleMessage.condition);
}