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 
3094f71c51SSzymon Dompke TriggerThresholdParams
3194f71c51SSzymon Dompke     fromLabeledThresholdParam(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>
48*3a1c297aSPatrick Williams     requires is_variant_v<VariantT>
isFirstElementOfType(const std::vector<VariantT> & collection)49*3a1c297aSPatrick Williams bool 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