diff --git a/elog-errors.hpp b/elog-errors.hpp
index 150875a..f4d45f8 100644
--- a/elog-errors.hpp
+++ b/elog-errors.hpp
@@ -2,12 +2,12 @@
 // See elog-gen.py for more details
 #pragma once
 
+#include <phosphor-logging/elog.hpp>
+#include <phosphor-logging/log.hpp>
+#include <sdbusplus/exception.hpp>
 #include <string>
 #include <tuple>
 #include <type_traits>
-#include <sdbusplus/exception.hpp>
-#include <phosphor-logging/log.hpp>
-#include <phosphor-logging/elog.hpp>
 
 namespace sdbusplus
 {
@@ -21,7 +21,7 @@
 {
 namespace Error
 {
-    struct PowerSequencerPGOODFault;
+struct PowerSequencerPGOODFault;
 } // namespace Error
 } // namespace Fault
 } // namespace Witherspoon
@@ -41,7 +41,7 @@
 {
 namespace Error
 {
-    struct GPIO;
+struct GPIO;
 } // namespace Error
 } // namespace Callout
 } // namespace Common
@@ -61,7 +61,7 @@
 {
 namespace Error
 {
-    struct PowerOnFailure;
+struct PowerOnFailure;
 } // namespace Error
 } // namespace Fault
 } // namespace Witherspoon
@@ -81,7 +81,7 @@
 {
 namespace Error
 {
-    struct PowerSupplyInputFault;
+struct PowerSupplyInputFault;
 } // namespace Error
 } // namespace Fault
 } // namespace Witherspoon
@@ -101,7 +101,7 @@
 {
 namespace Error
 {
-    struct IIC;
+struct IIC;
 } // namespace Error
 } // namespace Callout
 } // namespace Common
@@ -121,7 +121,7 @@
 {
 namespace Error
 {
-    struct GPUPowerFault;
+struct GPUPowerFault;
 } // namespace Error
 } // namespace Fault
 } // namespace Witherspoon
@@ -141,7 +141,7 @@
 {
 namespace Error
 {
-    struct Shutdown;
+struct Shutdown;
 } // namespace Error
 } // namespace Fault
 } // namespace Witherspoon
@@ -161,7 +161,7 @@
 {
 namespace Error
 {
-    struct Inventory;
+struct Inventory;
 } // namespace Error
 } // namespace Callout
 } // namespace Common
@@ -181,7 +181,7 @@
 {
 namespace Error
 {
-    struct Device;
+struct Device;
 } // namespace Error
 } // namespace Callout
 } // namespace Common
@@ -201,7 +201,7 @@
 {
 namespace Error
 {
-    struct PowerSequencerFault;
+struct PowerSequencerFault;
 } // namespace Error
 } // namespace Fault
 } // namespace Witherspoon
@@ -221,7 +221,7 @@
 {
 namespace Error
 {
-    struct PowerSupplyOutputOvercurrent;
+struct PowerSupplyOutputOvercurrent;
 } // namespace Error
 } // namespace Fault
 } // namespace Witherspoon
@@ -241,7 +241,7 @@
 {
 namespace Error
 {
-    struct PowerSupplyOutputOvervoltage;
+struct PowerSupplyOutputOvervoltage;
 } // namespace Error
 } // namespace Fault
 } // namespace Witherspoon
@@ -261,7 +261,7 @@
 {
 namespace Error
 {
-    struct PowerSupplyFanFault;
+struct PowerSupplyFanFault;
 } // namespace Error
 } // namespace Fault
 } // namespace Witherspoon
@@ -281,7 +281,7 @@
 {
 namespace Error
 {
-    struct PowerSequencerVoltageFault;
+struct PowerSequencerVoltageFault;
 } // namespace Error
 } // namespace Fault
 } // namespace Witherspoon
@@ -301,7 +301,7 @@
 {
 namespace Error
 {
-    struct IPMISensor;
+struct IPMISensor;
 } // namespace Error
 } // namespace Callout
 } // namespace Common
@@ -321,7 +321,7 @@
 {
 namespace Error
 {
-    struct PowerSupplyTemperatureFault;
+struct PowerSupplyTemperatureFault;
 } // namespace Error
 } // namespace Fault
 } // namespace Witherspoon
@@ -341,7 +341,7 @@
 {
 namespace Error
 {
-    struct PowerSupplyShouldBeOn;
+struct PowerSupplyShouldBeOn;
 } // namespace Error
 } // namespace Fault
 } // namespace Witherspoon
@@ -361,7 +361,7 @@
 {
 namespace Error
 {
-    struct GPUOverTemp;
+struct GPUOverTemp;
 } // namespace Error
 } // namespace Fault
 } // namespace Witherspoon
@@ -369,7 +369,6 @@
 } // namespace org
 } // namespace sdbusplus
 
