#pragma once #include #include #include #include template class RestSettingsEndpoint { public: static esp_err_t getSettings(httpd_req_t *request) { api_Response response = api_Response_init_zero; response.status_code = 200; response.which_payload = ResponseTag; TMsg settings; if (!EventBus::peek(settings)) { return WebServer::sendError(request, 404, "Settings not found"); } *reinterpret_cast(&response.payload) = settings; return WebServer::send(request, 200, response, api_Response_fields); } static esp_err_t updateSettings(httpd_req_t *request, api_Request *protoReq) { if (protoReq->which_payload != RequestTag) { return WebServer::sendError(request, 400, "Invalid payload type"); } const TMsg &settings = *reinterpret_cast(&protoReq->payload); EventBus::publish(settings, "HTTPEndpoint"); api_Response response = api_Response_init_zero; response.status_code = 200; response.which_payload = api_Response_empty_message_tag; return WebServer::send(request, 200, response, api_Response_fields); } }; using WiFiSettingsEndpoint = RestSettingsEndpoint; using ServoSettingsEndpoint = RestSettingsEndpoint; using PeripheralSettingsEndpoint = RestSettingsEndpoint; using APSettingsEndpoint = RestSettingsEndpoint; using MDNSSettingsEndpoint = RestSettingsEndpoint; using CameraSettingsEndpoint = RestSettingsEndpoint;