Skip to content
This repository was archived by the owner on Jan 21, 2025. It is now read-only.

Commit 3bd4eb8

Browse files
committed
Fix include directives to make ArduinoJson optional and fix CI
1 parent 6a247c1 commit 3bd4eb8

File tree

7 files changed

+109
-57
lines changed

7 files changed

+109
-57
lines changed

.github/workflows/ci.yml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,9 @@ jobs:
106106
- env: ci-arduino-3
107107
board: esp32-h2-devkitm-1
108108

109+
- env: ci-arduino-3-no-json
110+
board: esp32dev
111+
109112
- env: ci-arduino-310rc1
110113
board: esp32dev
111114
- env: ci-arduino-310rc1

examples/SimpleServer/SimpleServer.ino

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,12 @@
1919

2020
#include <ESPAsyncWebServer.h>
2121

22-
#include <ArduinoJson.h>
23-
#include <AsyncJson.h>
24-
#include <AsyncMessagePack.h>
22+
#if ASYNC_JSON_SUPPORT == 1
23+
#include <ArduinoJson.h>
24+
#include <AsyncJson.h>
25+
#include <AsyncMessagePack.h>
26+
#endif
27+
2528
#include <LittleFS.h>
2629

2730
AsyncWebServer server(80);
@@ -103,8 +106,10 @@ void notFound(AsyncWebServerRequest* request) {
103106
request->send(404, "text/plain", "Not found");
104107
}
105108

109+
#if ASYNC_JSON_SUPPORT == 1
106110
AsyncCallbackJsonWebHandler* jsonHandler = new AsyncCallbackJsonWebHandler("/json2");
107111
AsyncCallbackMessagePackWebHandler* msgPackHandler = new AsyncCallbackMessagePackWebHandler("/msgpack2");
112+
#endif
108113

109114
void setup() {
110115

@@ -293,6 +298,7 @@ void setup() {
293298
request->send(200, "text/plain", "Hello, POST: " + message);
294299
});
295300

301+
#if ASYNC_JSON_SUPPORT == 1
296302
// JSON
297303

298304
// receives JSON and sends JSON
@@ -338,6 +344,7 @@ void setup() {
338344
response->setLength();
339345
request->send(response);
340346
});
347+
#endif
341348