-
 namespace phosphor
 {
 
@@ -391,20 +390,21 @@
 {
     static constexpr auto str = "CALLOUT_ERRNO=%d";
     static constexpr auto str_short = "CALLOUT_ERRNO";
-    using type = std::tuple<std::decay_t<decltype(str)>,int32_t>;
-    explicit constexpr CALLOUT_ERRNO(int32_t a) : _entry(entry(str, a)) {};
+    using type = std::tuple<std::decay_t<decltype(str)>, int32_t>;
+    explicit constexpr CALLOUT_ERRNO(int32_t a) : _entry(entry(str, a)){};
     type _entry;
 };
 struct CALLOUT_DEVICE_PATH
 {
     static constexpr auto str = "CALLOUT_DEVICE_PATH=%s";
     static constexpr auto str_short = "CALLOUT_DEVICE_PATH";
-    using type = std::tuple<std::decay_t<decltype(str)>,const char*>;
-    explicit constexpr CALLOUT_DEVICE_PATH(const char* a) : _entry(entry(str, a)) {};
+    using type = std::tuple<std::decay_t<decltype(str)>, const char*>;
+    explicit constexpr CALLOUT_DEVICE_PATH(const char* a) :
+        _entry(entry(str, a)){};
     type _entry;
 };
 
-}  // namespace _Device
+} // namespace _Device
 
 struct Device
 {
@@ -412,7 +412,6 @@
     using CALLOUT_ERRNO = _Device::CALLOUT_ERRNO;
     using CALLOUT_DEVICE_PATH = _Device::CALLOUT_DEVICE_PATH;
     using metadata_types = std::tuple<CALLOUT_ERRNO, CALLOUT_DEVICE_PATH>;
-
 };
 
 } // namespace Callout
@@ -420,17 +419,17 @@
 } // namespace openbmc_project
 } // namespace xyz
 
-
 namespace details
 {
 
 template <>
-struct map_exception_type<sdbusplus::xyz::openbmc_project::Common::Callout::Error::Device>
+struct map_exception_type<
+    sdbusplus::xyz::openbmc_project::Common::Callout::Error::Device>
 {
     using type = xyz::openbmc_project::Common::Callout::Device;
 };
 
-}
+} // namespace details
 
 namespace xyz
 {
@@ -447,21 +446,23 @@
 {
     static constexpr auto str = "CALLOUT_GPIO_NUM=%u";
     static constexpr auto str_short = "CALLOUT_GPIO_NUM";
-    using type = std::tuple<std::decay_t<decltype(str)>,uint32_t>;
-    explicit constexpr CALLOUT_GPIO_NUM(uint32_t a) : _entry(entry(str, a)) {};
+    using type = std::tuple<std::decay_t<decltype(str)>, uint32_t>;
+    explicit constexpr CALLOUT_GPIO_NUM(uint32_t a) : _entry(entry(str, a)){};
     type _entry;
 };
 
-}  // namespace _GPIO
+} // namespace _GPIO
 
 struct GPIO
 {
     static constexpr auto L = level::ERR;
     using CALLOUT_GPIO_NUM = _GPIO::CALLOUT_GPIO_NUM;
-    using CALLOUT_ERRNO = xyz::openbmc_project::Common::Callout::Device::CALLOUT_ERRNO;
-    using CALLOUT_DEVICE_PATH = xyz::openbmc_project::Common::Callout::Device::CALLOUT_DEVICE_PATH;
-    using metadata_types = std::tuple<CALLOUT_GPIO_NUM, CALLOUT_ERRNO, CALLOUT_DEVICE_PATH>;
-
+    using CALLOUT_ERRNO =
+        xyz::openbmc_project::Common::Callout::Device::CALLOUT_ERRNO;
+    using CALLOUT_DEVICE_PATH =
+        xyz::openbmc_project::Common::Callout::Device::CALLOUT_DEVICE_PATH;
+    using metadata_types =
+        std::tuple<CALLOUT_GPIO_NUM, CALLOUT_ERRNO, CALLOUT_DEVICE_PATH>;
 };
 
 } // namespace Callout
@@ -469,17 +470,17 @@
 } // namespace openbmc_project
 } // namespace xyz
 
