#pragma once

#include <sdbusplus/exception.hpp>

namespace sdbusplus
{
namespace org
{
namespace open_power
{
namespace Host
{
namespace Error
{

struct Event final : public sdbusplus::exception::generated_exception
{
    static constexpr auto errName = "org.open_power.Host.Error.Event";
    static constexpr auto errDesc = "A host system event was received";
    static constexpr auto errWhat =
        "org.open_power.Host.Error.Event: A host system event was received";

    const char* name() const noexcept override;
    const char* description() const noexcept override;
    const char* what() const noexcept override;
};

struct MaintenanceProcedure final :
    public sdbusplus::exception::generated_exception
{
    static constexpr auto errName =
        "org.open_power.Host.Error.MaintenanceProcedure";
    static constexpr auto errDesc =
        "A host system event with a procedure callout";
    static constexpr auto errWhat =
        "org.open_power.Host.Error.MaintenanceProcedure: A host system event "
        "with a procedure callout";

    const char* name() const noexcept override;
    const char* description() const noexcept override;
    const char* what() const noexcept override;
};

} // namespace Error
} // namespace Host
} // namespace open_power
} // namespace org
} // namespace sdbusplus
