// this file was autogenerated.  do not edit.
#pragma once

#include <tuple>
#include <type_traits>
#include "log.hpp"

namespace phosphor
{

namespace logging
{

namespace _file_not_found
{
struct errnum
{
    static constexpr auto str = "ERRNO=%d";
    static constexpr auto str_short = "ERRNO";
    using type = std::tuple<std::decay_t<decltype(str)>,int>;
    explicit constexpr errnum(int a) : _entry(entry(str, a)) {};
    type _entry;
};

struct file_path
{
    static constexpr auto str = "FILE_PATH=%s";
    static constexpr auto str_short = "FILE_PATH";
    using type = std::tuple<std::decay_t<decltype(str)>,const char*>;
    explicit constexpr file_path(const char *a) : _entry(entry(str,a)) {};
    type _entry;
};

struct file_name
{
   static constexpr auto str = "FILE_NAME=%s";
   static constexpr auto str_short = "FILE_NAME";
   using type = std::tuple<std::decay_t<decltype(str)>,const char*>;
   explicit constexpr file_name(const char *a) : _entry(entry(str,a)) {};
   type _entry;
};

} // namespace _file_not_found

struct file_not_found
{
    static constexpr auto err_code = "xyz.openbmc_project.logging.FILE_NOT_FOUND_ERROR";
    static constexpr auto err_msg = "A required file was not found";
    static constexpr auto L = level::INFO;

    using errnum = _file_not_found::errnum;
    using file_path = _file_not_found::file_path;
    using file_name = _file_not_found::file_name;

    using metadata_types = std::tuple<errnum, file_path, file_name>;
};



} // namespace logging

} // namespace phosphor