-
 namespace details
 {
 
 template <>
-struct map_exception_type<sdbusplus::xyz::openbmc_project::Common::Callout::Error::GPIO>
+struct map_exception_type<
+    sdbusplus::xyz::openbmc_project::Common::Callout::Error::GPIO>
 {
     using type = xyz::openbmc_project::Common::Callout::GPIO;
 };
 
-}
+} // namespace details
 
 namespace xyz
 {
@@ -496,30 +497,32 @@
 {
     static constexpr auto str = "CALLOUT_IIC_BUS=%s";
     static constexpr auto str_short = "CALLOUT_IIC_BUS";
-    using type = std::tuple<std::decay_t<decltype(str)>,const char*>;
-    explicit constexpr CALLOUT_IIC_BUS(const char* a) : _entry(entry(str, a)) {};
+    using type = std::tuple<std::decay_t<decltype(str)>, const char*>;
+    explicit constexpr CALLOUT_IIC_BUS(const char* a) : _entry(entry(str, a)){};
     type _entry;
 };
 struct CALLOUT_IIC_ADDR
 {
     static constexpr auto str = "CALLOUT_IIC_ADDR=0x%hx";
     static constexpr auto str_short = "CALLOUT_IIC_ADDR";
-    using type = std::tuple<std::decay_t<decltype(str)>,uint16_t>;
-    explicit constexpr CALLOUT_IIC_ADDR(uint16_t a) : _entry(entry(str, a)) {};
+    using type = std::tuple<std::decay_t<decltype(str)>, uint16_t>;
+    explicit constexpr CALLOUT_IIC_ADDR(uint16_t a) : _entry(entry(str, a)){};
     type _entry;
 };
 
-}  // namespace _IIC
+} // namespace _IIC
 
 struct IIC
 {
     static constexpr auto L = level::ERR;
     using CALLOUT_IIC_BUS = _IIC::CALLOUT_IIC_BUS;
     using CALLOUT_IIC_ADDR = _IIC::CALLOUT_IIC_ADDR;
-    using CALLOUT_ERRNO = xyz::openbmc_project::Common::Callout::Device::CALLOUT_ERRNO;
-    using CALLOUT_DEVICE_PATH = xyz::openbmc_project::Common::Callout::Device::CALLOUT_DEVICE_PATH;
-    using metadata_types = std::tuple<CALLOUT_IIC_BUS, CALLOUT_IIC_ADDR, CALLOUT_ERRNO, CALLOUT_DEVICE_PATH>;
-
+    using CALLOUT_ERRNO =
+        xyz::openbmc_project::Common::Callout::Device::CALLOUT_ERRNO;
+    using CALLOUT_DEVICE_PATH =
+        xyz::openbmc_project::Common::Callout::Device::CALLOUT_DEVICE_PATH;
+    using metadata_types = std::tuple<CALLOUT_IIC_BUS, CALLOUT_IIC_ADDR,
+                                      CALLOUT_ERRNO, CALLOUT_DEVICE_PATH>;
 };
 
 } // namespace Callout
@@ -527,17 +530,17 @@
 } // namespace openbmc_project
 } // namespace xyz
 
-
 namespace details
 {
 
 template <>
-struct map_exception_type<sdbusplus::xyz::openbmc_project::Common::Callout::Error::IIC>
+struct map_exception_type<
+    sdbusplus::xyz::openbmc_project::Common::Callout::Error::IIC>
 {
     using type = xyz::openbmc_project::Common::Callout::IIC;
 };
 
-}
+} // namespace details
 
 namespace xyz
 {
@@ -554,19 +557,19 @@
 {
     static constexpr auto str = "CALLOUT_INVENTORY_PATH=%s";
     static constexpr auto str_short = "CALLOUT_INVENTORY_PATH";
-    using type = std::tuple<std::decay_t<decltype(str)>,const char*>;
-    explicit constexpr CALLOUT_INVENTORY_PATH(const char* a) : _entry(entry(str, a)) {};
+    using type = std::tuple<std::decay_t<decltype(str)>, const char*>;
+    explicit constexpr CALLOUT_INVENTORY_PATH(const char* a) :
+        _entry(entry(str, a)){};
     type _entry;
 };
 
-}  // namespace _Inventory
+} // namespace _Inventory
 
 struct Inventory
 {
     static constexpr auto L = level::ERR;
     using CALLOUT_INVENTORY_PATH = _Inventory::CALLOUT_INVENTORY_PATH;
     using metadata_types = std::tuple<CALLOUT_INVENTORY_PATH>;
-
 };
 
 } // namespace Callout
@@ -574,17 +577,17 @@
 } // namespace openbmc_project
 } // namespace xyz
 
-
 namespace details
 {
 
 template <>
-struct map_exception_type<sdbusplus::xyz::openbmc_project::Common::Callout::Error::Inventory>
+struct map_exception_type<
+    sdbusplus::xyz::openbmc_project::Common::Callout::Error::Inventory>
 {
     using type = xyz::openbmc_project::Common::Callout::Inventory;
 };
 
-}
+} // namespace details
 
 namespace xyz
 {
@@ -601,19 +604,19 @@
 {
     static constexpr auto str = "CALLOUT_IPMI_SENSOR_NUM=%u";
     static constexpr auto str_short = "CALLOUT_IPMI_SENSOR_NUM";
-    using type = std::tuple<std::decay_t<decltype(str)>,uint32_t>;
-    explicit constexpr CALLOUT_IPMI_SENSOR_NUM(uint32_t a) : _entry(entry(str, a)) {};
+    using type = std::tuple<std::decay_t<decltype(str)>, uint32_t>;
+    explicit constexpr CALLOUT_IPMI_SENSOR_NUM(uint32_t a) :
+        _entry(entry(str, a)){};
     type _entry;
 };
 
-}  // namespace _IPMISensor
+} // namespace _IPMISensor
 
 struct IPMISensor
 {
     static constexpr auto L = level::ERR;
     using CALLOUT_IPMI_SENSOR_NUM = _IPMISensor::CALLOUT_IPMI_SENSOR_NUM;
     using metadata_types = std::tuple<CALLOUT_IPMI_SENSOR_NUM>;
-
 };
 
 } // namespace Callout
