diff options
-rw-r--r-- | sensorhandler.cpp | 12 | ||||
-rw-r--r-- | utils.hpp | 21 |
2 files changed, 29 insertions, 4 deletions
diff --git a/sensorhandler.cpp b/sensorhandler.cpp index ee62e17..609fdfd 100644 --- a/sensorhandler.cpp +++ b/sensorhandler.cpp @@ -619,8 +619,10 @@ void getSensorThresholds(uint8_t sensorNum, info.sensorPath, warningThreshIntf); - double warnLow = warnThresholds["WarningLow"].get<int64_t>(); - double warnHigh = warnThresholds["WarningHigh"].get<int64_t>(); + double warnLow = mapbox::util::apply_visitor(ipmi::VariantToDoubleVisitor(), + warnThresholds["WarningLow"]); + double warnHigh = mapbox::util::apply_visitor( + ipmi::VariantToDoubleVisitor(), warnThresholds["WarningHigh"]); if (warnLow != 0) { @@ -644,8 +646,10 @@ void getSensorThresholds(uint8_t sensorNum, service, info.sensorPath, criticalThreshIntf); - double critLow = critThresholds["CriticalLow"].get<int64_t>(); - double critHigh = critThresholds["CriticalHigh"].get<int64_t>(); + double critLow = mapbox::util::apply_visitor(ipmi::VariantToDoubleVisitor(), + critThresholds["CriticalLow"]); + double critHigh = mapbox::util::apply_visitor( + ipmi::VariantToDoubleVisitor(), critThresholds["CriticalHigh"]); if (critLow != 0) { @@ -208,6 +208,27 @@ ObjectTree getAllAncestors(sdbusplus::bus::bus& bus, const std::string& path, InterfaceList&& interfaces); +/** @struct VariantToDoubleVisitor + * @brief Visitor to convert variants to doubles + * @details Performs a static cast on the underlying type + */ +struct VariantToDoubleVisitor +{ + template <typename T> + std::enable_if_t<std::is_arithmetic<T>::value, double> + operator()(const T &t) const + { + return static_cast<double>(t); + } + + template <typename T> + std::enable_if_t<!std::is_arithmetic<T>::value, double> + operator()(const T &t) const + { + throw std::invalid_argument("Cannot translate type to double"); + } +}; + namespace method_no_args { |