[api] Fix review comments and add USE_API guards

- Update comments to reflect that ProtoService methods moved to
  APIConnection, not APIServerConnectionBase
- Fix comment referring to read_message as "override"
- Wrap #include "api_connection.h" and read_message_ implementation
  in #ifdef USE_API guards
This commit is contained in:
J. Nick Koston
2026-03-20 21:29:42 -10:00
parent 20d3e7c13a
commit 1d191d2461
4 changed files with 15 additions and 7 deletions

View File

@@ -55,8 +55,8 @@ class APIConnection final : public APIServerConnectionBase {
void loop();
protected:
// Override read_message here (instead of in APIServerConnectionBase) so the
// compiler can devirtualize and inline on_* handler calls within this class.
// read_message_ is defined here (instead of in APIServerConnectionBase) so the
// compiler can devirtualize and inline on_* handler calls within this final class.
void read_message_(uint32_t msg_size, uint32_t msg_type, const uint8_t *msg_data);
// Auth helpers defined here (not in ProtoService) so the compiler can

View File

@@ -1,7 +1,9 @@
// This file was automatically generated with a tool.
// See script/api_protobuf/api_protobuf.py
#include "api_pb2_service.h"
#ifdef USE_API
#include "api_connection.h"
#endif
#include "esphome/core/log.h"
namespace esphome::api {
@@ -21,6 +23,7 @@ void APIServerConnectionBase::log_receive_message_(const LogString *name) {
}
#endif
#ifdef USE_API
void APIConnection::read_message_(uint32_t msg_size, uint32_t msg_type, const uint8_t *msg_data) {
// Check authentication/connection requirements
switch (msg_type) {
@@ -706,5 +709,6 @@ void APIConnection::read_message_(uint32_t msg_size, uint32_t msg_type, const ui
break;
}
}
#endif // USE_API
} // namespace esphome::api

View File

@@ -697,7 +697,7 @@ inline void ProtoLengthDelimited::decode_to_message(ProtoDecodableMessage &msg)
template<typename T> const char *proto_enum_to_string(T value);
// ProtoService removed — all methods moved to APIServerConnectionBase.
// APIConnection is the only concrete class; virtual dispatch was unnecessary.
// ProtoService removed — its methods were inlined into APIConnection.
// APIConnection is the concrete server-side implementation; the extra virtual layer was unnecessary.
} // namespace esphome::api

View File

@@ -2947,7 +2947,9 @@ namespace esphome::api {
cpp = FILE_HEADER
cpp += """\
#include "api_pb2_service.h"
#ifdef USE_API
#include "api_connection.h"
#endif
#include "esphome/core/log.h"
namespace esphome::api {
@@ -3051,11 +3053,12 @@ static const char *const TAG = "api.service";
result += "#endif\n"
return result
# Generate read_message as APIConnection method (not base class) so the compiler
# Generate read_message_ as APIConnection method (not base class) so the compiler
# can devirtualize and inline the on_* handler calls within the same class.
# APIConnection declares the override in api_connection.h.
# APIConnection declares this method in api_connection.h.
out = "void APIConnection::read_message_(uint32_t msg_size, uint32_t msg_type, const uint8_t *msg_data) {\n"
out = "#ifdef USE_API\n"
out += "void APIConnection::read_message_(uint32_t msg_size, uint32_t msg_type, const uint8_t *msg_data) {\n"
# Auth check block before dispatch switch
out += " // Check authentication/connection requirements\n"
@@ -3100,6 +3103,7 @@ static const char *const TAG = "api.service";
out += " break;\n"
out += " }\n"
out += "}\n"
out += "#endif // USE_API\n"
cpp += out
hpp += "};\n"