@@ -621,17 +624,17 @@
 } // namespace openbmc_project
 } // namespace xyz
 
-
 namespace details
 {
 
 template <>
-struct map_exception_type<sdbusplus::xyz::openbmc_project::Common::Callout::Error::IPMISensor>
+struct map_exception_type<
+    sdbusplus::xyz::openbmc_project::Common::Callout::Error::IPMISensor>
 {
     using type = xyz::openbmc_project::Common::Callout::IPMISensor;
 };
 
-}
+} // namespace details
 
 namespace org
 {
@@ -648,20 +651,20 @@
 {
     static constexpr auto str = "RAW_STATUS=%s";
     static constexpr auto str_short = "RAW_STATUS";
-    using type = std::tuple<std::decay_t<decltype(str)>,const char*>;
-    explicit constexpr RAW_STATUS(const char* a) : _entry(entry(str, a)) {};
+    using type = std::tuple<std::decay_t<decltype(str)>, const char*>;
+    explicit constexpr RAW_STATUS(const char* a) : _entry(entry(str, a)){};
     type _entry;
 };
 
-}  // namespace _PowerSupplyInputFault
+} // namespace _PowerSupplyInputFault
 
 struct PowerSupplyInputFault
 {
     static constexpr auto L = level::ERR;
     using RAW_STATUS = _PowerSupplyInputFault::RAW_STATUS;
-    using CALLOUT_INVENTORY_PATH = xyz::openbmc_project::Common::Callout::Inventory::CALLOUT_INVENTORY_PATH;
+    using CALLOUT_INVENTORY_PATH = xyz::openbmc_project::Common::Callout::
+        Inventory::CALLOUT_INVENTORY_PATH;
     using metadata_types = std::tuple<RAW_STATUS, CALLOUT_INVENTORY_PATH>;
-
 };
 
 } // namespace Fault
@@ -669,17 +672,17 @@
 } // namespace open_power
 } // namespace org
 
-
 namespace details
 {
 
 template <>
-struct map_exception_type<sdbusplus::org::open_power::Witherspoon::Fault::Error::PowerSupplyInputFault>
+struct map_exception_type<sdbusplus::org::open_power::Witherspoon::Fault::
+                              Error::PowerSupplyInputFault>
 {
     using type = org::open_power::Witherspoon::Fault::PowerSupplyInputFault;
 };
 
-}
+} // namespace details
 
 namespace org
 {
@@ -696,20 +699,20 @@
 {
     static constexpr auto str = "RAW_STATUS=%s";
     static constexpr auto str_short = "RAW_STATUS";
-    using type = std::tuple<std::decay_t<decltype(str)>,const char*>;
-    explicit constexpr RAW_STATUS(const char* a) : _entry(entry(str, a)) {};
+    using type = std::tuple<std::decay_t<decltype(str)>, const char*>;
+    explicit constexpr RAW_STATUS(const char* a) : _entry(entry(str, a)){};
     type _entry;
 };
 
-}  // namespace _PowerSupplyShouldBeOn
+} // namespace _PowerSupplyShouldBeOn
 
 struct PowerSupplyShouldBeOn
 {
     static constexpr auto L = level::ERR;
     using RAW_STATUS = _PowerSupplyShouldBeOn::RAW_STATUS;
-    using CALLOUT_INVENTORY_PATH = xyz::openbmc_project::Common::Callout::Inventory::CALLOUT_INVENTORY_PATH;
+    using CALLOUT_INVENTORY_PATH = xyz::openbmc_project::Common::Callout::
+        Inventory::CALLOUT_INVENTORY_PATH;
     using metadata_types = std::tuple<RAW_STATUS, CALLOUT_INVENTORY_PATH>;
-
 };
 
 } // namespace Fault
@@ -717,17 +720,17 @@
 } // namespace open_power
 } // namespace org
 
