14416fce6SCezary Zwolak #pragma once 24416fce6SCezary Zwolak 34416fce6SCezary Zwolak #include "interfaces/json_storage.hpp" 4dcc4e193SKrzysztof Grobelny #include "types/trigger_types.hpp" 54416fce6SCezary Zwolak 64416fce6SCezary Zwolak namespace utils 74416fce6SCezary Zwolak { 84416fce6SCezary Zwolak 94416fce6SCezary Zwolak class ToLabeledThresholdParamConversion 104416fce6SCezary Zwolak { 114416fce6SCezary Zwolak public: 124416fce6SCezary Zwolak LabeledTriggerThresholdParams operator()(const std::monostate& arg) const; 134416fce6SCezary Zwolak LabeledTriggerThresholdParams 144416fce6SCezary Zwolak operator()(const std::vector<numeric::ThresholdParam>& arg) const; 154416fce6SCezary Zwolak LabeledTriggerThresholdParams 164416fce6SCezary Zwolak operator()(const std::vector<discrete::ThresholdParam>& arg) const; 174416fce6SCezary Zwolak }; 184416fce6SCezary Zwolak 194416fce6SCezary Zwolak class FromLabeledThresholdParamConversion 204416fce6SCezary Zwolak { 214416fce6SCezary Zwolak public: 224416fce6SCezary Zwolak TriggerThresholdParams operator()( 234416fce6SCezary Zwolak const std::vector<numeric::LabeledThresholdParam>& arg) const; 244416fce6SCezary Zwolak TriggerThresholdParams operator()( 254416fce6SCezary Zwolak const std::vector<discrete::LabeledThresholdParam>& arg) const; 264416fce6SCezary Zwolak }; 274416fce6SCezary Zwolak 284416fce6SCezary Zwolak SensorsInfo fromLabeledSensorsInfo(const std::vector<LabeledSensorInfo>& infos); 294416fce6SCezary Zwolak 30*94f71c51SSzymon Dompke TriggerThresholdParams 31*94f71c51SSzymon Dompke fromLabeledThresholdParam(const std::vector<LabeledThresholdParam>& params); 32*94f71c51SSzymon Dompke 334416fce6SCezary Zwolak nlohmann::json labeledThresholdParamsToJson( 344416fce6SCezary Zwolak const LabeledTriggerThresholdParams& labeledThresholdParams); 354416fce6SCezary Zwolak 36*94f71c51SSzymon Dompke template <typename T> 37*94f71c51SSzymon Dompke struct is_variant : std::false_type 38*94f71c51SSzymon Dompke {}; 39*94f71c51SSzymon Dompke 40*94f71c51SSzymon Dompke template <typename... Args> 41*94f71c51SSzymon Dompke struct is_variant<std::variant<Args...>> : std::true_type 42*94f71c51SSzymon Dompke {}; 43*94f71c51SSzymon Dompke 44*94f71c51SSzymon Dompke template <typename T> 45*94f71c51SSzymon Dompke inline constexpr bool is_variant_v = is_variant<T>::value; 46*94f71c51SSzymon Dompke 47*94f71c51SSzymon Dompke template <typename AlternativeT, typename VariantT> 48*94f71c51SSzymon Dompke requires is_variant_v<VariantT> 49*94f71c51SSzymon Dompke bool isFirstElementOfType(const std::vector<VariantT>& collection) 50*94f71c51SSzymon Dompke { 51*94f71c51SSzymon Dompke if (collection.empty()) 52*94f71c51SSzymon Dompke { 53*94f71c51SSzymon Dompke return false; 54*94f71c51SSzymon Dompke } 55*94f71c51SSzymon Dompke return std::holds_alternative<AlternativeT>(*collection.begin()); 56*94f71c51SSzymon Dompke } 57*94f71c51SSzymon Dompke 584416fce6SCezary Zwolak } // namespace utils 59