14416fce6SCezary Zwolak #include "utils/conversion_trigger.hpp"
24416fce6SCezary Zwolak 
34416fce6SCezary Zwolak #include "utils/transform.hpp"
44416fce6SCezary Zwolak 
54416fce6SCezary Zwolak #include <sdbusplus/exception.hpp>
64416fce6SCezary Zwolak 
74416fce6SCezary Zwolak namespace utils
84416fce6SCezary Zwolak {
94416fce6SCezary Zwolak namespace ts = utils::tstring;
104416fce6SCezary Zwolak 
114416fce6SCezary Zwolak LabeledTriggerThresholdParams ToLabeledThresholdParamConversion::operator()(
124416fce6SCezary Zwolak     const std::monostate& arg) const
134416fce6SCezary Zwolak {
144416fce6SCezary Zwolak     throw sdbusplus::exception::SdBusError(
154416fce6SCezary Zwolak         static_cast<int>(std::errc::invalid_argument),
164416fce6SCezary Zwolak         "Provided threshold parameter is invalid");
174416fce6SCezary Zwolak }
184416fce6SCezary Zwolak 
194416fce6SCezary Zwolak LabeledTriggerThresholdParams ToLabeledThresholdParamConversion::operator()(
204416fce6SCezary Zwolak     const std::vector<numeric::ThresholdParam>& arg) const
214416fce6SCezary Zwolak {
224416fce6SCezary Zwolak     return utils::transform(arg, [](const auto& thresholdParam) {
234416fce6SCezary Zwolak         const auto& [type, dwellTime, direction, thresholdValue] =
244416fce6SCezary Zwolak             thresholdParam;
2551497a0cSKrzysztof Grobelny         return numeric::LabeledThresholdParam(numeric::toType(type), dwellTime,
2651497a0cSKrzysztof Grobelny                                               numeric::toDirection(direction),
2751497a0cSKrzysztof Grobelny                                               thresholdValue);
284416fce6SCezary Zwolak     });
294416fce6SCezary Zwolak }
304416fce6SCezary Zwolak 
314416fce6SCezary Zwolak LabeledTriggerThresholdParams ToLabeledThresholdParamConversion::operator()(
324416fce6SCezary Zwolak     const std::vector<discrete::ThresholdParam>& arg) const
334416fce6SCezary Zwolak {
344416fce6SCezary Zwolak     return utils::transform(arg, [](const auto& thresholdParam) {
354416fce6SCezary Zwolak         const auto& [userId, severity, dwellTime, thresholdValue] =
364416fce6SCezary Zwolak             thresholdParam;
374416fce6SCezary Zwolak         return discrete::LabeledThresholdParam(
3851497a0cSKrzysztof Grobelny             userId, discrete::toSeverity(severity), dwellTime, thresholdValue);
394416fce6SCezary Zwolak     });
404416fce6SCezary Zwolak }
414416fce6SCezary Zwolak 
424416fce6SCezary Zwolak TriggerThresholdParams FromLabeledThresholdParamConversion::operator()(
434416fce6SCezary Zwolak     const std::vector<numeric::LabeledThresholdParam>& arg) const
444416fce6SCezary Zwolak {
454416fce6SCezary Zwolak     return utils::transform(
464416fce6SCezary Zwolak         arg, [](const numeric::LabeledThresholdParam& labeledThresholdParam) {
474416fce6SCezary Zwolak             return numeric::ThresholdParam(
484416fce6SCezary Zwolak                 numeric::typeToString(
494416fce6SCezary Zwolak                     labeledThresholdParam.at_label<ts::Type>()),
504416fce6SCezary Zwolak                 labeledThresholdParam.at_label<ts::DwellTime>(),
514416fce6SCezary Zwolak                 numeric::directionToString(
524416fce6SCezary Zwolak                     labeledThresholdParam.at_label<ts::Direction>()),
534416fce6SCezary Zwolak                 labeledThresholdParam.at_label<ts::ThresholdValue>());
544416fce6SCezary Zwolak         });
554416fce6SCezary Zwolak }
564416fce6SCezary Zwolak 
574416fce6SCezary Zwolak TriggerThresholdParams FromLabeledThresholdParamConversion::operator()(
584416fce6SCezary Zwolak     const std::vector<discrete::LabeledThresholdParam>& arg) const
594416fce6SCezary Zwolak {
604416fce6SCezary Zwolak     return utils::transform(
614416fce6SCezary Zwolak         arg, [](const discrete::LabeledThresholdParam& labeledThresholdParam) {
624416fce6SCezary Zwolak             return discrete::ThresholdParam(
634416fce6SCezary Zwolak                 labeledThresholdParam.at_label<ts::UserId>(),
644416fce6SCezary Zwolak                 discrete::severityToString(
654416fce6SCezary Zwolak                     labeledThresholdParam.at_label<ts::Severity>()),
664416fce6SCezary Zwolak                 labeledThresholdParam.at_label<ts::DwellTime>(),
674416fce6SCezary Zwolak                 labeledThresholdParam.at_label<ts::ThresholdValue>());
684416fce6SCezary Zwolak         });
694416fce6SCezary Zwolak }
704416fce6SCezary Zwolak 
714416fce6SCezary Zwolak SensorsInfo fromLabeledSensorsInfo(const std::vector<LabeledSensorInfo>& infos)
724416fce6SCezary Zwolak {
734416fce6SCezary Zwolak     return utils::transform(infos, [](const LabeledSensorInfo& val) {
744416fce6SCezary Zwolak         return SensorsInfo::value_type(
754416fce6SCezary Zwolak             sdbusplus::message::object_path(val.at_label<ts::SensorPath>()),
76*b8cc78ddSKrzysztof Grobelny             val.at_label<ts::Metadata>());
774416fce6SCezary Zwolak     });
784416fce6SCezary Zwolak }
794416fce6SCezary Zwolak 
804416fce6SCezary Zwolak nlohmann::json labeledThresholdParamsToJson(
814416fce6SCezary Zwolak     const LabeledTriggerThresholdParams& labeledThresholdParams)
824416fce6SCezary Zwolak {
834416fce6SCezary Zwolak     return std::visit([](const auto& lt) { return nlohmann::json(lt); },
844416fce6SCezary Zwolak                       labeledThresholdParams);
854416fce6SCezary Zwolak }
864416fce6SCezary Zwolak 
874416fce6SCezary Zwolak } // namespace utils
88