-
 namespace details
 {
 
 template <>
-struct map_exception_type<sdbusplus::org::open_power::Witherspoon::Fault::Error::PowerSupplyShouldBeOn>
+struct map_exception_type<sdbusplus::org::open_power::Witherspoon::Fault::
+                              Error::PowerSupplyShouldBeOn>
 {
     using type = org::open_power::Witherspoon::Fault::PowerSupplyShouldBeOn;
 };
 
-}
+} // namespace details
 
 namespace org
 {
@@ -744,20 +747,20 @@
 {
     static constexpr auto str = "RAW_STATUS=%s";
     static constexpr auto str_short = "RAW_STATUS";
-    using type = std::tuple<std::decay_t<decltype(str)>,const char*>;
-    explicit constexpr RAW_STATUS(const char* a) : _entry(entry(str, a)) {};
+    using type = std::tuple<std::decay_t<decltype(str)>, const char*>;
+    explicit constexpr RAW_STATUS(const char* a) : _entry(entry(str, a)){};
     type _entry;
 };
 
-}  // namespace _PowerSupplyOutputOvercurrent
+} // namespace _PowerSupplyOutputOvercurrent
 
 struct PowerSupplyOutputOvercurrent
 {
     static constexpr auto L = level::ERR;
     using RAW_STATUS = _PowerSupplyOutputOvercurrent::RAW_STATUS;
-    using CALLOUT_INVENTORY_PATH = xyz::openbmc_project::Common::Callout::Inventory::CALLOUT_INVENTORY_PATH;
+    using CALLOUT_INVENTORY_PATH = xyz::openbmc_project::Common::Callout::
+        Inventory::CALLOUT_INVENTORY_PATH;
     using metadata_types = std::tuple<RAW_STATUS, CALLOUT_INVENTORY_PATH>;
-
 };
 
 } // namespace Fault
@@ -765,17 +768,18 @@
 } // namespace open_power
 } // namespace org
 
-
 namespace details
 {
 
 template <>
-struct map_exception_type<sdbusplus::org::open_power::Witherspoon::Fault::Error::PowerSupplyOutputOvercurrent>
+struct map_exception_type<sdbusplus::org::open_power::Witherspoon::Fault::
+                              Error::PowerSupplyOutputOvercurrent>
 {
-    using type = org::open_power::Witherspoon::Fault::PowerSupplyOutputOvercurrent;
+    using type =
+        org::open_power::Witherspoon::Fault::PowerSupplyOutputOvercurrent;
 };
 
-}
+} // namespace details
 
 namespace org
 {
@@ -792,20 +796,20 @@
 {
     static constexpr auto str = "RAW_STATUS=%s";
     static constexpr auto str_short = "RAW_STATUS";
-    using type = std::tuple<std::decay_t<decltype(str)>,const char*>;
-    explicit constexpr RAW_STATUS(const char* a) : _entry(entry(str, a)) {};
+    using type = std::tuple<std::decay_t<decltype(str)>, const char*>;
+    explicit constexpr RAW_STATUS(const char* a) : _entry(entry(str, a)){};
     type _entry;
 };
 
-}  // namespace _PowerSupplyOutputOvervoltage
+} // namespace _PowerSupplyOutputOvervoltage
 
 struct PowerSupplyOutputOvervoltage
 {
     static constexpr auto L = level::ERR;
     using RAW_STATUS = _PowerSupplyOutputOvervoltage::RAW_STATUS;
-    using CALLOUT_INVENTORY_PATH = xyz::openbmc_project::Common::Callout::Inventory::CALLOUT_INVENTORY_PATH;
+    using CALLOUT_INVENTORY_PATH = xyz::openbmc_project::Common::Callout::
+        Inventory::CALLOUT_INVENTORY_PATH;
     using metadata_types = std::tuple<RAW_STATUS, CALLOUT_INVENTORY_PATH>;
-
 };
 
 } // namespace Fault
@@ -813,17 +817,18 @@
 } // namespace open_power
 } // namespace org
 
-
 namespace details
 {
 
 template <>
-struct map_exception_type<sdbusplus::org::open_power::Witherspoon::Fault::Error::PowerSupplyOutputOvervoltage>
+struct map_exception_type<sdbusplus::org::open_power::Witherspoon::Fault::
+                              Error::PowerSupplyOutputOvervoltage>
 {
-    using type = org::open_power::Witherspoon::Fault::PowerSupplyOutputOvervoltage;
+    using type =
+        org::open_power::Witherspoon::Fault::PowerSupplyOutputOvervoltage;
 };
 
-}
+} // namespace details
 
 namespace org
 {
@@ -840,20 +845,20 @@
 {
     static constexpr auto str = "RAW_STATUS=%s";
     static constexpr auto str_short = "RAW_STATUS";
-    using type = std::tuple<std::decay_t<decltype(str)>,const char*>;
-    explicit constexpr RAW_STATUS(const char* a) : _entry(entry(str, a)) {};
+    using type = std::tuple<std::decay_t<decltype(str)>, const char*>;
+    explicit constexpr RAW_STATUS(const char* a) : _entry(entry(str, a)){};
     type _entry;
 };
 
-}  // namespace _PowerSupplyFanFault
+} // namespace _PowerSupplyFanFault
 
 struct PowerSupplyFanFault
 {
     static constexpr auto L = level::ERR;
     using RAW_STATUS = _PowerSupplyFanFault::RAW_STATUS;
-    using CALLOUT_INVENTORY_PATH = xyz::openbmc_project::Common::Callout::Inventory::CALLOUT_INVENTORY_PATH;
+    using CALLOUT_INVENTORY_PATH = xyz::openbmc_project::Common::Callout::
+        Inventory::CALLOUT_INVENTORY_PATH;
     using metadata_types = std::tuple<RAW_STATUS, CALLOUT_INVENTORY_PATH>;
-
 };
 
 } // namespace Fault