342349
events.onConnect([](AsyncEventSourceClient* client) {
343350
if (client->lastId()) {
@@ -376,8 +383,11 @@ void setup() {
376383

377384
server.addHandler(&events);
378385
server.addHandler(&ws);
386+
387+
#if ASYNC_JSON_SUPPORT == 1
379388
server.addHandler(jsonHandler);
380389
server.addHandler(msgPackHandler);
390+
#endif
381391

382392
server.onNotFound(notFound);
383393

platformio.ini

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,13 @@ platform = https://github.com/pioarduino/platform-espressif32/releases/download/
3636
; board = esp32-s3-devkitc-1
3737
; board = esp32-c6-devkitc-1
3838

39+
[env:arduino-3-no-json]
40+
platform = https://github.com/pioarduino/platform-espressif32/releases/download/51.03.05/platform-espressif32.zip
41+
; board = esp32-s3-devkitc-1
42+
; board = esp32-c6-devkitc-1
43+
lib_deps =
44+
mathieucarbou/AsyncTCP @ 3.2.5
45+
3946
[env:arduino-310rc1]
4047
platform = https://github.com/pioarduino/platform-espressif32/releases/download/53.03.10-rc1/platform-espressif32.zip
4148
; board = esp32-s3-devkitc-1
@@ -74,6 +81,12 @@ board = ${sysenv.PIO_BOARD}
7481
platform = https://github.com/pioarduino/platform-espressif32/releases/download/51.03.05/platform-espressif32.zip
7582
board = ${sysenv.PIO_BOARD}
7683

84+
[env:ci-arduino-3-no-json]
85+
platform = https://github.com/pioarduino/platform-espressif32/releases/download/51.03.05/platform-espressif32.zip
86+
board = ${sysenv.PIO_BOARD}
87+
lib_deps =
88+
mathieucarbou/AsyncTCP @ 3.2.5
89+
7790
[env:ci-arduino-310rc1]
7891
platform = https://github.com/pioarduino/platform-espressif32/releases/download/53.03.10-rc1/platform-espressif32.zip
7992
board = ${sysenv.PIO_BOARD}

src/AsyncJson.cpp

Lines changed: 31 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
#include "AsyncJson.h"
22

3-
#if ARDUINOJSON_VERSION_MAJOR == 5
3+
#if ASYNC_JSON_SUPPORT == 1
4+
5+
#if ARDUINOJSON_VERSION_MAJOR == 5
46
AsyncJsonResponse::AsyncJsonResponse(bool isArray) : _isValid{false} {
57
_code = 200;
68
_contentType = JSON_MIMETYPE;
@@ -9,7 +11,7 @@ AsyncJsonResponse::AsyncJsonResponse(bool isArray) : _isValid{false} {
911
else
1012
_root = _jsonBuffer.createObject();
1113
}
12-
#elif ARDUINOJSON_VERSION_MAJOR == 6
14+
#elif ARDUINOJSON_VERSION_MAJOR == 6
1315
AsyncJsonResponse::AsyncJsonResponse(bool isArray, size_t maxJsonBufferSize) : _jsonBuffer(maxJsonBufferSize), _isValid{false} {
1416
_code = 200;
1517
_contentType = JSON_MIMETYPE;
@@ -18,7 +20,7 @@ AsyncJsonResponse::AsyncJsonResponse(bool isArray, size_t maxJsonBufferSize) : _
1820
else
1921
_root = _jsonBuffer.createNestedObject();
2022
}
21-
#else
23+
#else
2224
AsyncJsonResponse::AsyncJsonResponse(bool isArray) : _isValid{false} {
2325
_code = 200;
2426
_contentType = JSON_MIMETYPE;
@@ -27,14 +29,14 @@ AsyncJsonResponse::AsyncJsonResponse(bool isArray) : _isValid{false} {
2729
else
2830
_root = _jsonBuffer.add<JsonObject>();
2931
}
30-
#endif
32+
#endif
3133

3234
size_t AsyncJsonResponse::setLength() {
33-
#if ARDUINOJSON_VERSION_MAJOR == 5
35+
#if ARDUINOJSON_VERSION_MAJOR == 5
3436
_contentLength = _root.measureLength();
35-
#else
37+
#else
3638
_contentLength = measureJson(_root);
37-
#endif
39+
#endif
3840
if (_contentLength) {
3941
_isValid = true;
4042
}
@@ -43,26 +45,26 @@ size_t AsyncJsonResponse::setLength() {
4345

4446
size_t AsyncJsonResponse::_fillBuffer(uint8_t* data, size_t len) {
4547
ChunkPrint dest(data, _sentLength, len);
46-
#if ARDUINOJSON_VERSION_MAJOR == 5
48+
#if ARDUINOJSON_VERSION_MAJOR == 5
4749
_root.printTo(dest);
48-
#else
50+
#else
4951
serializeJson(_root, dest);
50-
#endif
52+
#endif
5153
return len;
5254
}
5355

54-
#if ARDUINOJSON_VERSION_MAJOR == 6
56+
#if ARDUINOJSON_VERSION_MAJOR == 6
5557
PrettyAsyncJsonResponse::PrettyAsyncJsonResponse(bool isArray, size_t maxJsonBufferSize) : AsyncJsonResponse{isArray, maxJsonBufferSize} {}
56-
#else
58+
#else
5759
PrettyAsyncJsonResponse::PrettyAsyncJsonResponse(bool isArray) : AsyncJsonResponse{isArray} {}
58-
#endif
60+
#endif
5961

6062
size_t PrettyAsyncJsonResponse::setLength() {
61-
#if ARDUINOJSON_VERSION_MAJOR == 5
63+
#if ARDUINOJSON_VERSION_MAJOR == 5
6264
_contentLength = _root.measurePrettyLength();
63-
#else
65+
#else
6466
_contentLength = measureJsonPretty(_root);
65-
#endif
67+
#endif
6668
if (_contentLength) {
6769
_isValid = true;
6870
}
@@ -71,21 +73,21 @@ size_t PrettyAsyncJsonResponse::setLength() {
7173

7274
size_t PrettyAsyncJsonResponse::_fillBuffer(uint8_t* data, size_t len) {
7375
ChunkPrint dest(data, _sentLength, len);
74-
#if ARDUINOJSON_VERSION_MAJOR == 5
76+
#if ARDUINOJSON_VERSION_MAJOR == 5
7577
_root.prettyPrintTo(dest);
76-
#else
78+
#else
7779
serializeJsonPretty(_root, dest);
78-
#endif
80+
#endif
7981
return len;
8082
}
8183

82-
#if ARDUINOJSON_VERSION_MAJOR == 6
84+
#if ARDUINOJSON_VERSION_MAJOR == 6
8385
AsyncCallbackJsonWebHandler::AsyncCallbackJsonWebHandler(const String& uri, ArJsonRequestHandlerFunction onRequest, size_t maxJsonBufferSize)
8486
: _uri(uri), _method(HTTP_GET | HTTP_POST | HTTP_PUT | HTTP_PATCH), _onRequest(onRequest), maxJsonBufferSize(maxJsonBufferSize), _maxContentLength(16384) {}
85-
#else
87+
#else
8688
AsyncCallbackJsonWebHandler::AsyncCallbackJsonWebHandler(const String& uri, ArJsonRequestHandlerFunction onRequest)
8789
: _uri(uri), _method(HTTP_GET | HTTP_POST | HTTP_PUT | HTTP_PATCH), _onRequest(onRequest), _maxContentLength(16384) {}
88-
#endif
90+
#endif
8991

9092
bool AsyncCallbackJsonWebHandler::canHandle(AsyncWebServerRequest* request) {
9193
if (!_onRequest)
@@ -112,21 +114,21 @@ void AsyncCallbackJsonWebHandler::handleRequest(AsyncWebServerRequest* request)
112114
return;
113115
} else if (request->_tempObject != NULL) {
114116

115-
#if ARDUINOJSON_VERSION_MAJOR == 5
117+
#if ARDUINOJSON_VERSION_MAJOR == 5
116118
DynamicJsonBuffer jsonBuffer;
117119
JsonVariant json = jsonBuffer.parse((uint8_t*)(request->_tempObject));
118120
if (json.success()) {
119-
#elif ARDUINOJSON_VERSION_MAJOR == 6
121+
#elif ARDUINOJSON_VERSION_MAJOR == 6
120122
DynamicJsonDocument jsonBuffer(this->maxJsonBufferSize);
121123
DeserializationError error = deserializeJson(jsonBuffer, (uint8_t*)(request->_tempObject));
122124
if (!error) {
123125
JsonVariant json = jsonBuffer.as<JsonVariant>();
124-
#else
126+
#else
125127
JsonDocument jsonBuffer;
126128
DeserializationError error = deserializeJson(jsonBuffer, (uint8_t*)(request->_tempObject));
127129
if (!error) {
128130
JsonVariant json = jsonBuffer.as<JsonVariant>();
129-
#endif
131+
#endif
130132

131133
_onRequest(request, json);
132134
return;
@@ -148,4 +150,6 @@ void AsyncCallbackJsonWebHandler::handleBody(AsyncWebServerRequest* request, uin
148150
memcpy((uint8_t*)(request->_tempObject) + index, data, len);
149151
}
150152
}
151-
}
153+
}
154+
155+
#endif // ASYNC_JSON_SUPPORT

src/AsyncJson.h

Lines changed: 34 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -34,16 +34,21 @@
3434
*/
3535
#ifndef ASYNC_JSON_H_
3636
#define ASYNC_JSON_H_
37-
#include <ArduinoJson.h>
38-
#include <ESPAsyncWebServer.h>
3937

40-
#include "ChunkPrint.h"
38+
#if __has_include("ArduinoJson.h")
4139

42-
#if ARDUINOJSON_VERSION_MAJOR == 6
43-
#ifndef DYNAMIC_JSON_DOCUMENT_SIZE
44-
#define DYNAMIC_JSON_DOCUMENT_SIZE 1024
40+
#define ASYNC_JSON_SUPPORT 1
41+
42+
#include <ArduinoJson.h>
43+
#include <ESPAsyncWebServer.h>
44+
45+
#include "ChunkPrint.h"
46+
47+
#if ARDUINOJSON_VERSION_MAJOR == 6
48+
#ifndef DYNAMIC_JSON_DOCUMENT_SIZE
49+
#define DYNAMIC_JSON_DOCUMENT_SIZE 1024
50+
#endif
4551
#endif
46-
#endif
4752

4853
constexpr const char* JSON_MIMETYPE = "application/json";
4954

@@ -53,40 +58,40 @@ constexpr const char* JSON_MIMETYPE = "application/json";
5358

5459
class AsyncJsonResponse : public AsyncAbstractResponse {
5560
protected:
56-
#if ARDUINOJSON_VERSION_MAJOR == 5
61+
#if ARDUINOJSON_VERSION_MAJOR == 5
5762
DynamicJsonBuffer _jsonBuffer;
58-
#elif ARDUINOJSON_VERSION_MAJOR == 6
63+
#elif ARDUINOJSON_VERSION_MAJOR == 6
5964
DynamicJsonDocument _jsonBuffer;
60-
#else
65+
#else
6166
JsonDocument _jsonBuffer;
62-
#endif
67+
#endif
6368

6469
JsonVariant _root;
6570
bool _isValid;
6671

6772
public:
68-
#if ARDUINOJSON_VERSION_MAJOR == 6
73+
#if ARDUINOJSON_VERSION_MAJOR == 6
6974
AsyncJsonResponse(bool isArray = false, size_t maxJsonBufferSize = DYNAMIC_JSON_DOCUMENT_SIZE);
70-
#else
75+
#else
7176
AsyncJsonResponse(bool isArray = false);
72-
#endif
77+
#endif
7378
JsonVariant& getRoot() { return _root; }
7479
bool _sourceValid() const { return _isValid; }
7580
size_t setLength();
7681
size_t getSize() const { return _jsonBuffer.size(); }
7782
size_t _fillBuffer(uint8_t* data, size_t len);
78-
#if ARDUINOJSON_VERSION_MAJOR >= 6
83+
#if ARDUINOJSON_VERSION_MAJOR >= 6
7984
bool overflowed() const { return _jsonBuffer.overflowed(); }
80-
#endif
85+
#endif
8186
};
8287

8388
class PrettyAsyncJsonResponse : public AsyncJsonResponse {
8489
public:
85-
#if ARDUINOJSON_VERSION_MAJOR == 6
90+
#if ARDUINOJSON_VERSION_MAJOR == 6
8691
PrettyAsyncJsonResponse(bool isArray = false, size_t maxJsonBufferSize = DYNAMIC_JSON_DOCUMENT_SIZE);
87-
#else
92+
#else
8893
PrettyAsyncJsonResponse(bool isArray = false);
89-
#endif
94+
#endif
9095
size_t setLength();
9196
size_t _fillBuffer(uint8_t* data, size_t len);
9297
};
@@ -99,17 +104,17 @@ class AsyncCallbackJsonWebHandler : public AsyncWebHandler {
99104
WebRequestMethodComposite _method;
100105
ArJsonRequestHandlerFunction _onRequest;
101106
size_t _contentLength;
102-
#if ARDUINOJSON_VERSION_MAJOR == 6
107+
#if ARDUINOJSON_VERSION_MAJOR == 6
103108
const size_t maxJsonBufferSize;
104-
#endif
109+
#endif
105110
size_t _maxContentLength;
106111

107112
public:
108-
#if ARDUINOJSON_VERSION_MAJOR == 6
113+
#if ARDUINOJSON_VERSION_MAJOR == 6
109114
AsyncCallbackJsonWebHandler(const String& uri, ArJsonRequestHandlerFunction onRequest = nullptr, size_t maxJsonBufferSize = DYNAMIC_JSON_DOCUMENT_SIZE);
110-
#else
115+
#else
111116
AsyncCallbackJsonWebHandler(const String& uri, ArJsonRequestHandlerFunction onRequest = nullptr);
112-
#endif
117+
#endif
113118

114119
void setMethod(WebRequestMethodComposite method) { _method = method; }
115120
void setMaxContentLength(int maxContentLength) { _maxContentLength = maxContentLength; }
@@ -121,4 +126,9 @@ class AsyncCallbackJsonWebHandler : public AsyncWebHandler {
121126
virtual void handleBody(AsyncWebServerRequest* request, uint8_t* data, size_t len, size_t index, size_t total) override final;
122127
virtual bool isRequestHandlerTrivial() override final { return !_onRequest; }
123128
};
129+
130+
#else // __has_include("ArduinoJson.h")
131+
#define ASYNC_JSON_SUPPORT 0
132+
#endif // __has_include("ArduinoJson.h")
133+
124134
#endif

src/AsyncMessagePack.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
#include "AsyncMessagePack.h"
22

3+
#if ASYNC_MSG_PACK_SUPPORT == 1
4+
35
AsyncMessagePackResponse::AsyncMessagePackResponse(bool isArray) : _isValid{false} {
46
_code = 200;
57
_contentType = asyncsrv::T_application_msgpack;
@@ -77,3 +79,5 @@ void AsyncCallbackMessagePackWebHandler::handleBody(AsyncWebServerRequest* reque
7779
}
7880
}
7981
}
82+
83+
#endif // ASYNC_MSG_PACK_SUPPORT

src/AsyncMessagePack.h

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,14 @@
2121
server.addHandler(handler);
2222
*/
2323

24-
#include <ArduinoJson.h>
25-
#include <ESPAsyncWebServer.h>
24+
#if __has_include("ArduinoJson.h")
2625

27-
#include "ChunkPrint.h"
26+
#define ASYNC_MSG_PACK_SUPPORT 1
27+
28+
#include <ArduinoJson.h>
29+
#include <ESPAsyncWebServer.h>
30+
31+
#include "ChunkPrint.h"
2832

2933
class AsyncMessagePackResponse : public AsyncAbstractResponse {
3034
protected:
@@ -65,3 +69,7 @@ class AsyncCallbackMessagePackWebHandler : public AsyncWebHandler {
6569
virtual void handleBody(AsyncWebServerRequest* request, uint8_t* data, size_t len, size_t index, size_t total) override final;
6670
virtual bool isRequestHandlerTrivial() override final { return _onRequest ? false : true; }
6771
};
72+
73+
#else // __has_include("ArduinoJson.h")
74+
#define ASYNC_MSG_PACK_SUPPORT 0
75+
#endif // __has_include("ArduinoJson.h")

0 commit comments

Comments
 (0)