mirror of
https://github.com/wled/WLED.git
synced 2025-07-19 08:46:34 +00:00
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.
This commit is contained in:
parent
86393e0b1d
commit
a0d1a8cbc4
@ -2,15 +2,6 @@
|
|||||||
|
|
||||||
#include "palettes.h"
|
#include "palettes.h"
|
||||||
|
|
||||||
#define JSON_PATH_STATE 1
|
|
||||||
#define JSON_PATH_INFO 2
|
|
||||||
#define JSON_PATH_STATE_INFO 3
|
|
||||||
#define JSON_PATH_NODES 4
|
|
||||||
#define JSON_PATH_PALETTES 5
|
|
||||||
#define JSON_PATH_FXDATA 6
|
|
||||||
#define JSON_PATH_NETWORKS 7
|
|
||||||
#define JSON_PATH_EFFECTS 8
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* JSON API (De)serialization
|
* JSON API (De)serialization
|
||||||
*/
|
*/
|
||||||
@ -1036,16 +1027,20 @@ class LockedJsonResponse: public AsyncJsonResponse {
|
|||||||
|
|
||||||
void serveJson(AsyncWebServerRequest* request)
|
void serveJson(AsyncWebServerRequest* request)
|
||||||
{
|
{
|
||||||
byte subJson = 0;
|
enum class json_target {
|
||||||
|
all, state, info, state_info, nodes, effects, palettes, fxdata, networks
|
||||||
|
};
|
||||||
|
json_target subJson = json_target::all;
|
||||||
|
|
||||||
const String& url = request->url();
|
const String& url = request->url();
|
||||||
if (url.indexOf("state") > 0) subJson = JSON_PATH_STATE;
|
if (url.indexOf("state") > 0) subJson = json_target::state;
|
||||||
else if (url.indexOf("info") > 0) subJson = JSON_PATH_INFO;
|
else if (url.indexOf("info") > 0) subJson = json_target::info;
|
||||||
else if (url.indexOf("si") > 0) subJson = JSON_PATH_STATE_INFO;
|
else if (url.indexOf("si") > 0) subJson = json_target::state_info;
|
||||||
else if (url.indexOf(F("nodes")) > 0) subJson = JSON_PATH_NODES;
|
else if (url.indexOf(F("nodes")) > 0) subJson = json_target::nodes;
|
||||||
else if (url.indexOf(F("eff")) > 0) subJson = JSON_PATH_EFFECTS;
|
else if (url.indexOf(F("eff")) > 0) subJson = json_target::effects;
|
||||||
else if (url.indexOf(F("palx")) > 0) subJson = JSON_PATH_PALETTES;
|
else if (url.indexOf(F("palx")) > 0) subJson = json_target::palettes;
|
||||||
else if (url.indexOf(F("fxda")) > 0) subJson = JSON_PATH_FXDATA;
|
else if (url.indexOf(F("fxda")) > 0) subJson = json_target::fxdata;
|
||||||
else if (url.indexOf(F("net")) > 0) subJson = JSON_PATH_NETWORKS;
|
else if (url.indexOf(F("net")) > 0) subJson = json_target::networks;
|
||||||
#ifdef WLED_ENABLE_JSONLIVE
|
#ifdef WLED_ENABLE_JSONLIVE
|
||||||
else if (url.indexOf("live") > 0) {
|
else if (url.indexOf("live") > 0) {
|
||||||
serveLiveLeds(request);
|
serveLiveLeds(request);
|
||||||
@ -1070,32 +1065,33 @@ void serveJson(AsyncWebServerRequest* request)
|
|||||||
}
|
}
|
||||||
// releaseJSONBufferLock() will be called when "response" is destroyed (from AsyncWebServer)
|
// releaseJSONBufferLock() will be called when "response" is destroyed (from AsyncWebServer)
|
||||||
// make sure you delete "response" if no "request->send(response);" is made
|
// make sure you delete "response" if no "request->send(response);" is made
|
||||||
LockedJsonResponse *response = new LockedJsonResponse(pDoc, subJson==JSON_PATH_FXDATA || subJson==JSON_PATH_EFFECTS); // will clear and convert JsonDocument into JsonArray if necessary
|
LockedJsonResponse *response = new LockedJsonResponse(pDoc, subJson==json_target::fxdata || subJson==json_target::effects); // will clear and convert JsonDocument into JsonArray if necessary
|
||||||
|
|
||||||
JsonVariant lDoc = response->getRoot();
|
JsonVariant lDoc = response->getRoot();
|
||||||
|
|
||||||
switch (subJson)
|
switch (subJson)
|
||||||
{
|
{
|
||||||
case JSON_PATH_STATE:
|
case json_target::state:
|
||||||
serializeState(lDoc); break;
|
serializeState(lDoc); break;
|
||||||
case JSON_PATH_INFO:
|
case json_target::info:
|
||||||
serializeInfo(lDoc); break;
|
serializeInfo(lDoc); break;
|
||||||
case JSON_PATH_NODES:
|
case json_target::nodes:
|
||||||
serializeNodes(lDoc); break;
|
serializeNodes(lDoc); break;
|
||||||
case JSON_PATH_PALETTES:
|
case json_target::palettes:
|
||||||
serializePalettes(lDoc, request->hasParam(F("page")) ? request->getParam(F("page"))->value().toInt() : 0); break;
|
serializePalettes(lDoc, request->hasParam(F("page")) ? request->getParam(F("page"))->value().toInt() : 0); break;
|
||||||
case JSON_PATH_EFFECTS:
|
case json_target::effects:
|
||||||
serializeModeNames(lDoc); break;
|
serializeModeNames(lDoc); break;
|
||||||
case JSON_PATH_FXDATA:
|
case json_target::fxdata:
|
||||||
serializeModeData(lDoc); break;
|
serializeModeData(lDoc); break;
|
||||||
case JSON_PATH_NETWORKS:
|
case json_target::networks:
|
||||||
serializeNetworks(lDoc); break;
|
serializeNetworks(lDoc); break;
|
||||||
default: //all
|
case json_target::state_info:
|
||||||
|
case json_target::all:
|
||||||
JsonObject state = lDoc.createNestedObject("state");
|
JsonObject state = lDoc.createNestedObject("state");
|
||||||
serializeState(state);
|
serializeState(state);
|
||||||
JsonObject info = lDoc.createNestedObject("info");
|
JsonObject info = lDoc.createNestedObject("info");
|
||||||
serializeInfo(info);
|
serializeInfo(info);
|
||||||
if (subJson != JSON_PATH_STATE_INFO)
|
if (subJson == json_target::all)
|
||||||
{
|
{
|
||||||
JsonArray effects = lDoc.createNestedArray(F("effects"));
|
JsonArray effects = lDoc.createNestedArray(F("effects"));
|
||||||
serializeModeNames(effects); // remove WLED-SR extensions from effect names
|
serializeModeNames(effects); // remove WLED-SR extensions from effect names
|
||||||
|
Loading…
x
Reference in New Issue
Block a user