// This file was autogenerated.  Do not edit!
// See elog-gen.py for more details
#pragma once

#include <map>
#include <string>
#include <tuple>
#include <type_traits>
#include <vector>
#include <phosphor-logging/log.hpp>

namespace phosphor
{

namespace logging
{

std::map<std::string,std::vector<std::string>> g_errMetaMapHostEvent = {
     {"org.open_power.Error.Host.Event.Event",{"ESEL"}},
};

std::map<std::string,level> g_errLevelMapHostEvent = {
     {"org.open_power.Error.Host.Event.Event",level::INFO},
};

namespace org
{
namespace open_power
{
namespace Error
{
namespace Host
{
namespace _Event
{
struct ESEL
{
    static constexpr auto str = "ESEL=%s";
    static constexpr auto str_short = "ESEL";
    using type = std::tuple<std::decay_t<decltype(str)>,const char*>;
    explicit constexpr ESEL(const char* a) : _entry(entry(str, a)) {};
    type _entry;
};

}  // namespace _Event

struct Event
{
    static constexpr auto err_code = "org.open_power.Error.Host.Event.Event";
    static constexpr auto err_msg = "A host system event was received";
    static constexpr auto L = level::INFO;
    using ESEL = _Event::ESEL;
    using metadata_types = std::tuple<ESEL>;
};
} // namespace Host
} // namespace Error
} // namespace open_power
} // namespace org
} // namespace logging
} // namespace phosphor
