From 32fc3ea6f55c32484f600bc56366b49fd0d9cbf8 Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Thu, 29 Jan 2026 15:33:24 -0600 Subject: [PATCH] config stack --- esphome/components/json/json_util.h | 4 ++-- esphome/components/web_server/web_server.cpp | 8 ++++---- esphome/components/web_server/web_server.h | 2 +- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/esphome/components/json/json_util.h b/esphome/components/json/json_util.h index 30cf37a90e..596573701b 100644 --- a/esphome/components/json/json_util.h +++ b/esphome/components/json/json_util.h @@ -17,9 +17,9 @@ namespace esphome { namespace json { /// Buffer for JSON serialization that uses stack allocation for small payloads. -/// Template parameter STACK_SIZE specifies the stack buffer size (default 512 bytes). +/// Template parameter STACK_SIZE specifies the stack buffer size (default 768 bytes). /// Supports move semantics for efficient return-by-value. -template class JsonBuffer { +template class JsonBuffer { public: /// Construct with known size (typically from measureJson) explicit JsonBuffer(size_t size) : size_(size) { diff --git a/esphome/components/web_server/web_server.cpp b/esphome/components/web_server/web_server.cpp index 149c23b9b5..86af92078a 100644 --- a/esphome/components/web_server/web_server.cpp +++ b/esphome/components/web_server/web_server.cpp @@ -320,7 +320,7 @@ void DeferredUpdateEventSourceList::on_client_connect_(DeferredUpdateEventSource ws->defer([ws, source]() { // Configure reconnect timeout and send config // this should always go through since the AsyncEventSourceClient event queue is empty on connect - std::string message = ws->get_config_json(); + auto message = ws->get_config_json(); source->try_send_nodefer(message.c_str(), "ping", millis(), 30000); #ifdef USE_WEBSERVER_SORTING @@ -329,10 +329,10 @@ void DeferredUpdateEventSourceList::on_client_connect_(DeferredUpdateEventSource JsonObject root = builder.root(); root[ESPHOME_F("name")] = group.second.name; root[ESPHOME_F("sorting_weight")] = group.second.weight; - message = builder.serialize(); + auto group_msg = builder.serialize(); // up to 31 groups should be able to be queued initially without defer - source->try_send_nodefer(message.c_str(), "sorting_group"); + source->try_send_nodefer(group_msg.c_str(), "sorting_group"); } #endif @@ -365,7 +365,7 @@ void WebServer::set_css_include(const char *css_include) { this->css_include_ = void WebServer::set_js_include(const char *js_include) { this->js_include_ = js_include; } #endif -std::string WebServer::get_config_json() { +json::JsonBuffer<> WebServer::get_config_json() { json::JsonBuilder builder; JsonObject root = builder.root(); diff --git a/esphome/components/web_server/web_server.h b/esphome/components/web_server/web_server.h index ed1e492f90..8d6a747bcc 100644 --- a/esphome/components/web_server/web_server.h +++ b/esphome/components/web_server/web_server.h @@ -264,7 +264,7 @@ class WebServer : public Controller, void handle_index_request(AsyncWebServerRequest *request); /// Return the webserver configuration as JSON. - std::string get_config_json(); + json::JsonBuffer<> get_config_json(); #ifdef USE_WEBSERVER_CSS_INCLUDE /// Handle included css request under '/0.css'.