@@ -861,17 +866,17 @@
 } // namespace open_power
 } // namespace org
 
-
 namespace details
 {
 
 template <>
-struct map_exception_type<sdbusplus::org::open_power::Witherspoon::Fault::Error::PowerSupplyFanFault>
+struct map_exception_type<
+    sdbusplus::org::open_power::Witherspoon::Fault::Error::PowerSupplyFanFault>
 {
     using type = org::open_power::Witherspoon::Fault::PowerSupplyFanFault;
 };
 
-}
+} // namespace details
 
 namespace org
 {
@@ -888,20 +893,20 @@
 {
     static constexpr auto str = "RAW_STATUS=%s";
     static constexpr auto str_short = "RAW_STATUS";
-    using type = std::tuple<std::decay_t<decltype(str)>,const char*>;
-    explicit constexpr RAW_STATUS(const char* a) : _entry(entry(str, a)) {};
+    using type = std::tuple<std::decay_t<decltype(str)>, const char*>;
+    explicit constexpr RAW_STATUS(const char* a) : _entry(entry(str, a)){};
     type _entry;
 };
 
-}  // namespace _PowerSupplyTemperatureFault
+} // namespace _PowerSupplyTemperatureFault
 
 struct PowerSupplyTemperatureFault
 {
     static constexpr auto L = level::ERR;
     using RAW_STATUS = _PowerSupplyTemperatureFault::RAW_STATUS;
-    using CALLOUT_INVENTORY_PATH = xyz::openbmc_project::Common::Callout::Inventory::CALLOUT_INVENTORY_PATH;
+    using CALLOUT_INVENTORY_PATH = xyz::openbmc_project::Common::Callout::
+        Inventory::CALLOUT_INVENTORY_PATH;
     using metadata_types = std::tuple<RAW_STATUS, CALLOUT_INVENTORY_PATH>;
-
 };
 
 } // namespace Fault
@@ -909,17 +914,18 @@
 } // namespace open_power
 } // namespace org
 
-
 namespace details
 {
 
 template <>
-struct map_exception_type<sdbusplus::org::open_power::Witherspoon::Fault::Error::PowerSupplyTemperatureFault>
+struct map_exception_type<sdbusplus::org::open_power::Witherspoon::Fault::
+                              Error::PowerSupplyTemperatureFault>
 {
-    using type = org::open_power::Witherspoon::Fault::PowerSupplyTemperatureFault;
+    using type =
+        org::open_power::Witherspoon::Fault::PowerSupplyTemperatureFault;
 };
 
-}
+} // namespace details
 
 namespace org
 {
@@ -932,14 +938,12 @@
 namespace _Shutdown
 {
 
-
-}  // namespace _Shutdown
+} // namespace _Shutdown
 
 struct Shutdown
 {
     static constexpr auto L = level::ERR;
     using metadata_types = std::tuple<>;
-
 };
 
 } // namespace Fault
@@ -947,17 +951,17 @@
 } // namespace open_power
 } // namespace org
 
-
 namespace details
 {
 
 template <>
-struct map_exception_type<sdbusplus::org::open_power::Witherspoon::Fault::Error::Shutdown>
+struct map_exception_type<
+    sdbusplus::org::open_power::Witherspoon::Fault::Error::Shutdown>
 {
     using type = org::open_power::Witherspoon::Fault::Shutdown;
 };
 
-}
+} // namespace details
 
 namespace org
 {
@@ -970,14 +974,12 @@
 namespace _PowerOnFailure
 {
 
-
-}  // namespace _PowerOnFailure
+} // namespace _PowerOnFailure
 
 struct PowerOnFailure
 {
     static constexpr auto L = level::ERR;
     using metadata_types = std::tuple<>;
-
 };
 
 } // namespace Fault
@@ -985,17 +987,17 @@
 } // namespace open_power
 } // namespace org
 
