1*0ec8b83dSEd Tanous #pragma once 2*0ec8b83dSEd Tanous #include <nlohmann/json.hpp> 3*0ec8b83dSEd Tanous 4*0ec8b83dSEd Tanous namespace metric_definition 5*0ec8b83dSEd Tanous { 6*0ec8b83dSEd Tanous // clang-format off 7*0ec8b83dSEd Tanous 8*0ec8b83dSEd Tanous enum class MetricType{ 9*0ec8b83dSEd Tanous Invalid, 10*0ec8b83dSEd Tanous Numeric, 11*0ec8b83dSEd Tanous Discrete, 12*0ec8b83dSEd Tanous Gauge, 13*0ec8b83dSEd Tanous Counter, 14*0ec8b83dSEd Tanous Countdown, 15*0ec8b83dSEd Tanous String, 16*0ec8b83dSEd Tanous }; 17*0ec8b83dSEd Tanous 18*0ec8b83dSEd Tanous enum class ImplementationType{ 19*0ec8b83dSEd Tanous Invalid, 20*0ec8b83dSEd Tanous PhysicalSensor, 21*0ec8b83dSEd Tanous Calculated, 22*0ec8b83dSEd Tanous Synthesized, 23*0ec8b83dSEd Tanous DigitalMeter, 24*0ec8b83dSEd Tanous }; 25*0ec8b83dSEd Tanous 26*0ec8b83dSEd Tanous enum class MetricDataType{ 27*0ec8b83dSEd Tanous Invalid, 28*0ec8b83dSEd Tanous Boolean, 29*0ec8b83dSEd Tanous DateTime, 30*0ec8b83dSEd Tanous Decimal, 31*0ec8b83dSEd Tanous Integer, 32*0ec8b83dSEd Tanous String, 33*0ec8b83dSEd Tanous Enumeration, 34*0ec8b83dSEd Tanous }; 35*0ec8b83dSEd Tanous 36*0ec8b83dSEd Tanous enum class Calculable{ 37*0ec8b83dSEd Tanous Invalid, 38*0ec8b83dSEd Tanous NonCalculatable, 39*0ec8b83dSEd Tanous Summable, 40*0ec8b83dSEd Tanous NonSummable, 41*0ec8b83dSEd Tanous }; 42*0ec8b83dSEd Tanous 43*0ec8b83dSEd Tanous enum class CalculationAlgorithmEnum{ 44*0ec8b83dSEd Tanous Invalid, 45*0ec8b83dSEd Tanous Average, 46*0ec8b83dSEd Tanous Maximum, 47*0ec8b83dSEd Tanous Minimum, 48*0ec8b83dSEd Tanous OEM, 49*0ec8b83dSEd Tanous }; 50*0ec8b83dSEd Tanous 51*0ec8b83dSEd Tanous NLOHMANN_JSON_SERIALIZE_ENUM(MetricType, { 52*0ec8b83dSEd Tanous {MetricType::Invalid, "Invalid"}, 53*0ec8b83dSEd Tanous {MetricType::Numeric, "Numeric"}, 54*0ec8b83dSEd Tanous {MetricType::Discrete, "Discrete"}, 55*0ec8b83dSEd Tanous {MetricType::Gauge, "Gauge"}, 56*0ec8b83dSEd Tanous {MetricType::Counter, "Counter"}, 57*0ec8b83dSEd Tanous {MetricType::Countdown, "Countdown"}, 58*0ec8b83dSEd Tanous {MetricType::String, "String"}, 59*0ec8b83dSEd Tanous }); 60*0ec8b83dSEd Tanous 61*0ec8b83dSEd Tanous NLOHMANN_JSON_SERIALIZE_ENUM(ImplementationType, { 62*0ec8b83dSEd Tanous {ImplementationType::Invalid, "Invalid"}, 63*0ec8b83dSEd Tanous {ImplementationType::PhysicalSensor, "PhysicalSensor"}, 64*0ec8b83dSEd Tanous {ImplementationType::Calculated, "Calculated"}, 65*0ec8b83dSEd Tanous {ImplementationType::Synthesized, "Synthesized"}, 66*0ec8b83dSEd Tanous {ImplementationType::DigitalMeter, "DigitalMeter"}, 67*0ec8b83dSEd Tanous }); 68*0ec8b83dSEd Tanous 69*0ec8b83dSEd Tanous NLOHMANN_JSON_SERIALIZE_ENUM(MetricDataType, { 70*0ec8b83dSEd Tanous {MetricDataType::Invalid, "Invalid"}, 71*0ec8b83dSEd Tanous {MetricDataType::Boolean, "Boolean"}, 72*0ec8b83dSEd Tanous {MetricDataType::DateTime, "DateTime"}, 73*0ec8b83dSEd Tanous {MetricDataType::Decimal, "Decimal"}, 74*0ec8b83dSEd Tanous {MetricDataType::Integer, "Integer"}, 75*0ec8b83dSEd Tanous {MetricDataType::String, "String"}, 76*0ec8b83dSEd Tanous {MetricDataType::Enumeration, "Enumeration"}, 77*0ec8b83dSEd Tanous }); 78*0ec8b83dSEd Tanous 79*0ec8b83dSEd Tanous NLOHMANN_JSON_SERIALIZE_ENUM(Calculable, { 80*0ec8b83dSEd Tanous {Calculable::Invalid, "Invalid"}, 81*0ec8b83dSEd Tanous {Calculable::NonCalculatable, "NonCalculatable"}, 82*0ec8b83dSEd Tanous {Calculable::Summable, "Summable"}, 83*0ec8b83dSEd Tanous {Calculable::NonSummable, "NonSummable"}, 84*0ec8b83dSEd Tanous }); 85*0ec8b83dSEd Tanous 86*0ec8b83dSEd Tanous NLOHMANN_JSON_SERIALIZE_ENUM(CalculationAlgorithmEnum, { 87*0ec8b83dSEd Tanous {CalculationAlgorithmEnum::Invalid, "Invalid"}, 88*0ec8b83dSEd Tanous {CalculationAlgorithmEnum::Average, "Average"}, 89*0ec8b83dSEd Tanous {CalculationAlgorithmEnum::Maximum, "Maximum"}, 90*0ec8b83dSEd Tanous {CalculationAlgorithmEnum::Minimum, "Minimum"}, 91*0ec8b83dSEd Tanous {CalculationAlgorithmEnum::OEM, "OEM"}, 92*0ec8b83dSEd Tanous }); 93*0ec8b83dSEd Tanous 94*0ec8b83dSEd Tanous } 95*0ec8b83dSEd Tanous // clang-format on 96