metadata: add interface to build associations

A metadata field found in the journal corresponding to an error could be
special in the sense that it may require building specific error
association objects. Add an interface to build such associations.

Take advantage of the fact that every metadata has a corresponding type
defined.

Change-Id: I09e446879667044c009141443fc0dc6fed8a8b18
Signed-off-by: Deepak Kodihalli <dkodihal@in.ibm.com>
diff --git a/elog_meta.hpp b/elog_meta.hpp
new file mode 100644
index 0000000..9fc591d
--- /dev/null
+++ b/elog_meta.hpp
@@ -0,0 +1,39 @@
+#pragma once
+
+#include <vector>
+#include <string>
+#include <phosphor-logging/elog-errors.hpp>
+#include "elog_entry.hpp"
+
+namespace phosphor
+{
+namespace logging
+{
+namespace metadata
+{
+
+using Metadata = std::string;
+
+namespace associations
+{
+
+using Type = void(const std::string&,
+                  const std::vector<std::string>&,
+                  AssociationList& list);
+
+/** @brief Build error associations specific to metadata. Specialize this
+ *         template for handling a specific type of metadata.
+ *  @tparam M - type of metadata
+ *  @param [in] data - metadata to be handled
+ *  @param [in] data - metadata key=value entries
+ *  @param [out] list - list of error association objects
+ */
+template <typename M>
+void build(const std::string& match,
+           const std::vector<std::string>& data,
+           AssociationList& list) = delete;
+
+} // namespace associations
+} // namespace metadata
+} // namespace logging
+} // namespace phosphor