blob: 8719df2e80ad3d5252d60e9a15146da89e819803 [file] [log] [blame]
Cezary Zwolak4416fce2021-03-17 03:21:06 +01001#pragma once
2
3#include "interfaces/json_storage.hpp"
Krzysztof Grobelnydcc4e192021-03-08 09:09:34 +00004#include "types/trigger_types.hpp"
Cezary Zwolak4416fce2021-03-17 03:21:06 +01005
6namespace utils
7{
8
9class ToLabeledThresholdParamConversion
10{
11 public:
12 LabeledTriggerThresholdParams operator()(const std::monostate& arg) const;
13 LabeledTriggerThresholdParams
14 operator()(const std::vector<numeric::ThresholdParam>& arg) const;
15 LabeledTriggerThresholdParams
16 operator()(const std::vector<discrete::ThresholdParam>& arg) const;
17};
18
19class FromLabeledThresholdParamConversion
20{
21 public:
22 TriggerThresholdParams operator()(
23 const std::vector<numeric::LabeledThresholdParam>& arg) const;
24 TriggerThresholdParams operator()(
25 const std::vector<discrete::LabeledThresholdParam>& arg) const;
26};
27
28SensorsInfo fromLabeledSensorsInfo(const std::vector<LabeledSensorInfo>& infos);
29
Szymon Dompke94f71c52021-12-10 07:16:33 +010030TriggerThresholdParams
31 fromLabeledThresholdParam(const std::vector<LabeledThresholdParam>& params);
32
Cezary Zwolak4416fce2021-03-17 03:21:06 +010033nlohmann::json labeledThresholdParamsToJson(
34 const LabeledTriggerThresholdParams& labeledThresholdParams);
35
Szymon Dompke94f71c52021-12-10 07:16:33 +010036template <typename T>
37struct is_variant : std::false_type
38{};
39
40template <typename... Args>
41struct is_variant<std::variant<Args...>> : std::true_type
42{};
43
44template <typename T>
45inline constexpr bool is_variant_v = is_variant<T>::value;
46
47template <typename AlternativeT, typename VariantT>
Szymon Dompke7e114c02022-10-13 18:15:23 +020048 requires is_variant_v<VariantT> bool
49isFirstElementOfType(const std::vector<VariantT>& collection)
Szymon Dompke94f71c52021-12-10 07:16:33 +010050{
51 if (collection.empty())
52 {
53 return false;
54 }
55 return std::holds_alternative<AlternativeT>(*collection.begin());
56}
57
Szymon Dompkeaa572362022-03-23 16:31:24 +010058double stodStrict(const std::string& str);
59
Cezary Zwolak4416fce2021-03-17 03:21:06 +010060} // namespace utils