move to free function: Message_registries

This change will allow for unit testing of the free function.
There are no changes to logic in the response, only the organization.

Signed-off-by: John Edward Broadbent <jebr@google.com>
Change-Id: Ic485cea978b5b0ee06fe4011cbfc43333519bb50
diff --git a/redfish-core/lib/message_registries.hpp b/redfish-core/lib/message_registries.hpp
index e3bd5bf..f770488 100644
--- a/redfish-core/lib/message_registries.hpp
+++ b/redfish-core/lib/message_registries.hpp
@@ -27,6 +27,26 @@
 namespace redfish
 {
 
+inline void handleMessageRegistryFileCollectionGet(
+    const crow::Request&, const std::shared_ptr<bmcweb::AsyncResp>& asyncResp)
+{
+    // Collections don't include the static data added by SubRoute
+    // because it has a duplicate entry for members
+
+    asyncResp->res.jsonValue = {
+        {"@odata.type", "#MessageRegistryFileCollection."
+                        "MessageRegistryFileCollection"},
+        {"@odata.id", "/redfish/v1/Registries"},
+        {"Name", "MessageRegistryFile Collection"},
+        {"Description", "Collection of MessageRegistryFiles"},
+        {"Members@odata.count", 4},
+        {"Members",
+         {{{"@odata.id", "/redfish/v1/Registries/Base"}},
+          {{"@odata.id", "/redfish/v1/Registries/TaskEvent"}},
+          {{"@odata.id", "/redfish/v1/Registries/ResourceEvent"}},
+          {{"@odata.id", "/redfish/v1/Registries/OpenBMC"}}}}};
+}
+
 inline void requestRoutesMessageRegistryFileCollection(App& app)
 {
     /**
@@ -35,24 +55,63 @@
     BMCWEB_ROUTE(app, "/redfish/v1/Registries/")
         .privileges(redfish::privileges::getMessageRegistryFileCollection)
         .methods(boost::beast::http::verb::get)(
-            [](const crow::Request&,
-               const std::shared_ptr<bmcweb::AsyncResp>& asyncResp) {
-                // Collections don't include the static data added by SubRoute
-                // because it has a duplicate entry for members
+            handleMessageRegistryFileCollectionGet);
+}
 
-                asyncResp->res.jsonValue = {
-                    {"@odata.type", "#MessageRegistryFileCollection."
-                                    "MessageRegistryFileCollection"},
-                    {"@odata.id", "/redfish/v1/Registries"},
-                    {"Name", "MessageRegistryFile Collection"},
-                    {"Description", "Collection of MessageRegistryFiles"},
-                    {"Members@odata.count", 4},
-                    {"Members",
-                     {{{"@odata.id", "/redfish/v1/Registries/Base"}},
-                      {{"@odata.id", "/redfish/v1/Registries/TaskEvent"}},
-                      {{"@odata.id", "/redfish/v1/Registries/ResourceEvent"}},
-                      {{"@odata.id", "/redfish/v1/Registries/OpenBMC"}}}}};
-            });
+inline void handleMessageRoutesMessageRegistryFileGet(
+    const crow::Request&, const std::shared_ptr<bmcweb::AsyncResp>& asyncResp,
+    const std::string& registry)
+{
+    const message_registries::Header* header;
+    std::string dmtf = "DMTF ";
+    const char* url = nullptr;
+
+    if (registry == "Base")
+    {
+        header = &message_registries::base::header;
+        url = message_registries::base::url;
+    }
+    else if (registry == "TaskEvent")
+    {
+        header = &message_registries::task_event::header;
+        url = message_registries::task_event::url;
+    }
+    else if (registry == "OpenBMC")
+    {
+        header = &message_registries::openbmc::header;
+        dmtf.clear();
+    }
+    else if (registry == "ResourceEvent")
+    {
+        header = &message_registries::resource_event::header;
+        url = message_registries::resource_event::url;
+    }
+    else
+    {
+        messages::resourceNotFound(
+            asyncResp->res, "#MessageRegistryFile.v1_1_0.MessageRegistryFile",
+            registry);
+        return;
+    }
+
+    asyncResp->res.jsonValue = {
+        {"@odata.id", "/redfish/v1/Registries/" + registry},
+        {"@odata.type", "#MessageRegistryFile.v1_1_0.MessageRegistryFile"},
+        {"Name", registry + " Message Registry File"},
+        {"Description", dmtf + registry + " Message Registry File Location"},
+        {"Id", header->registryPrefix},
+        {"Registry", header->id},
+        {"Languages", {"en"}},
+        {"Languages@odata.count", 1},
+        {"Location",
+         {{{"Language", "en"},
+           {"Uri", "/redfish/v1/Registries/" + registry + "/" + registry}}}},
+        {"Location@odata.count", 1}};
+
+    if (url != nullptr)
+    {
+        asyncResp->res.jsonValue["Location"][0]["PublicationUri"] = url;
+    }
 }
 
 inline void requestRoutesMessageRegistryFile(App& app)
@@ -60,172 +119,108 @@
     BMCWEB_ROUTE(app, "/redfish/v1/Registries/<str>/")
         .privileges(redfish::privileges::getMessageRegistryFile)
         .methods(boost::beast::http::verb::get)(
-            [](const crow::Request&,
-               const std::shared_ptr<bmcweb::AsyncResp>& asyncResp,
-               const std::string& registry) {
-                const message_registries::Header* header;
-                std::string dmtf = "DMTF ";
-                const char* url = nullptr;
+            handleMessageRoutesMessageRegistryFileGet);
+}
 
-                if (registry == "Base")
-                {
-                    header = &message_registries::base::header;
-                    url = message_registries::base::url;
-                }
-                else if (registry == "TaskEvent")
-                {
-                    header = &message_registries::task_event::header;
-                    url = message_registries::task_event::url;
-                }
-                else if (registry == "OpenBMC")
-                {
-                    header = &message_registries::openbmc::header;
-                    dmtf.clear();
-                }
-                else if (registry == "ResourceEvent")
-                {
-                    header = &message_registries::resource_event::header;
-                    url = message_registries::resource_event::url;
-                }
-                else
-                {
-                    messages::resourceNotFound(
-                        asyncResp->res,
-                        "#MessageRegistryFile.v1_1_0.MessageRegistryFile",
-                        registry);
-                    return;
-                }
+inline void handleMessageRegistryGet(
+    const crow::Request&, const std::shared_ptr<bmcweb::AsyncResp>& asyncResp,
+    const std::string& registry, const std::string& registry1)
 
-                asyncResp->res.jsonValue = {
-                    {"@odata.id", "/redfish/v1/Registries/" + registry},
-                    {"@odata.type",
-                     "#MessageRegistryFile.v1_1_0.MessageRegistryFile"},
-                    {"Name", registry + " Message Registry File"},
-                    {"Description",
-                     dmtf + registry + " Message Registry File Location"},
-                    {"Id", header->registryPrefix},
-                    {"Registry", header->id},
-                    {"Languages", {"en"}},
-                    {"Languages@odata.count", 1},
-                    {"Location",
-                     {{{"Language", "en"},
-                       {"Uri", "/redfish/v1/Registries/" + registry + "/" +
-                                   registry}}}},
-                    {"Location@odata.count", 1}};
+{
+    const message_registries::Header* header;
+    std::vector<const message_registries::MessageEntry*> registryEntries;
+    if (registry == "Base")
+    {
+        header = &message_registries::base::header;
+        for (const message_registries::MessageEntry& entry :
+             message_registries::base::registry)
+        {
+            registryEntries.emplace_back(&entry);
+        }
+    }
+    else if (registry == "TaskEvent")
+    {
+        header = &message_registries::task_event::header;
+        for (const message_registries::MessageEntry& entry :
+             message_registries::task_event::registry)
+        {
+            registryEntries.emplace_back(&entry);
+        }
+    }
+    else if (registry == "OpenBMC")
+    {
+        header = &message_registries::openbmc::header;
+        for (const message_registries::MessageEntry& entry :
+             message_registries::openbmc::registry)
+        {
+            registryEntries.emplace_back(&entry);
+        }
+    }
+    else if (registry == "ResourceEvent")
+    {
+        header = &message_registries::resource_event::header;
+        for (const message_registries::MessageEntry& entry :
+             message_registries::resource_event::registry)
+        {
+            registryEntries.emplace_back(&entry);
+        }
+    }
+    else
+    {
+        messages::resourceNotFound(
+            asyncResp->res, "#MessageRegistryFile.v1_1_0.MessageRegistryFile",
+            registry);
+        return;
+    }
 
-                if (url != nullptr)
+    if (registry != registry1)
+    {
+        messages::resourceNotFound(asyncResp->res, header->type, registry1);
+        return;
+    }
+
+    asyncResp->res.jsonValue = {{"@Redfish.Copyright", header->copyright},
+                                {"@odata.type", header->type},
+                                {"Id", header->id},
+                                {"Name", header->name},
+                                {"Language", header->language},
+                                {"Description", header->description},
+                                {"RegistryPrefix", header->registryPrefix},
+                                {"RegistryVersion", header->registryVersion},
+                                {"OwningEntity", header->owningEntity}};
+
+    nlohmann::json& messageObj = asyncResp->res.jsonValue["Messages"];
+
+    // Go through the Message Registry and populate each Message
+    for (const message_registries::MessageEntry* message : registryEntries)
+    {
+        nlohmann::json& obj = messageObj[message->first];
+        obj = {{"Description", message->second.description},
+               {"Message", message->second.message},
+               {"Severity", message->second.severity},
+               {"MessageSeverity", message->second.messageSeverity},
+               {"NumberOfArgs", message->second.numberOfArgs},
+               {"Resolution", message->second.resolution}};
+        if (message->second.numberOfArgs > 0)
+        {
+            nlohmann::json& messageParamArray = obj["ParamTypes"];
+            messageParamArray = nlohmann::json::array();
+            for (const char* str : message->second.paramTypes)
+            {
+                if (str == nullptr)
                 {
-                    asyncResp->res.jsonValue["Location"][0]["PublicationUri"] =
-                        url;
+                    break;
                 }
-            });
+                messageParamArray.push_back(str);
+            }
+        }
+    }
 }
 
 inline void requestRoutesMessageRegistry(App& app)
 {
     BMCWEB_ROUTE(app, "/redfish/v1/Registries/<str>/<str>/")
         .privileges(redfish::privileges::getMessageRegistryFile)
-        .methods(boost::beast::http::verb::get)(
-            [](const crow::Request&,
-               const std::shared_ptr<bmcweb::AsyncResp>& asyncResp,
-               const std::string& registry, const std::string& registry1)
-
-            {
-                const message_registries::Header* header;
-                std::vector<const message_registries::MessageEntry*>
-                    registryEntries;
-                if (registry == "Base")
-                {
-                    header = &message_registries::base::header;
-                    for (const message_registries::MessageEntry& entry :
-                         message_registries::base::registry)
-                    {
-                        registryEntries.emplace_back(&entry);
-                    }
-                }
-                else if (registry == "TaskEvent")
-                {
-                    header = &message_registries::task_event::header;
-                    for (const message_registries::MessageEntry& entry :
-                         message_registries::task_event::registry)
-                    {
-                        registryEntries.emplace_back(&entry);
-                    }
-                }
-                else if (registry == "OpenBMC")
-                {
-                    header = &message_registries::openbmc::header;
-                    for (const message_registries::MessageEntry& entry :
-                         message_registries::openbmc::registry)
-                    {
-                        registryEntries.emplace_back(&entry);
-                    }
-                }
-                else if (registry == "ResourceEvent")
-                {
-                    header = &message_registries::resource_event::header;
-                    for (const message_registries::MessageEntry& entry :
-                         message_registries::resource_event::registry)
-                    {
-                        registryEntries.emplace_back(&entry);
-                    }
-                }
-                else
-                {
-                    messages::resourceNotFound(
-                        asyncResp->res,
-                        "#MessageRegistryFile.v1_1_0.MessageRegistryFile",
-                        registry);
-                    return;
-                }
-
-                if (registry != registry1)
-                {
-                    messages::resourceNotFound(asyncResp->res, header->type,
-                                               registry1);
-                    return;
-                }
-
-                asyncResp->res.jsonValue = {
-                    {"@Redfish.Copyright", header->copyright},
-                    {"@odata.type", header->type},
-                    {"Id", header->id},
-                    {"Name", header->name},
-                    {"Language", header->language},
-                    {"Description", header->description},
-                    {"RegistryPrefix", header->registryPrefix},
-                    {"RegistryVersion", header->registryVersion},
-                    {"OwningEntity", header->owningEntity}};
-
-                nlohmann::json& messageObj =
-                    asyncResp->res.jsonValue["Messages"];
-
-                // Go through the Message Registry and populate each Message
-                for (const message_registries::MessageEntry* message :
-                     registryEntries)
-                {
-                    nlohmann::json& obj = messageObj[message->first];
-                    obj = {{"Description", message->second.description},
-                           {"Message", message->second.message},
-                           {"Severity", message->second.severity},
-                           {"MessageSeverity", message->second.messageSeverity},
-                           {"NumberOfArgs", message->second.numberOfArgs},
-                           {"Resolution", message->second.resolution}};
-                    if (message->second.numberOfArgs > 0)
-                    {
-                        nlohmann::json& messageParamArray = obj["ParamTypes"];
-                        messageParamArray = nlohmann::json::array();
-                        for (const char* str : message->second.paramTypes)
-                        {
-                            if (str == nullptr)
-                            {
-                                break;
-                            }
-                            messageParamArray.push_back(str);
-                        }
-                    }
-                }
-            });
+        .methods(boost::beast::http::verb::get)(handleMessageRegistryGet);
 }
-
 } // namespace redfish