diff --git a/include/ShockerCommandType.h b/include/ShockerCommandType.h index 03fce70e..862d180f 100644 --- a/include/ShockerCommandType.h +++ b/include/ShockerCommandType.h @@ -6,4 +6,22 @@ namespace OpenShock { typedef OpenShock::Serialization::Types::ShockerCommandType ShockerCommandType; + + inline bool ShockerCommandTypeFromString(const char* str, ShockerCommandType& out) { + if (strcasecmp(str, "stop") == 0) { + out = ShockerCommandType::Stop; + return true; + } else if (strcasecmp(str, "shock") == 0) { + out = ShockerCommandType::Shock; + return true; + } else if (strcasecmp(str, "vibrate") == 0) { + out = ShockerCommandType::Vibrate; + return true; + } else if (strcasecmp(str, "sound") == 0) { + out = ShockerCommandType::Sound; + return true; + } else { + return false; + } + } } // namespace OpenShock diff --git a/src/serialization/JsonSerial.cpp b/src/serialization/JsonSerial.cpp index 3db16b90..85fa3590 100644 --- a/src/serialization/JsonSerial.cpp +++ b/src/serialization/JsonSerial.cpp @@ -53,15 +53,7 @@ bool JsonSerial::ParseShockerCommand(const cJSON* root, JsonSerial::ShockerComma return false; } ShockerCommandType commandType; - if (strcmp(command->valuestring, "stop") == 0) { - commandType = ShockerCommandType::Stop; - } else if (strcmp(command->valuestring, "shock") == 0) { - commandType = ShockerCommandType::Shock; - } else if (strcmp(command->valuestring, "vibrate") == 0) { - commandType = ShockerCommandType::Vibrate; - } else if (strcmp(command->valuestring, "sound") == 0) { - commandType = ShockerCommandType::Sound; - } else { + if (!ShockerCommandTypeFromString(command->valuestring, commandType)) { ESP_LOGE(TAG, "value at 'type' is not a valid shocker command (stop, shock, vibrate, sound)"); return false; }