1*1516c21bSJanet Adkins #pragma once 2*1516c21bSJanet Adkins 3*1516c21bSJanet Adkins #include <algorithm> 4*1516c21bSJanet Adkins #include <format> 5*1516c21bSJanet Adkins #include <ranges> 6*1516c21bSJanet Adkins #include <string> 7*1516c21bSJanet Adkins #include <string_view> 8*1516c21bSJanet Adkins #include <utility> 9*1516c21bSJanet Adkins #include <vector> 10*1516c21bSJanet Adkins 11*1516c21bSJanet Adkins namespace redfish 12*1516c21bSJanet Adkins { 13*1516c21bSJanet Adkins namespace sensor_utils 14*1516c21bSJanet Adkins { 15*1516c21bSJanet Adkins 16*1516c21bSJanet Adkins inline std::string getSensorId(std::string_view sensorName, 17*1516c21bSJanet Adkins std::string_view sensorType) 18*1516c21bSJanet Adkins { 19*1516c21bSJanet Adkins std::string normalizedType(sensorType); 20*1516c21bSJanet Adkins auto remove = std::ranges::remove(normalizedType, '_'); 21*1516c21bSJanet Adkins normalizedType.erase(std::ranges::begin(remove), normalizedType.end()); 22*1516c21bSJanet Adkins 23*1516c21bSJanet Adkins return std::format("{}_{}", normalizedType, sensorName); 24*1516c21bSJanet Adkins } 25*1516c21bSJanet Adkins 26*1516c21bSJanet Adkins inline std::pair<std::string, std::string> 27*1516c21bSJanet Adkins splitSensorNameAndType(std::string_view sensorId) 28*1516c21bSJanet Adkins { 29*1516c21bSJanet Adkins size_t index = sensorId.find('_'); 30*1516c21bSJanet Adkins if (index == std::string::npos) 31*1516c21bSJanet Adkins { 32*1516c21bSJanet Adkins return std::make_pair<std::string, std::string>("", ""); 33*1516c21bSJanet Adkins } 34*1516c21bSJanet Adkins std::string sensorType{sensorId.substr(0, index)}; 35*1516c21bSJanet Adkins std::string sensorName{sensorId.substr(index + 1)}; 36*1516c21bSJanet Adkins // fan_pwm and fan_tach need special handling 37*1516c21bSJanet Adkins if (sensorType == "fantach" || sensorType == "fanpwm") 38*1516c21bSJanet Adkins { 39*1516c21bSJanet Adkins sensorType.insert(3, 1, '_'); 40*1516c21bSJanet Adkins } 41*1516c21bSJanet Adkins return std::make_pair(sensorType, sensorName); 42*1516c21bSJanet Adkins } 43*1516c21bSJanet Adkins 44*1516c21bSJanet Adkins } // namespace sensor_utils 45*1516c21bSJanet Adkins } // namespace redfish 46