Skip to content

Commit a0d1a8c

Browse files
committed
Use enum class for json endpoint subtypes
Part of the ongoing quest to migrate macro definitions to typed language constructs. This actually yields a small improvement in code size, likely from the byte->int conversion.
1 parent 86393e0 commit a0d1a8c

File tree

1 file changed

+24
-28
lines changed

1 file changed

+24
-28
lines changed

wled00/json.cpp

Lines changed: 24 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,6 @@
22

33
#include "palettes.h"
44

5-
#define JSON_PATH_STATE 1
6-
#define JSON_PATH_INFO 2
7-
#define JSON_PATH_STATE_INFO 3
8-
#define JSON_PATH_NODES 4
9-
#define JSON_PATH_PALETTES 5
10-
#define JSON_PATH_FXDATA 6
11-
#define JSON_PATH_NETWORKS 7
12-
#define JSON_PATH_EFFECTS 8
13-
145
/*
156
* JSON API (De)serialization
167
*/
@@ -1036,16 +1027,20 @@ class LockedJsonResponse: public AsyncJsonResponse {
10361027

10371028
void serveJson(AsyncWebServerRequest* request)
10381029
{
1039-
byte subJson = 0;
1030+
enum class json_target {
1031+
all, state, info, state_info, nodes, effects, palettes, fxdata, networks
1032+
};
1033+
json_target subJson = json_target::all;
1034+
10401035
const String& url = request->url();
1041-
if (url.indexOf("state") > 0) subJson = JSON_PATH_STATE;
1042-
else if (url.indexOf("info") > 0) subJson = JSON_PATH_INFO;
1043-
else if (url.indexOf("si") > 0) subJson = JSON_PATH_STATE_INFO;
1044-
else if (url.indexOf(F("nodes")) > 0) subJson = JSON_PATH_NODES;
1045-
else if (url.indexOf(F("eff")) > 0) subJson = JSON_PATH_EFFECTS;
1046-
else if (url.indexOf(F("palx")) > 0) subJson = JSON_PATH_PALETTES;
1047-
else if (url.indexOf(F("fxda")) > 0) subJson = JSON_PATH_FXDATA;
1048-
else if (url.indexOf(F("net")) > 0) subJson = JSON_PATH_NETWORKS;
1036+
if (url.indexOf("state") > 0) subJson = json_target::state;
1037+
else if (url.indexOf("info") > 0) subJson = json_target::info;
1038+
else if (url.indexOf("si") > 0) subJson = json_target::state_info;
1039+
else if (url.indexOf(F("nodes")) > 0) subJson = json_target::nodes;
1040+
else if (url.indexOf(F("eff")) > 0) subJson = json_target::effects;
1041+
else if (url.indexOf(F("palx")) > 0) subJson = json_target::palettes;
1042+
else if (url.indexOf(F("fxda")) > 0) subJson = json_target::fxdata;
1043+
else if (url.indexOf(F("net")) > 0) subJson = json_target::networks;
10491044
#ifdef WLED_ENABLE_JSONLIVE
10501045
else if (url.indexOf("live") > 0) {
10511046
serveLiveLeds(request);
@@ -1070,32 +1065,33 @@ void serveJson(AsyncWebServerRequest* request)
10701065
}
10711066
// releaseJSONBufferLock() will be called when "response" is destroyed (from AsyncWebServer)
10721067
// make sure you delete "response" if no "request->send(response);" is made
1073-
LockedJsonResponse *response = new LockedJsonResponse(pDoc, subJson==JSON_PATH_FXDATA || subJson==JSON_PATH_EFFECTS); // will clear and convert JsonDocument into JsonArray if necessary
1068+
LockedJsonResponse *response = new LockedJsonResponse(pDoc, subJson==json_target::fxdata || subJson==json_target::effects); // will clear and convert JsonDocument into JsonArray if necessary
10741069

10751070
JsonVariant lDoc = response->getRoot();
10761071

10771072
switch (subJson)
10781073
{
1079-
case JSON_PATH_STATE:
1074+
case json_target::state:
10801075
serializeState(lDoc); break;
1081-
case JSON_PATH_INFO:
1076+
case json_target::info:
10821077
serializeInfo(lDoc); break;
1083-
case JSON_PATH_NODES:
1078+
case json_target::nodes:
10841079
serializeNodes(lDoc); break;
1085-
case JSON_PATH_PALETTES:
1080+
case json_target::palettes:
10861081
serializePalettes(lDoc, request->hasParam(F("page")) ? request->getParam(F("page"))->value().toInt() : 0); break;
1087-
case JSON_PATH_EFFECTS:
1082+
case json_target::effects:
10881083
serializeModeNames(lDoc); break;
1089-
case JSON_PATH_FXDATA:
1084+
case json_target::fxdata:
10901085
serializeModeData(lDoc); break;
1091-
case JSON_PATH_NETWORKS:
1086+
case json_target::networks:
10921087
serializeNetworks(lDoc); break;
1093-
default: //all
1088+
case json_target::state_info:
1089+
case json_target::all:
10941090
JsonObject state = lDoc.createNestedObject("state");
10951091
serializeState(state);
10961092
JsonObject info = lDoc.createNestedObject("info");
10971093
serializeInfo(info);
1098-
if (subJson != JSON_PATH_STATE_INFO)
1094+
if (subJson == json_target::all)
10991095
{
11001096
JsonArray effects = lDoc.createNestedArray(F("effects"));
11011097
serializeModeNames(effects); // remove WLED-SR extensions from effect names

0 commit comments

Comments
 (0)