xref: /openbmc/phosphor-logging/elog_meta.cpp (revision f18bf836d206b1bc5b4fd849127a2e706eddf0aa)
1682326a1SDeepak Kodihalli #include "config.h"
2*f18bf836SPatrick Venture 
3682326a1SDeepak Kodihalli #include "elog_meta.hpp"
4682326a1SDeepak Kodihalli 
5682326a1SDeepak Kodihalli namespace phosphor
6682326a1SDeepak Kodihalli {
7682326a1SDeepak Kodihalli namespace logging
8682326a1SDeepak Kodihalli {
9682326a1SDeepak Kodihalli namespace metadata
10682326a1SDeepak Kodihalli {
11682326a1SDeepak Kodihalli namespace associations
12682326a1SDeepak Kodihalli {
13682326a1SDeepak Kodihalli 
14682326a1SDeepak Kodihalli #if defined PROCESS_META
15682326a1SDeepak Kodihalli 
16682326a1SDeepak Kodihalli template <>
17*f18bf836SPatrick Venture void build<xyz::openbmc_project::Common::Callout::Device::CALLOUT_DEVICE_PATH>(
18*f18bf836SPatrick Venture     const std::string& match, const std::vector<std::string>& data,
19682326a1SDeepak Kodihalli     AssociationList& list)
20682326a1SDeepak Kodihalli {
21682326a1SDeepak Kodihalli     std::map<std::string, std::string> metadata;
22682326a1SDeepak Kodihalli     parse(data, metadata);
23682326a1SDeepak Kodihalli     auto iter = metadata.find(match);
24682326a1SDeepak Kodihalli     if (metadata.end() != iter)
25682326a1SDeepak Kodihalli     {
26*f18bf836SPatrick Venture         auto comp = [](const auto& first, const auto& second) {
27682326a1SDeepak Kodihalli             return (strcmp(std::get<0>(first), second) < 0);
28682326a1SDeepak Kodihalli         };
29*f18bf836SPatrick Venture         auto callout = std::lower_bound(callouts.begin(), callouts.end(),
30*f18bf836SPatrick Venture                                         (iter->second).c_str(), comp);
31682326a1SDeepak Kodihalli         if ((callouts.end() != callout) &&
32682326a1SDeepak Kodihalli             !strcmp((iter->second).c_str(), std::get<0>(*callout)))
33682326a1SDeepak Kodihalli         {
34*f18bf836SPatrick Venture             list.emplace_back(std::make_tuple(
35*f18bf836SPatrick Venture                 CALLOUT_FWD_ASSOCIATION, CALLOUT_REV_ASSOCIATION,
36*f18bf836SPatrick Venture                 std::string(INVENTORY_ROOT) + std::get<1>(*callout)));
37682326a1SDeepak Kodihalli         }
38682326a1SDeepak Kodihalli     }
39682326a1SDeepak Kodihalli }
40682326a1SDeepak Kodihalli 
41213aaf6fSTom Joseph template <>
42*f18bf836SPatrick Venture void build<
43*f18bf836SPatrick Venture     xyz::openbmc_project::Common::Callout::Inventory::CALLOUT_INVENTORY_PATH>(
44*f18bf836SPatrick Venture     const std::string& match, const std::vector<std::string>& data,
45213aaf6fSTom Joseph     AssociationList& list)
46213aaf6fSTom Joseph {
47213aaf6fSTom Joseph     std::map<std::string, std::string> metadata;
48213aaf6fSTom Joseph     parse(data, metadata);
49213aaf6fSTom Joseph     auto iter = metadata.find(match);
50213aaf6fSTom Joseph     if (metadata.end() != iter)
51213aaf6fSTom Joseph     {
52213aaf6fSTom Joseph         list.emplace_back(std::make_tuple(CALLOUT_FWD_ASSOCIATION,
53213aaf6fSTom Joseph                                           CALLOUT_REV_ASSOCIATION,
54213aaf6fSTom Joseph                                           std::string(iter->second.c_str())));
55213aaf6fSTom Joseph     }
56213aaf6fSTom Joseph }
57213aaf6fSTom Joseph 
58682326a1SDeepak Kodihalli #endif
59682326a1SDeepak Kodihalli 
60682326a1SDeepak Kodihalli } // namespace associations
61682326a1SDeepak Kodihalli } // namespace metadata
62682326a1SDeepak Kodihalli } // namespace logging
63682326a1SDeepak Kodihalli } // namespace phosphor
64