#pragma once namespace phosphor::fan::monitor { /** * @class PowerInterfaceBase * * The base class that contains the APIs to do power offs. * This is required so it can be mocked in testcases. */ class PowerInterfaceBase { public: PowerInterfaceBase() = default; virtual ~PowerInterfaceBase() = default; PowerInterfaceBase(const PowerInterfaceBase&) = delete; PowerInterfaceBase& operator=(const PowerInterfaceBase&) = delete; PowerInterfaceBase(PowerInterfaceBase&&) = delete; PowerInterfaceBase& operator=(PowerInterfaceBase&&) = delete; /** * @brief Perform a soft power off */ virtual void softPowerOff() = 0; /** * @brief Perform a hard power off */ virtual void hardPowerOff() = 0; }; /** * @class PowerInterface * * Concrete class to perform power offs */ class PowerInterface : public PowerInterfaceBase { public: PowerInterface() = default; ~PowerInterface() = default; PowerInterface(const PowerInterface&) = delete; PowerInterface& operator=(const PowerInterface&) = delete; PowerInterface(PowerInterface&&) = delete; PowerInterface& operator=(PowerInterface&&) = delete; /** * @brief Perform a soft power off */ void softPowerOff() override; /** * @brief Perform a hard power off */ void hardPowerOff() override; }; } // namespace phosphor::fan::monitor