-
 namespace details
 {
 
 template <>
-struct map_exception_type<sdbusplus::org::open_power::Witherspoon::Fault::Error::PowerOnFailure>
+struct map_exception_type<
+    sdbusplus::org::open_power::Witherspoon::Fault::Error::PowerOnFailure>
 {
     using type = org::open_power::Witherspoon::Fault::PowerOnFailure;
 };
 
-}
+} // namespace details
 
 namespace org
 {
@@ -1012,28 +1014,28 @@
 {
     static constexpr auto str = "RAIL=%d";
     static constexpr auto str_short = "RAIL";
-    using type = std::tuple<std::decay_t<decltype(str)>,uint16_t>;
-    explicit constexpr RAIL(uint16_t a) : _entry(entry(str, a)) {};
+    using type = std::tuple<std::decay_t<decltype(str)>, uint16_t>;
+    explicit constexpr RAIL(uint16_t a) : _entry(entry(str, a)){};
     type _entry;
 };
 struct RAIL_NAME
 {
     static constexpr auto str = "RAIL_NAME=%s";
     static constexpr auto str_short = "RAIL_NAME";
-    using type = std::tuple<std::decay_t<decltype(str)>,const char*>;
-    explicit constexpr RAIL_NAME(const char* a) : _entry(entry(str, a)) {};
+    using type = std::tuple<std::decay_t<decltype(str)>, const char*>;
+    explicit constexpr RAIL_NAME(const char* a) : _entry(entry(str, a)){};
     type _entry;
 };
 struct RAW_STATUS
 {
     static constexpr auto str = "RAW_STATUS=%s";
     static constexpr auto str_short = "RAW_STATUS";
-    using type = std::tuple<std::decay_t<decltype(str)>,const char*>;
-    explicit constexpr RAW_STATUS(const char* a) : _entry(entry(str, a)) {};
+    using type = std::tuple<std::decay_t<decltype(str)>, const char*>;
+    explicit constexpr RAW_STATUS(const char* a) : _entry(entry(str, a)){};
     type _entry;
 };
 
-}  // namespace _PowerSequencerVoltageFault
+} // namespace _PowerSequencerVoltageFault
 
 struct PowerSequencerVoltageFault
 {
@@ -1042,7 +1044,6 @@
     using RAIL_NAME = _PowerSequencerVoltageFault::RAIL_NAME;
     using RAW_STATUS = _PowerSequencerVoltageFault::RAW_STATUS;
     using metadata_types = std::tuple<RAIL, RAIL_NAME, RAW_STATUS>;
-
 };
 
 } // namespace Fault
@@ -1050,17 +1051,18 @@
 } // namespace open_power
 } // namespace org
 
-
 namespace details
 {
 
 template <>
-struct map_exception_type<sdbusplus::org::open_power::Witherspoon::Fault::Error::PowerSequencerVoltageFault>
+struct map_exception_type<sdbusplus::org::open_power::Witherspoon::Fault::
+                              Error::PowerSequencerVoltageFault>
 {
-    using type = org::open_power::Witherspoon::Fault::PowerSequencerVoltageFault;
+    using type =
+        org::open_power::Witherspoon::Fault::PowerSequencerVoltageFault;
 };
 
-}
+} // namespace details
 
 namespace org
 {
@@ -1077,28 +1079,28 @@
 {
     static constexpr auto str = "INPUT_NUM=%d";
     static constexpr auto str_short = "INPUT_NUM";
-    using type = std::tuple<std::decay_t<decltype(str)>,uint16_t>;
-    explicit constexpr INPUT_NUM(uint16_t a) : _entry(entry(str, a)) {};
+    using type = std::tuple<std::decay_t<decltype(str)>, uint16_t>;
+    explicit constexpr INPUT_NUM(uint16_t a) : _entry(entry(str, a)){};
     type _entry;
 };
 struct INPUT_NAME
 {
     static constexpr auto str = "INPUT_NAME=%s";
     static constexpr auto str_short = "INPUT_NAME";
-    using type = std::tuple<std::decay_t<decltype(str)>,const char*>;
-    explicit constexpr INPUT_NAME(const char* a) : _entry(entry(str, a)) {};
+    using type = std::tuple<std::decay_t<decltype(str)>, const char*>;
+    explicit constexpr INPUT_NAME(const char* a) : _entry(entry(str, a)){};
     type _entry;
 };
 struct RAW_STATUS
 {
     static constexpr auto str = "RAW_STATUS=%s";
     static constexpr auto str_short = "RAW_STATUS";
-    using type = std::tuple<std::decay_t<decltype(str)>,const char*>;
-    explicit constexpr RAW_STATUS(const char* a) : _entry(entry(str, a)) {};
+    using type = std::tuple<std::decay_t<decltype(str)>, const char*>;
+    explicit constexpr RAW_STATUS(const char* a) : _entry(entry(str, a)){};
     type _entry;
 };
 
-}  // namespace _PowerSequencerPGOODFault
+} // namespace _PowerSequencerPGOODFault
 
 struct PowerSequencerPGOODFault
 {
@@ -1107,7 +1109,6 @@
     using INPUT_NAME = _PowerSequencerPGOODFault::INPUT_NAME;
     using RAW_STATUS = _PowerSequencerPGOODFault::RAW_STATUS;
     using metadata_types = std::tuple<INPUT_NUM, INPUT_NAME, RAW_STATUS>;
-
 };
 
 } // namespace Fault
@@ -1115,17 +1116,17 @@
 } // namespace open_power
 } // namespace org
 
