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; 13*583ba441SPatrick Williams LabeledTriggerThresholdParams operator()( 14*583ba441SPatrick Williams const std::vector<numeric::ThresholdParam>& arg) const; 15*583ba441SPatrick Williams LabeledTriggerThresholdParams operator()( 16*583ba441SPatrick Williams 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*583ba441SPatrick Williams TriggerThresholdParams fromLabeledThresholdParam( 31*583ba441SPatrick Williams const std::vector<LabeledThresholdParam>& params); 3294f71c51SSzymon Dompke 334416fce6SCezary Zwolak nlohmann::json labeledThresholdParamsToJson( 344416fce6SCezary Zwolak const LabeledTriggerThresholdParams& labeledThresholdParams); 354416fce6SCezary Zwolak 3694f71c51SSzymon Dompke template <typename T> 3794f71c51SSzymon Dompke struct is_variant : std::false_type 3894f71c51SSzymon Dompke {}; 3994f71c51SSzymon Dompke 4094f71c51SSzymon Dompke template <typename... Args> 4194f71c51SSzymon Dompke struct is_variant<std::variant<Args...>> : std::true_type 4294f71c51SSzymon Dompke {}; 4394f71c51SSzymon Dompke 4494f71c51SSzymon Dompke template <typename T> 4594f71c51SSzymon Dompke inline constexpr bool is_variant_v = is_variant<T>::value; 4694f71c51SSzymon Dompke 4794f71c51SSzymon Dompke template <typename AlternativeT, typename VariantT> 483a1c297aSPatrick Williams requires is_variant_v<VariantT> isFirstElementOfType(const std::vector<VariantT> & collection)493a1c297aSPatrick Williamsbool isFirstElementOfType(const std::vector<VariantT>& collection) 5094f71c51SSzymon Dompke { 5194f71c51SSzymon Dompke if (collection.empty()) 5294f71c51SSzymon Dompke { 5394f71c51SSzymon Dompke return false; 5494f71c51SSzymon Dompke } 5594f71c51SSzymon Dompke return std::holds_alternative<AlternativeT>(*collection.begin()); 5694f71c51SSzymon Dompke } 5794f71c51SSzymon Dompke 58aa572361SSzymon Dompke double stodStrict(const std::string& str); 59aa572361SSzymon Dompke 604416fce6SCezary Zwolak } // namespace utils 61