-
 namespace details
 {
 
 template <>
-struct map_exception_type<sdbusplus::org::open_power::Witherspoon::Fault::Error::PowerSequencerPGOODFault>
+struct map_exception_type<sdbusplus::org::open_power::Witherspoon::Fault::
+                              Error::PowerSequencerPGOODFault>
 {
     using type = org::open_power::Witherspoon::Fault::PowerSequencerPGOODFault;
 };
 
-}
+} // namespace details
 
 namespace org
 {
@@ -1142,19 +1143,18 @@
 {
     static constexpr auto str = "RAW_STATUS=%s";
     static constexpr auto str_short = "RAW_STATUS";
-    using type = std::tuple<std::decay_t<decltype(str)>,const char*>;
-    explicit constexpr RAW_STATUS(const char* a) : _entry(entry(str, a)) {};
+    using type = std::tuple<std::decay_t<decltype(str)>, const char*>;
+    explicit constexpr RAW_STATUS(const char* a) : _entry(entry(str, a)){};
     type _entry;
 };
 
-}  // namespace _PowerSequencerFault
+} // namespace _PowerSequencerFault
 
 struct PowerSequencerFault
 {
     static constexpr auto L = level::ERR;
     using RAW_STATUS = _PowerSequencerFault::RAW_STATUS;
     using metadata_types = std::tuple<RAW_STATUS>;
-
 };
 
 } // namespace Fault
@@ -1162,17 +1162,17 @@
 } // namespace open_power
 } // namespace org
 
-
 namespace details
 {
 
 template <>
-struct map_exception_type<sdbusplus::org::open_power::Witherspoon::Fault::Error::PowerSequencerFault>
+struct map_exception_type<
+    sdbusplus::org::open_power::Witherspoon::Fault::Error::PowerSequencerFault>
 {
     using type = org::open_power::Witherspoon::Fault::PowerSequencerFault;
 };
 
-}
+} // namespace details
 
 namespace org
 {
@@ -1189,20 +1189,20 @@
 {
     static constexpr auto str = "RAW_STATUS=%s";
     static constexpr auto str_short = "RAW_STATUS";
-    using type = std::tuple<std::decay_t<decltype(str)>,const char*>;
-    explicit constexpr RAW_STATUS(const char* a) : _entry(entry(str, a)) {};
+    using type = std::tuple<std::decay_t<decltype(str)>, const char*>;
+    explicit constexpr RAW_STATUS(const char* a) : _entry(entry(str, a)){};
     type _entry;
 };
 
-}  // namespace _GPUPowerFault
+} // namespace _GPUPowerFault
 
 struct GPUPowerFault
 {
     static constexpr auto L = level::ERR;
     using RAW_STATUS = _GPUPowerFault::RAW_STATUS;
-    using CALLOUT_INVENTORY_PATH = xyz::openbmc_project::Common::Callout::Inventory::CALLOUT_INVENTORY_PATH;
+    using CALLOUT_INVENTORY_PATH = xyz::openbmc_project::Common::Callout::
+        Inventory::CALLOUT_INVENTORY_PATH;
     using metadata_types = std::tuple<RAW_STATUS, CALLOUT_INVENTORY_PATH>;
-
 };
 
 } // namespace Fault
@@ -1210,17 +1210,17 @@
 } // namespace open_power
 } // namespace org
 
-
 namespace details
 {
 
 template <>
-struct map_exception_type<sdbusplus::org::open_power::Witherspoon::Fault::Error::GPUPowerFault>
+struct map_exception_type<
+    sdbusplus::org::open_power::Witherspoon::Fault::Error::GPUPowerFault>
 {
     using type = org::open_power::Witherspoon::Fault::GPUPowerFault;
 };
 
-}
+} // namespace details
 
 namespace org
 {
@@ -1237,20 +1237,20 @@
 {
     static constexpr auto str = "RAW_STATUS=%s";
     static constexpr auto str_short = "RAW_STATUS";
-    using type = std::tuple<std::decay_t<decltype(str)>,const char*>;
-    explicit constexpr RAW_STATUS(const char* a) : _entry(entry(str, a)) {};
+    using type = std::tuple<std::decay_t<decltype(str)>, const char*>;
+    explicit constexpr RAW_STATUS(const char* a) : _entry(entry(str, a)){};
     type _entry;
 };
 
-}  // namespace _GPUOverTemp
+} // namespace _GPUOverTemp
 
 struct GPUOverTemp
 {
     static constexpr auto L = level::ERR;
     using RAW_STATUS = _GPUOverTemp::RAW_STATUS;
-    using CALLOUT_INVENTORY_PATH = xyz::openbmc_project::Common::Callout::Inventory::CALLOUT_INVENTORY_PATH;
+    using CALLOUT_INVENTORY_PATH = xyz::openbmc_project::Common::Callout::
+        Inventory::CALLOUT_INVENTORY_PATH;
     using metadata_types = std::tuple<RAW_STATUS, CALLOUT_INVENTORY_PATH>;
-
 };
 
 } // namespace Fault
@@ -1258,18 +1258,17 @@
 } // namespace open_power
 } // namespace org
 
-
 namespace details
 {
 
 template <>
-struct map_exception_type<sdbusplus::org::open_power::Witherspoon::Fault::Error::GPUOverTemp>
+struct map_exception_type<
+    sdbusplus::org::open_power::Witherspoon::Fault::Error::GPUOverTemp>
 {
     using type = org::open_power::Witherspoon::Fault::GPUOverTemp;
 };
 
-}
-
+} // namespace details
 
 } // namespace logging
 
