diff --git a/esphome/components/api/api_connection.cpp b/esphome/components/api/api_connection.cpp index 6fe6037f31..d7022ea22f 100644 --- a/esphome/components/api/api_connection.cpp +++ b/esphome/components/api/api_connection.cpp @@ -248,8 +248,8 @@ void APIConnection::loop() { if (state_subs_at_ < static_cast(subs.size())) { auto &it = subs[state_subs_at_]; SubscribeHomeAssistantStateResponse resp; - resp.entity_id = it.entity_id; - resp.attribute = it.attribute.value(); + resp.set_entity_id(it.entity_id.c_str(), it.entity_id.length()); + resp.set_attribute(it.attribute.value().c_str(), it.attribute.value().length()); resp.once = it.once; if (this->send_message(resp, SubscribeHomeAssistantStateResponse::MESSAGE_TYPE)) { state_subs_at_++; @@ -344,7 +344,8 @@ uint16_t APIConnection::try_send_binary_sensor_info(EntityBase *entity, APIConne bool is_single) { auto *binary_sensor = static_cast(entity); ListEntitiesBinarySensorResponse msg; - msg.device_class = binary_sensor->get_device_class(); + const std::string &device_class = binary_sensor->get_device_class(); + msg.set_device_class(device_class.c_str(), device_class.length()); msg.is_status_binary_sensor = binary_sensor->is_status_binary_sensor(); return fill_and_encode_entity_info(binary_sensor, msg, ListEntitiesBinarySensorResponse::MESSAGE_TYPE, conn, remaining_size, is_single); @@ -376,7 +377,8 @@ uint16_t APIConnection::try_send_cover_info(EntityBase *entity, APIConnection *c msg.supports_position = traits.get_supports_position(); msg.supports_tilt = traits.get_supports_tilt(); msg.supports_stop = traits.get_supports_stop(); - msg.device_class = cover->get_device_class(); + const std::string &device_class = cover->get_device_class(); + msg.set_device_class(device_class.c_str(), device_class.length()); return fill_and_encode_entity_info(cover, msg, ListEntitiesCoverResponse::MESSAGE_TYPE, conn, remaining_size, is_single); } @@ -411,7 +413,7 @@ uint16_t APIConnection::try_send_fan_state(EntityBase *entity, APIConnection *co if (traits.supports_direction()) msg.direction = static_cast(fan->direction); if (traits.supports_preset_modes()) - msg.preset_mode = fan->preset_mode; + msg.set_preset_mode(fan->preset_mode.c_str(), fan->preset_mode.length()); return fill_and_encode_entity_state(fan, msg, FanStateResponse::MESSAGE_TYPE, conn, remaining_size, is_single); } uint16_t APIConnection::try_send_fan_info(EntityBase *entity, APIConnection *conn, uint32_t remaining_size, @@ -468,8 +470,10 @@ uint16_t APIConnection::try_send_light_state(EntityBase *entity, APIConnection * resp.color_temperature = values.get_color_temperature(); resp.cold_white = values.get_cold_white(); resp.warm_white = values.get_warm_white(); - if (light->supports_effects()) - resp.effect = light->get_effect_name(); + if (light->supports_effects()) { + const std::string &effect_name = light->get_effect_name(); + resp.set_effect(effect_name.c_str(), effect_name.length()); + } return fill_and_encode_entity_state(light, resp, LightStateResponse::MESSAGE_TYPE, conn, remaining_size, is_single); } uint16_t APIConnection::try_send_light_info(EntityBase *entity, APIConnection *conn, uint32_t remaining_size, @@ -545,10 +549,12 @@ uint16_t APIConnection::try_send_sensor_info(EntityBase *entity, APIConnection * bool is_single) { auto *sensor = static_cast(entity); ListEntitiesSensorResponse msg; - msg.unit_of_measurement = sensor->get_unit_of_measurement(); + const std::string &unit = sensor->get_unit_of_measurement(); + msg.set_unit_of_measurement(unit.c_str(), unit.length()); msg.accuracy_decimals = sensor->get_accuracy_decimals(); msg.force_update = sensor->get_force_update(); - msg.device_class = sensor->get_device_class(); + const std::string &device_class = sensor->get_device_class(); + msg.set_device_class(device_class.c_str(), device_class.length()); msg.state_class = static_cast(sensor->get_state_class()); return fill_and_encode_entity_info(sensor, msg, ListEntitiesSensorResponse::MESSAGE_TYPE, conn, remaining_size, is_single); @@ -575,7 +581,8 @@ uint16_t APIConnection::try_send_switch_info(EntityBase *entity, APIConnection * auto *a_switch = static_cast(entity); ListEntitiesSwitchResponse msg; msg.assumed_state = a_switch->assumed_state(); - msg.device_class = a_switch->get_device_class(); + const std::string &device_class = a_switch->get_device_class(); + msg.set_device_class(device_class.c_str(), device_class.length()); return fill_and_encode_entity_info(a_switch, msg, ListEntitiesSwitchResponse::MESSAGE_TYPE, conn, remaining_size, is_single); } @@ -600,7 +607,7 @@ uint16_t APIConnection::try_send_text_sensor_state(EntityBase *entity, APIConnec bool is_single) { auto *text_sensor = static_cast(entity); TextSensorStateResponse resp; - resp.state = text_sensor->state; + resp.set_state(text_sensor->state.c_str(), text_sensor->state.length()); resp.missing_state = !text_sensor->has_state(); return fill_and_encode_entity_state(text_sensor, resp, TextSensorStateResponse::MESSAGE_TYPE, conn, remaining_size, is_single); @@ -609,7 +616,8 @@ uint16_t APIConnection::try_send_text_sensor_info(EntityBase *entity, APIConnect bool is_single) { auto *text_sensor = static_cast(entity); ListEntitiesTextSensorResponse msg; - msg.device_class = text_sensor->get_device_class(); + const std::string &device_class = text_sensor->get_device_class(); + msg.set_device_class(device_class.c_str(), device_class.length()); return fill_and_encode_entity_info(text_sensor, msg, ListEntitiesTextSensorResponse::MESSAGE_TYPE, conn, remaining_size, is_single); } @@ -637,13 +645,17 @@ uint16_t APIConnection::try_send_climate_state(EntityBase *entity, APIConnection } if (traits.get_supports_fan_modes() && climate->fan_mode.has_value()) resp.fan_mode = static_cast(climate->fan_mode.value()); - if (!traits.get_supported_custom_fan_modes().empty() && climate->custom_fan_mode.has_value()) - resp.custom_fan_mode = climate->custom_fan_mode.value(); + if (!traits.get_supported_custom_fan_modes().empty() && climate->custom_fan_mode.has_value()) { + const std::string &custom_fan = climate->custom_fan_mode.value(); + resp.set_custom_fan_mode(custom_fan.c_str(), custom_fan.length()); + } if (traits.get_supports_presets() && climate->preset.has_value()) { resp.preset = static_cast(climate->preset.value()); } - if (!traits.get_supported_custom_presets().empty() && climate->custom_preset.has_value()) - resp.custom_preset = climate->custom_preset.value(); + if (!traits.get_supported_custom_presets().empty() && climate->custom_preset.has_value()) { + const std::string &custom_preset = climate->custom_preset.value(); + resp.set_custom_preset(custom_preset.c_str(), custom_preset.length()); + } if (traits.get_supports_swing_modes()) resp.swing_mode = static_cast(climate->swing_mode); if (traits.get_supports_current_humidity()) @@ -729,9 +741,11 @@ uint16_t APIConnection::try_send_number_info(EntityBase *entity, APIConnection * bool is_single) { auto *number = static_cast(entity); ListEntitiesNumberResponse msg; - msg.unit_of_measurement = number->traits.get_unit_of_measurement(); + const std::string &unit = number->traits.get_unit_of_measurement(); + msg.set_unit_of_measurement(unit.c_str(), unit.length()); msg.mode = static_cast(number->traits.get_mode()); - msg.device_class = number->traits.get_device_class(); + const std::string &device_class = number->traits.get_device_class(); + msg.set_device_class(device_class.c_str(), device_class.length()); msg.min_value = number->traits.get_min_value(); msg.max_value = number->traits.get_max_value(); msg.step = number->traits.get_step(); @@ -844,7 +858,7 @@ uint16_t APIConnection::try_send_text_state(EntityBase *entity, APIConnection *c bool is_single) { auto *text = static_cast(entity); TextStateResponse resp; - resp.state = text->state; + resp.set_state(text->state.c_str(), text->state.length()); resp.missing_state = !text->has_state(); return fill_and_encode_entity_state(text, resp, TextStateResponse::MESSAGE_TYPE, conn, remaining_size, is_single); } @@ -856,7 +870,8 @@ uint16_t APIConnection::try_send_text_info(EntityBase *entity, APIConnection *co msg.mode = static_cast(text->traits.get_mode()); msg.min_length = text->traits.get_min_length(); msg.max_length = text->traits.get_max_length(); - msg.pattern = text->traits.get_pattern(); + const std::string &pattern = text->traits.get_pattern(); + msg.set_pattern(pattern.c_str(), pattern.length()); return fill_and_encode_entity_info(text, msg, ListEntitiesTextResponse::MESSAGE_TYPE, conn, remaining_size, is_single); } @@ -877,7 +892,7 @@ uint16_t APIConnection::try_send_select_state(EntityBase *entity, APIConnection bool is_single) { auto *select = static_cast(entity); SelectStateResponse resp; - resp.state = select->state; + resp.set_state(select->state.c_str(), select->state.length()); resp.missing_state = !select->has_state(); return fill_and_encode_entity_state(select, resp, SelectStateResponse::MESSAGE_TYPE, conn, remaining_size, is_single); } @@ -903,7 +918,8 @@ uint16_t APIConnection::try_send_button_info(EntityBase *entity, APIConnection * bool is_single) { auto *button = static_cast(entity); ListEntitiesButtonResponse msg; - msg.device_class = button->get_device_class(); + const std::string &device_class = button->get_device_class(); + msg.set_device_class(device_class.c_str(), device_class.length()); return fill_and_encode_entity_info(button, msg, ListEntitiesButtonResponse::MESSAGE_TYPE, conn, remaining_size, is_single); } @@ -972,7 +988,8 @@ uint16_t APIConnection::try_send_valve_info(EntityBase *entity, APIConnection *c auto *valve = static_cast(entity); ListEntitiesValveResponse msg; auto traits = valve->get_traits(); - msg.device_class = valve->get_device_class(); + const std::string &device_class = valve->get_device_class(); + msg.set_device_class(device_class.c_str(), device_class.length()); msg.assumed_state = traits.get_is_assumed_state(); msg.supports_position = traits.get_supports_position(); msg.supports_stop = traits.get_supports_stop(); @@ -1273,7 +1290,7 @@ void APIConnection::send_event(event::Event *event, const std::string &event_typ uint16_t APIConnection::try_send_event_response(event::Event *event, const std::string &event_type, APIConnection *conn, uint32_t remaining_size, bool is_single) { EventResponse resp; - resp.event_type = event_type; + resp.set_event_type(event_type.c_str(), event_type.length()); return fill_and_encode_entity_state(event, resp, EventResponse::MESSAGE_TYPE, conn, remaining_size, is_single); } @@ -1281,7 +1298,8 @@ uint16_t APIConnection::try_send_event_info(EntityBase *entity, APIConnection *c bool is_single) { auto *event = static_cast(entity); ListEntitiesEventResponse msg; - msg.device_class = event->get_device_class(); + const std::string &device_class = event->get_device_class(); + msg.set_device_class(device_class.c_str(), device_class.length()); for (const auto &event_type : event->get_event_types()) msg.event_types.push_back(event_type); return fill_and_encode_entity_info(event, msg, ListEntitiesEventResponse::MESSAGE_TYPE, conn, remaining_size, @@ -1305,11 +1323,11 @@ uint16_t APIConnection::try_send_update_state(EntityBase *entity, APIConnection resp.has_progress = true; resp.progress = update->update_info.progress; } - resp.current_version = update->update_info.current_version; - resp.latest_version = update->update_info.latest_version; - resp.title = update->update_info.title; - resp.release_summary = update->update_info.summary; - resp.release_url = update->update_info.release_url; + resp.set_current_version(update->update_info.current_version.c_str(), update->update_info.current_version.length()); + resp.set_latest_version(update->update_info.latest_version.c_str(), update->update_info.latest_version.length()); + resp.set_title(update->update_info.title.c_str(), update->update_info.title.length()); + resp.set_release_summary(update->update_info.summary.c_str(), update->update_info.summary.length()); + resp.set_release_url(update->update_info.release_url.c_str(), update->update_info.release_url.length()); } return fill_and_encode_entity_state(update, resp, UpdateStateResponse::MESSAGE_TYPE, conn, remaining_size, is_single); } @@ -1317,7 +1335,8 @@ uint16_t APIConnection::try_send_update_info(EntityBase *entity, APIConnection * bool is_single) { auto *update = static_cast(entity); ListEntitiesUpdateResponse msg; - msg.device_class = update->get_device_class(); + const std::string &device_class = update->get_device_class(); + msg.set_device_class(device_class.c_str(), device_class.length()); return fill_and_encode_entity_info(update, msg, ListEntitiesUpdateResponse::MESSAGE_TYPE, conn, remaining_size, is_single); } @@ -1377,8 +1396,10 @@ HelloResponse APIConnection::hello(const HelloRequest &msg) { HelloResponse resp; resp.api_version_major = 1; resp.api_version_minor = 10; - resp.server_info = App.get_name() + " (esphome v" ESPHOME_VERSION ")"; - resp.name = App.get_name(); + std::string server_info = App.get_name() + " (esphome v" ESPHOME_VERSION ")"; + resp.set_server_info(server_info.c_str(), server_info.length()); + const std::string &name = App.get_name(); + resp.set_name(name.c_str(), name.length()); #ifdef USE_API_PASSWORD // Password required - wait for authentication @@ -1409,41 +1430,47 @@ DeviceInfoResponse APIConnection::device_info(const DeviceInfoRequest &msg) { #ifdef USE_API_PASSWORD resp.uses_password = true; #endif - resp.name = App.get_name(); - resp.friendly_name = App.get_friendly_name(); + const std::string &name = App.get_name(); + resp.set_name(name.c_str(), name.length()); + const std::string &friendly_name = App.get_friendly_name(); + resp.set_friendly_name(friendly_name.c_str(), friendly_name.length()); #ifdef USE_AREAS - resp.suggested_area = App.get_area(); + const std::string &area = App.get_area(); + resp.set_suggested_area(area.c_str(), area.length()); #endif - resp.mac_address = get_mac_address_pretty(); - resp.esphome_version = ESPHOME_VERSION; - resp.compilation_time = App.get_compilation_time(); + std::string mac = get_mac_address_pretty(); + resp.set_mac_address(mac.c_str(), mac.length()); + resp.set_esphome_version(ESPHOME_VERSION, strlen(ESPHOME_VERSION)); + const std::string &compilation_time = App.get_compilation_time(); + resp.set_compilation_time(compilation_time.c_str(), compilation_time.length()); #if defined(USE_ESP8266) || defined(USE_ESP32) - resp.manufacturer = "Espressif"; + resp.set_manufacturer("Espressif", 9); #elif defined(USE_RP2040) - resp.manufacturer = "Raspberry Pi"; + resp.set_manufacturer("Raspberry Pi", 12); #elif defined(USE_BK72XX) - resp.manufacturer = "Beken"; + resp.set_manufacturer("Beken", 5); #elif defined(USE_LN882X) - resp.manufacturer = "Lightning"; + resp.set_manufacturer("Lightning", 9); #elif defined(USE_RTL87XX) - resp.manufacturer = "Realtek"; + resp.set_manufacturer("Realtek", 7); #elif defined(USE_HOST) - resp.manufacturer = "Host"; + resp.set_manufacturer("Host", 4); #endif - resp.model = ESPHOME_BOARD; + resp.set_model(ESPHOME_BOARD, strlen(ESPHOME_BOARD)); #ifdef USE_DEEP_SLEEP resp.has_deep_sleep = deep_sleep::global_has_deep_sleep; #endif #ifdef ESPHOME_PROJECT_NAME - resp.project_name = ESPHOME_PROJECT_NAME; - resp.project_version = ESPHOME_PROJECT_VERSION; + resp.set_project_name(ESPHOME_PROJECT_NAME, strlen(ESPHOME_PROJECT_NAME)); + resp.set_project_version(ESPHOME_PROJECT_VERSION, strlen(ESPHOME_PROJECT_VERSION)); #endif #ifdef USE_WEBSERVER resp.webserver_port = USE_WEBSERVER_PORT; #endif #ifdef USE_BLUETOOTH_PROXY resp.bluetooth_proxy_feature_flags = bluetooth_proxy::global_bluetooth_proxy->get_feature_flags(); - resp.bluetooth_mac_address = bluetooth_proxy::global_bluetooth_proxy->get_bluetooth_mac_address_pretty(); + std::string bt_mac = bluetooth_proxy::global_bluetooth_proxy->get_bluetooth_mac_address_pretty(); + resp.set_bluetooth_mac_address(bt_mac.c_str(), bt_mac.length()); #endif #ifdef USE_VOICE_ASSISTANT resp.voice_assistant_feature_flags = voice_assistant::global_voice_assistant->get_feature_flags(); @@ -1453,19 +1480,21 @@ DeviceInfoResponse APIConnection::device_info(const DeviceInfoRequest &msg) { #endif #ifdef USE_DEVICES for (auto const &device : App.get_devices()) { - DeviceInfo device_info; + resp.devices.emplace_back(); + auto &device_info = resp.devices.back(); device_info.device_id = device->get_device_id(); - device_info.name = device->get_name(); + const std::string &device_name = device->get_name(); + device_info.set_name(device_name.c_str(), device_name.length()); device_info.area_id = device->get_area_id(); - resp.devices.push_back(device_info); } #endif #ifdef USE_AREAS for (auto const &area : App.get_areas()) { - AreaInfo area_info; + resp.areas.emplace_back(); + auto &area_info = resp.areas.back(); area_info.area_id = area->get_area_id(); - area_info.name = area->get_name(); - resp.areas.push_back(area_info); + const std::string &area_name = area->get_name(); + area_info.set_name(area_name.c_str(), area_name.length()); } #endif return resp; diff --git a/esphome/components/api/api_connection.h b/esphome/components/api/api_connection.h index de7e91de01..ceb9e1b5e9 100644 --- a/esphome/components/api/api_connection.h +++ b/esphome/components/api/api_connection.h @@ -313,14 +313,18 @@ class APIConnection : public APIServerConnection { APIConnection *conn, uint32_t remaining_size, bool is_single) { // Set common fields that are shared by all entity types msg.key = entity->get_object_id_hash(); - msg.object_id = entity->get_object_id(); + const std::string &object_id = entity->get_object_id(); + msg.set_object_id(object_id.c_str(), object_id.length()); - if (entity->has_own_name()) - msg.name = entity->get_name(); + if (entity->has_own_name()) { + const std::string &name = entity->get_name(); + msg.set_name(name.c_str(), name.length()); + } - // Set common EntityBase properties + // Set common EntityBase properties #ifdef USE_ENTITY_ICON - msg.icon = entity->get_icon(); + const std::string &icon = entity->get_icon(); + msg.set_icon(icon.c_str(), icon.length()); #endif msg.disabled_by_default = entity->is_disabled_by_default(); msg.entity_category = static_cast(entity->get_entity_category()); diff --git a/esphome/components/api/api_pb2.cpp b/esphome/components/api/api_pb2.cpp index 28d135ed6d..39bc0611fe 100644 --- a/esphome/components/api/api_pb2.cpp +++ b/esphome/components/api/api_pb2.cpp @@ -34,14 +34,14 @@ bool HelloRequest::decode_length(uint32_t field_id, ProtoLengthDelimited value) void HelloResponse::encode(ProtoWriteBuffer buffer) const { buffer.encode_uint32(1, this->api_version_major); buffer.encode_uint32(2, this->api_version_minor); - buffer.encode_string(3, this->server_info); - buffer.encode_string(4, this->name); + buffer.encode_string(3, this->server_info_ptr_, this->server_info_len_); + buffer.encode_string(4, this->name_ptr_, this->name_len_); } void HelloResponse::calculate_size(uint32_t &total_size) const { ProtoSize::add_uint32_field(total_size, 1, this->api_version_major); ProtoSize::add_uint32_field(total_size, 1, this->api_version_minor); - ProtoSize::add_string_field(total_size, 1, this->server_info); - ProtoSize::add_string_field(total_size, 1, this->name); + ProtoSize::add_string_field(total_size, 1, this->server_info_len_); + ProtoSize::add_string_field(total_size, 1, this->name_len_); } bool ConnectRequest::decode_length(uint32_t field_id, ProtoLengthDelimited value) { switch (field_id) { @@ -60,22 +60,22 @@ void ConnectResponse::calculate_size(uint32_t &total_size) const { #ifdef USE_AREAS void AreaInfo::encode(ProtoWriteBuffer buffer) const { buffer.encode_uint32(1, this->area_id); - buffer.encode_string(2, this->name); + buffer.encode_string(2, this->name_ptr_, this->name_len_); } void AreaInfo::calculate_size(uint32_t &total_size) const { ProtoSize::add_uint32_field(total_size, 1, this->area_id); - ProtoSize::add_string_field(total_size, 1, this->name); + ProtoSize::add_string_field(total_size, 1, this->name_len_); } #endif #ifdef USE_DEVICES void DeviceInfo::encode(ProtoWriteBuffer buffer) const { buffer.encode_uint32(1, this->device_id); - buffer.encode_string(2, this->name); + buffer.encode_string(2, this->name_ptr_, this->name_len_); buffer.encode_uint32(3, this->area_id); } void DeviceInfo::calculate_size(uint32_t &total_size) const { ProtoSize::add_uint32_field(total_size, 1, this->device_id); - ProtoSize::add_string_field(total_size, 1, this->name); + ProtoSize::add_string_field(total_size, 1, this->name_len_); ProtoSize::add_uint32_field(total_size, 1, this->area_id); } #endif @@ -83,19 +83,19 @@ void DeviceInfoResponse::encode(ProtoWriteBuffer buffer) const { #ifdef USE_API_PASSWORD buffer.encode_bool(1, this->uses_password); #endif - buffer.encode_string(2, this->name); - buffer.encode_string(3, this->mac_address); - buffer.encode_string(4, this->esphome_version); - buffer.encode_string(5, this->compilation_time); - buffer.encode_string(6, this->model); + buffer.encode_string(2, this->name_ptr_, this->name_len_); + buffer.encode_string(3, this->mac_address_ptr_, this->mac_address_len_); + buffer.encode_string(4, this->esphome_version_ptr_, this->esphome_version_len_); + buffer.encode_string(5, this->compilation_time_ptr_, this->compilation_time_len_); + buffer.encode_string(6, this->model_ptr_, this->model_len_); #ifdef USE_DEEP_SLEEP buffer.encode_bool(7, this->has_deep_sleep); #endif #ifdef ESPHOME_PROJECT_NAME - buffer.encode_string(8, this->project_name); + buffer.encode_string(8, this->project_name_ptr_, this->project_name_len_); #endif #ifdef ESPHOME_PROJECT_NAME - buffer.encode_string(9, this->project_version); + buffer.encode_string(9, this->project_version_ptr_, this->project_version_len_); #endif #ifdef USE_WEBSERVER buffer.encode_uint32(10, this->webserver_port); @@ -103,16 +103,16 @@ void DeviceInfoResponse::encode(ProtoWriteBuffer buffer) const { #ifdef USE_BLUETOOTH_PROXY buffer.encode_uint32(15, this->bluetooth_proxy_feature_flags); #endif - buffer.encode_string(12, this->manufacturer); - buffer.encode_string(13, this->friendly_name); + buffer.encode_string(12, this->manufacturer_ptr_, this->manufacturer_len_); + buffer.encode_string(13, this->friendly_name_ptr_, this->friendly_name_len_); #ifdef USE_VOICE_ASSISTANT buffer.encode_uint32(17, this->voice_assistant_feature_flags); #endif #ifdef USE_AREAS - buffer.encode_string(16, this->suggested_area); + buffer.encode_string(16, this->suggested_area_ptr_, this->suggested_area_len_); #endif #ifdef USE_BLUETOOTH_PROXY - buffer.encode_string(18, this->bluetooth_mac_address); + buffer.encode_string(18, this->bluetooth_mac_address_ptr_, this->bluetooth_mac_address_len_); #endif #ifdef USE_API_NOISE buffer.encode_bool(19, this->api_encryption_supported); @@ -135,19 +135,19 @@ void DeviceInfoResponse::calculate_size(uint32_t &total_size) const { #ifdef USE_API_PASSWORD ProtoSize::add_bool_field(total_size, 1, this->uses_password); #endif - ProtoSize::add_string_field(total_size, 1, this->name); - ProtoSize::add_string_field(total_size, 1, this->mac_address); - ProtoSize::add_string_field(total_size, 1, this->esphome_version); - ProtoSize::add_string_field(total_size, 1, this->compilation_time); - ProtoSize::add_string_field(total_size, 1, this->model); + ProtoSize::add_string_field(total_size, 1, this->name_len_); + ProtoSize::add_string_field(total_size, 1, this->mac_address_len_); + ProtoSize::add_string_field(total_size, 1, this->esphome_version_len_); + ProtoSize::add_string_field(total_size, 1, this->compilation_time_len_); + ProtoSize::add_string_field(total_size, 1, this->model_len_); #ifdef USE_DEEP_SLEEP ProtoSize::add_bool_field(total_size, 1, this->has_deep_sleep); #endif #ifdef ESPHOME_PROJECT_NAME - ProtoSize::add_string_field(total_size, 1, this->project_name); + ProtoSize::add_string_field(total_size, 1, this->project_name_len_); #endif #ifdef ESPHOME_PROJECT_NAME - ProtoSize::add_string_field(total_size, 1, this->project_version); + ProtoSize::add_string_field(total_size, 1, this->project_version_len_); #endif #ifdef USE_WEBSERVER ProtoSize::add_uint32_field(total_size, 1, this->webserver_port); @@ -155,16 +155,16 @@ void DeviceInfoResponse::calculate_size(uint32_t &total_size) const { #ifdef USE_BLUETOOTH_PROXY ProtoSize::add_uint32_field(total_size, 1, this->bluetooth_proxy_feature_flags); #endif - ProtoSize::add_string_field(total_size, 1, this->manufacturer); - ProtoSize::add_string_field(total_size, 1, this->friendly_name); + ProtoSize::add_string_field(total_size, 1, this->manufacturer_len_); + ProtoSize::add_string_field(total_size, 1, this->friendly_name_len_); #ifdef USE_VOICE_ASSISTANT ProtoSize::add_uint32_field(total_size, 2, this->voice_assistant_feature_flags); #endif #ifdef USE_AREAS - ProtoSize::add_string_field(total_size, 2, this->suggested_area); + ProtoSize::add_string_field(total_size, 2, this->suggested_area_len_); #endif #ifdef USE_BLUETOOTH_PROXY - ProtoSize::add_string_field(total_size, 2, this->bluetooth_mac_address); + ProtoSize::add_string_field(total_size, 2, this->bluetooth_mac_address_len_); #endif #ifdef USE_API_NOISE ProtoSize::add_bool_field(total_size, 2, this->api_encryption_supported); @@ -181,14 +181,14 @@ void DeviceInfoResponse::calculate_size(uint32_t &total_size) const { } #ifdef USE_BINARY_SENSOR void ListEntitiesBinarySensorResponse::encode(ProtoWriteBuffer buffer) const { - buffer.encode_string(1, this->object_id); + buffer.encode_string(1, this->object_id_ptr_, this->object_id_len_); buffer.encode_fixed32(2, this->key); - buffer.encode_string(3, this->name); - buffer.encode_string(5, this->device_class); + buffer.encode_string(3, this->name_ptr_, this->name_len_); + buffer.encode_string(5, this->device_class_ptr_, this->device_class_len_); buffer.encode_bool(6, this->is_status_binary_sensor); buffer.encode_bool(7, this->disabled_by_default); #ifdef USE_ENTITY_ICON - buffer.encode_string(8, this->icon); + buffer.encode_string(8, this->icon_ptr_, this->icon_len_); #endif buffer.encode_uint32(9, static_cast(this->entity_category)); #ifdef USE_DEVICES @@ -196,14 +196,14 @@ void ListEntitiesBinarySensorResponse::encode(ProtoWriteBuffer buffer) const { #endif } void ListEntitiesBinarySensorResponse::calculate_size(uint32_t &total_size) const { - ProtoSize::add_string_field(total_size, 1, this->object_id); + ProtoSize::add_string_field(total_size, 1, this->object_id_len_); ProtoSize::add_fixed32_field(total_size, 1, this->key); - ProtoSize::add_string_field(total_size, 1, this->name); - ProtoSize::add_string_field(total_size, 1, this->device_class); + ProtoSize::add_string_field(total_size, 1, this->name_len_); + ProtoSize::add_string_field(total_size, 1, this->device_class_len_); ProtoSize::add_bool_field(total_size, 1, this->is_status_binary_sensor); ProtoSize::add_bool_field(total_size, 1, this->disabled_by_default); #ifdef USE_ENTITY_ICON - ProtoSize::add_string_field(total_size, 1, this->icon); + ProtoSize::add_string_field(total_size, 1, this->icon_len_); #endif ProtoSize::add_enum_field(total_size, 1, static_cast(this->entity_category)); #ifdef USE_DEVICES @@ -229,16 +229,16 @@ void BinarySensorStateResponse::calculate_size(uint32_t &total_size) const { #endif #ifdef USE_COVER void ListEntitiesCoverResponse::encode(ProtoWriteBuffer buffer) const { - buffer.encode_string(1, this->object_id); + buffer.encode_string(1, this->object_id_ptr_, this->object_id_len_); buffer.encode_fixed32(2, this->key); - buffer.encode_string(3, this->name); + buffer.encode_string(3, this->name_ptr_, this->name_len_); buffer.encode_bool(5, this->assumed_state); buffer.encode_bool(6, this->supports_position); buffer.encode_bool(7, this->supports_tilt); - buffer.encode_string(8, this->device_class); + buffer.encode_string(8, this->device_class_ptr_, this->device_class_len_); buffer.encode_bool(9, this->disabled_by_default); #ifdef USE_ENTITY_ICON - buffer.encode_string(10, this->icon); + buffer.encode_string(10, this->icon_ptr_, this->icon_len_); #endif buffer.encode_uint32(11, static_cast(this->entity_category)); buffer.encode_bool(12, this->supports_stop); @@ -247,16 +247,16 @@ void ListEntitiesCoverResponse::encode(ProtoWriteBuffer buffer) const { #endif } void ListEntitiesCoverResponse::calculate_size(uint32_t &total_size) const { - ProtoSize::add_string_field(total_size, 1, this->object_id); + ProtoSize::add_string_field(total_size, 1, this->object_id_len_); ProtoSize::add_fixed32_field(total_size, 1, this->key); - ProtoSize::add_string_field(total_size, 1, this->name); + ProtoSize::add_string_field(total_size, 1, this->name_len_); ProtoSize::add_bool_field(total_size, 1, this->assumed_state); ProtoSize::add_bool_field(total_size, 1, this->supports_position); ProtoSize::add_bool_field(total_size, 1, this->supports_tilt); - ProtoSize::add_string_field(total_size, 1, this->device_class); + ProtoSize::add_string_field(total_size, 1, this->device_class_len_); ProtoSize::add_bool_field(total_size, 1, this->disabled_by_default); #ifdef USE_ENTITY_ICON - ProtoSize::add_string_field(total_size, 1, this->icon); + ProtoSize::add_string_field(total_size, 1, this->icon_len_); #endif ProtoSize::add_enum_field(total_size, 1, static_cast(this->entity_category)); ProtoSize::add_bool_field(total_size, 1, this->supports_stop); @@ -322,16 +322,16 @@ bool CoverCommandRequest::decode_32bit(uint32_t field_id, Proto32Bit value) { #endif #ifdef USE_FAN void ListEntitiesFanResponse::encode(ProtoWriteBuffer buffer) const { - buffer.encode_string(1, this->object_id); + buffer.encode_string(1, this->object_id_ptr_, this->object_id_len_); buffer.encode_fixed32(2, this->key); - buffer.encode_string(3, this->name); + buffer.encode_string(3, this->name_ptr_, this->name_len_); buffer.encode_bool(5, this->supports_oscillation); buffer.encode_bool(6, this->supports_speed); buffer.encode_bool(7, this->supports_direction); buffer.encode_int32(8, this->supported_speed_count); buffer.encode_bool(9, this->disabled_by_default); #ifdef USE_ENTITY_ICON - buffer.encode_string(10, this->icon); + buffer.encode_string(10, this->icon_ptr_, this->icon_len_); #endif buffer.encode_uint32(11, static_cast(this->entity_category)); for (auto &it : this->supported_preset_modes) { @@ -342,21 +342,21 @@ void ListEntitiesFanResponse::encode(ProtoWriteBuffer buffer) const { #endif } void ListEntitiesFanResponse::calculate_size(uint32_t &total_size) const { - ProtoSize::add_string_field(total_size, 1, this->object_id); + ProtoSize::add_string_field(total_size, 1, this->object_id_len_); ProtoSize::add_fixed32_field(total_size, 1, this->key); - ProtoSize::add_string_field(total_size, 1, this->name); + ProtoSize::add_string_field(total_size, 1, this->name_len_); ProtoSize::add_bool_field(total_size, 1, this->supports_oscillation); ProtoSize::add_bool_field(total_size, 1, this->supports_speed); ProtoSize::add_bool_field(total_size, 1, this->supports_direction); ProtoSize::add_int32_field(total_size, 1, this->supported_speed_count); ProtoSize::add_bool_field(total_size, 1, this->disabled_by_default); #ifdef USE_ENTITY_ICON - ProtoSize::add_string_field(total_size, 1, this->icon); + ProtoSize::add_string_field(total_size, 1, this->icon_len_); #endif ProtoSize::add_enum_field(total_size, 1, static_cast(this->entity_category)); if (!this->supported_preset_modes.empty()) { for (const auto &it : this->supported_preset_modes) { - ProtoSize::add_string_field_repeated(total_size, 1, it); + ProtoSize::add_string_field(total_size, 1, it.length()); } } #ifdef USE_DEVICES @@ -369,7 +369,7 @@ void FanStateResponse::encode(ProtoWriteBuffer buffer) const { buffer.encode_bool(3, this->oscillating); buffer.encode_uint32(5, static_cast(this->direction)); buffer.encode_int32(6, this->speed_level); - buffer.encode_string(7, this->preset_mode); + buffer.encode_string(7, this->preset_mode_ptr_, this->preset_mode_len_); #ifdef USE_DEVICES buffer.encode_uint32(8, this->device_id); #endif @@ -380,7 +380,7 @@ void FanStateResponse::calculate_size(uint32_t &total_size) const { ProtoSize::add_bool_field(total_size, 1, this->oscillating); ProtoSize::add_enum_field(total_size, 1, static_cast(this->direction)); ProtoSize::add_int32_field(total_size, 1, this->speed_level); - ProtoSize::add_string_field(total_size, 1, this->preset_mode); + ProtoSize::add_string_field(total_size, 1, this->preset_mode_len_); #ifdef USE_DEVICES ProtoSize::add_uint32_field(total_size, 1, this->device_id); #endif @@ -447,9 +447,9 @@ bool FanCommandRequest::decode_32bit(uint32_t field_id, Proto32Bit value) { #endif #ifdef USE_LIGHT void ListEntitiesLightResponse::encode(ProtoWriteBuffer buffer) const { - buffer.encode_string(1, this->object_id); + buffer.encode_string(1, this->object_id_ptr_, this->object_id_len_); buffer.encode_fixed32(2, this->key); - buffer.encode_string(3, this->name); + buffer.encode_string(3, this->name_ptr_, this->name_len_); for (auto &it : this->supported_color_modes) { buffer.encode_uint32(12, static_cast(it), true); } @@ -460,7 +460,7 @@ void ListEntitiesLightResponse::encode(ProtoWriteBuffer buffer) const { } buffer.encode_bool(13, this->disabled_by_default); #ifdef USE_ENTITY_ICON - buffer.encode_string(14, this->icon); + buffer.encode_string(14, this->icon_ptr_, this->icon_len_); #endif buffer.encode_uint32(15, static_cast(this->entity_category)); #ifdef USE_DEVICES @@ -468,9 +468,9 @@ void ListEntitiesLightResponse::encode(ProtoWriteBuffer buffer) const { #endif } void ListEntitiesLightResponse::calculate_size(uint32_t &total_size) const { - ProtoSize::add_string_field(total_size, 1, this->object_id); + ProtoSize::add_string_field(total_size, 1, this->object_id_len_); ProtoSize::add_fixed32_field(total_size, 1, this->key); - ProtoSize::add_string_field(total_size, 1, this->name); + ProtoSize::add_string_field(total_size, 1, this->name_len_); if (!this->supported_color_modes.empty()) { for (const auto &it : this->supported_color_modes) { ProtoSize::add_enum_field_repeated(total_size, 1, static_cast(it)); @@ -480,12 +480,12 @@ void ListEntitiesLightResponse::calculate_size(uint32_t &total_size) const { ProtoSize::add_float_field(total_size, 1, this->max_mireds); if (!this->effects.empty()) { for (const auto &it : this->effects) { - ProtoSize::add_string_field_repeated(total_size, 1, it); + ProtoSize::add_string_field(total_size, 1, it.length()); } } ProtoSize::add_bool_field(total_size, 1, this->disabled_by_default); #ifdef USE_ENTITY_ICON - ProtoSize::add_string_field(total_size, 1, this->icon); + ProtoSize::add_string_field(total_size, 1, this->icon_len_); #endif ProtoSize::add_enum_field(total_size, 1, static_cast(this->entity_category)); #ifdef USE_DEVICES @@ -505,7 +505,7 @@ void LightStateResponse::encode(ProtoWriteBuffer buffer) const { buffer.encode_float(8, this->color_temperature); buffer.encode_float(12, this->cold_white); buffer.encode_float(13, this->warm_white); - buffer.encode_string(9, this->effect); + buffer.encode_string(9, this->effect_ptr_, this->effect_len_); #ifdef USE_DEVICES buffer.encode_uint32(14, this->device_id); #endif @@ -523,7 +523,7 @@ void LightStateResponse::calculate_size(uint32_t &total_size) const { ProtoSize::add_float_field(total_size, 1, this->color_temperature); ProtoSize::add_float_field(total_size, 1, this->cold_white); ProtoSize::add_float_field(total_size, 1, this->warm_white); - ProtoSize::add_string_field(total_size, 1, this->effect); + ProtoSize::add_string_field(total_size, 1, this->effect_len_); #ifdef USE_DEVICES ProtoSize::add_uint32_field(total_size, 1, this->device_id); #endif @@ -638,16 +638,16 @@ bool LightCommandRequest::decode_32bit(uint32_t field_id, Proto32Bit value) { #endif #ifdef USE_SENSOR void ListEntitiesSensorResponse::encode(ProtoWriteBuffer buffer) const { - buffer.encode_string(1, this->object_id); + buffer.encode_string(1, this->object_id_ptr_, this->object_id_len_); buffer.encode_fixed32(2, this->key); - buffer.encode_string(3, this->name); + buffer.encode_string(3, this->name_ptr_, this->name_len_); #ifdef USE_ENTITY_ICON - buffer.encode_string(5, this->icon); + buffer.encode_string(5, this->icon_ptr_, this->icon_len_); #endif - buffer.encode_string(6, this->unit_of_measurement); + buffer.encode_string(6, this->unit_of_measurement_ptr_, this->unit_of_measurement_len_); buffer.encode_int32(7, this->accuracy_decimals); buffer.encode_bool(8, this->force_update); - buffer.encode_string(9, this->device_class); + buffer.encode_string(9, this->device_class_ptr_, this->device_class_len_); buffer.encode_uint32(10, static_cast(this->state_class)); buffer.encode_bool(12, this->disabled_by_default); buffer.encode_uint32(13, static_cast(this->entity_category)); @@ -656,16 +656,16 @@ void ListEntitiesSensorResponse::encode(ProtoWriteBuffer buffer) const { #endif } void ListEntitiesSensorResponse::calculate_size(uint32_t &total_size) const { - ProtoSize::add_string_field(total_size, 1, this->object_id); + ProtoSize::add_string_field(total_size, 1, this->object_id_len_); ProtoSize::add_fixed32_field(total_size, 1, this->key); - ProtoSize::add_string_field(total_size, 1, this->name); + ProtoSize::add_string_field(total_size, 1, this->name_len_); #ifdef USE_ENTITY_ICON - ProtoSize::add_string_field(total_size, 1, this->icon); + ProtoSize::add_string_field(total_size, 1, this->icon_len_); #endif - ProtoSize::add_string_field(total_size, 1, this->unit_of_measurement); + ProtoSize::add_string_field(total_size, 1, this->unit_of_measurement_len_); ProtoSize::add_int32_field(total_size, 1, this->accuracy_decimals); ProtoSize::add_bool_field(total_size, 1, this->force_update); - ProtoSize::add_string_field(total_size, 1, this->device_class); + ProtoSize::add_string_field(total_size, 1, this->device_class_len_); ProtoSize::add_enum_field(total_size, 1, static_cast(this->state_class)); ProtoSize::add_bool_field(total_size, 1, this->disabled_by_default); ProtoSize::add_enum_field(total_size, 1, static_cast(this->entity_category)); @@ -692,31 +692,31 @@ void SensorStateResponse::calculate_size(uint32_t &total_size) const { #endif #ifdef USE_SWITCH void ListEntitiesSwitchResponse::encode(ProtoWriteBuffer buffer) const { - buffer.encode_string(1, this->object_id); + buffer.encode_string(1, this->object_id_ptr_, this->object_id_len_); buffer.encode_fixed32(2, this->key); - buffer.encode_string(3, this->name); + buffer.encode_string(3, this->name_ptr_, this->name_len_); #ifdef USE_ENTITY_ICON - buffer.encode_string(5, this->icon); + buffer.encode_string(5, this->icon_ptr_, this->icon_len_); #endif buffer.encode_bool(6, this->assumed_state); buffer.encode_bool(7, this->disabled_by_default); buffer.encode_uint32(8, static_cast(this->entity_category)); - buffer.encode_string(9, this->device_class); + buffer.encode_string(9, this->device_class_ptr_, this->device_class_len_); #ifdef USE_DEVICES buffer.encode_uint32(10, this->device_id); #endif } void ListEntitiesSwitchResponse::calculate_size(uint32_t &total_size) const { - ProtoSize::add_string_field(total_size, 1, this->object_id); + ProtoSize::add_string_field(total_size, 1, this->object_id_len_); ProtoSize::add_fixed32_field(total_size, 1, this->key); - ProtoSize::add_string_field(total_size, 1, this->name); + ProtoSize::add_string_field(total_size, 1, this->name_len_); #ifdef USE_ENTITY_ICON - ProtoSize::add_string_field(total_size, 1, this->icon); + ProtoSize::add_string_field(total_size, 1, this->icon_len_); #endif ProtoSize::add_bool_field(total_size, 1, this->assumed_state); ProtoSize::add_bool_field(total_size, 1, this->disabled_by_default); ProtoSize::add_enum_field(total_size, 1, static_cast(this->entity_category)); - ProtoSize::add_string_field(total_size, 1, this->device_class); + ProtoSize::add_string_field(total_size, 1, this->device_class_len_); #ifdef USE_DEVICES ProtoSize::add_uint32_field(total_size, 1, this->device_id); #endif @@ -763,36 +763,36 @@ bool SwitchCommandRequest::decode_32bit(uint32_t field_id, Proto32Bit value) { #endif #ifdef USE_TEXT_SENSOR void ListEntitiesTextSensorResponse::encode(ProtoWriteBuffer buffer) const { - buffer.encode_string(1, this->object_id); + buffer.encode_string(1, this->object_id_ptr_, this->object_id_len_); buffer.encode_fixed32(2, this->key); - buffer.encode_string(3, this->name); + buffer.encode_string(3, this->name_ptr_, this->name_len_); #ifdef USE_ENTITY_ICON - buffer.encode_string(5, this->icon); + buffer.encode_string(5, this->icon_ptr_, this->icon_len_); #endif buffer.encode_bool(6, this->disabled_by_default); buffer.encode_uint32(7, static_cast(this->entity_category)); - buffer.encode_string(8, this->device_class); + buffer.encode_string(8, this->device_class_ptr_, this->device_class_len_); #ifdef USE_DEVICES buffer.encode_uint32(9, this->device_id); #endif } void ListEntitiesTextSensorResponse::calculate_size(uint32_t &total_size) const { - ProtoSize::add_string_field(total_size, 1, this->object_id); + ProtoSize::add_string_field(total_size, 1, this->object_id_len_); ProtoSize::add_fixed32_field(total_size, 1, this->key); - ProtoSize::add_string_field(total_size, 1, this->name); + ProtoSize::add_string_field(total_size, 1, this->name_len_); #ifdef USE_ENTITY_ICON - ProtoSize::add_string_field(total_size, 1, this->icon); + ProtoSize::add_string_field(total_size, 1, this->icon_len_); #endif ProtoSize::add_bool_field(total_size, 1, this->disabled_by_default); ProtoSize::add_enum_field(total_size, 1, static_cast(this->entity_category)); - ProtoSize::add_string_field(total_size, 1, this->device_class); + ProtoSize::add_string_field(total_size, 1, this->device_class_len_); #ifdef USE_DEVICES ProtoSize::add_uint32_field(total_size, 1, this->device_id); #endif } void TextSensorStateResponse::encode(ProtoWriteBuffer buffer) const { buffer.encode_fixed32(1, this->key); - buffer.encode_string(2, this->state); + buffer.encode_string(2, this->state_ptr_, this->state_len_); buffer.encode_bool(3, this->missing_state); #ifdef USE_DEVICES buffer.encode_uint32(4, this->device_id); @@ -800,7 +800,7 @@ void TextSensorStateResponse::encode(ProtoWriteBuffer buffer) const { } void TextSensorStateResponse::calculate_size(uint32_t &total_size) const { ProtoSize::add_fixed32_field(total_size, 1, this->key); - ProtoSize::add_string_field(total_size, 1, this->state); + ProtoSize::add_string_field(total_size, 1, this->state_len_); ProtoSize::add_bool_field(total_size, 1, this->missing_state); #ifdef USE_DEVICES ProtoSize::add_uint32_field(total_size, 1, this->device_id); @@ -845,15 +845,15 @@ void NoiseEncryptionSetKeyResponse::calculate_size(uint32_t &total_size) const { } #endif void HomeassistantServiceMap::encode(ProtoWriteBuffer buffer) const { - buffer.encode_string(1, this->key); - buffer.encode_string(2, this->value); + buffer.encode_string(1, this->key_ptr_, this->key_len_); + buffer.encode_string(2, this->value_ptr_, this->value_len_); } void HomeassistantServiceMap::calculate_size(uint32_t &total_size) const { - ProtoSize::add_string_field(total_size, 1, this->key); - ProtoSize::add_string_field(total_size, 1, this->value); + ProtoSize::add_string_field(total_size, 1, this->key_len_); + ProtoSize::add_string_field(total_size, 1, this->value_len_); } void HomeassistantServiceResponse::encode(ProtoWriteBuffer buffer) const { - buffer.encode_string(1, this->service); + buffer.encode_string(1, this->service_ptr_, this->service_len_); for (auto &it : this->data) { buffer.encode_message(2, it, true); } @@ -866,20 +866,20 @@ void HomeassistantServiceResponse::encode(ProtoWriteBuffer buffer) const { buffer.encode_bool(5, this->is_event); } void HomeassistantServiceResponse::calculate_size(uint32_t &total_size) const { - ProtoSize::add_string_field(total_size, 1, this->service); + ProtoSize::add_string_field(total_size, 1, this->service_len_); ProtoSize::add_repeated_message(total_size, 1, this->data); ProtoSize::add_repeated_message(total_size, 1, this->data_template); ProtoSize::add_repeated_message(total_size, 1, this->variables); ProtoSize::add_bool_field(total_size, 1, this->is_event); } void SubscribeHomeAssistantStateResponse::encode(ProtoWriteBuffer buffer) const { - buffer.encode_string(1, this->entity_id); - buffer.encode_string(2, this->attribute); + buffer.encode_string(1, this->entity_id_ptr_, this->entity_id_len_); + buffer.encode_string(2, this->attribute_ptr_, this->attribute_len_); buffer.encode_bool(3, this->once); } void SubscribeHomeAssistantStateResponse::calculate_size(uint32_t &total_size) const { - ProtoSize::add_string_field(total_size, 1, this->entity_id); - ProtoSize::add_string_field(total_size, 1, this->attribute); + ProtoSize::add_string_field(total_size, 1, this->entity_id_len_); + ProtoSize::add_string_field(total_size, 1, this->attribute_len_); ProtoSize::add_bool_field(total_size, 1, this->once); } bool HomeAssistantStateResponse::decode_length(uint32_t field_id, ProtoLengthDelimited value) { @@ -914,22 +914,22 @@ void GetTimeResponse::calculate_size(uint32_t &total_size) const { } #ifdef USE_API_SERVICES void ListEntitiesServicesArgument::encode(ProtoWriteBuffer buffer) const { - buffer.encode_string(1, this->name); + buffer.encode_string(1, this->name_ptr_, this->name_len_); buffer.encode_uint32(2, static_cast(this->type)); } void ListEntitiesServicesArgument::calculate_size(uint32_t &total_size) const { - ProtoSize::add_string_field(total_size, 1, this->name); + ProtoSize::add_string_field(total_size, 1, this->name_len_); ProtoSize::add_enum_field(total_size, 1, static_cast(this->type)); } void ListEntitiesServicesResponse::encode(ProtoWriteBuffer buffer) const { - buffer.encode_string(1, this->name); + buffer.encode_string(1, this->name_ptr_, this->name_len_); buffer.encode_fixed32(2, this->key); for (auto &it : this->args) { buffer.encode_message(3, it, true); } } void ListEntitiesServicesResponse::calculate_size(uint32_t &total_size) const { - ProtoSize::add_string_field(total_size, 1, this->name); + ProtoSize::add_string_field(total_size, 1, this->name_len_); ProtoSize::add_fixed32_field(total_size, 1, this->key); ProtoSize::add_repeated_message(total_size, 1, this->args); } @@ -1005,12 +1005,12 @@ bool ExecuteServiceRequest::decode_32bit(uint32_t field_id, Proto32Bit value) { #endif #ifdef USE_CAMERA void ListEntitiesCameraResponse::encode(ProtoWriteBuffer buffer) const { - buffer.encode_string(1, this->object_id); + buffer.encode_string(1, this->object_id_ptr_, this->object_id_len_); buffer.encode_fixed32(2, this->key); - buffer.encode_string(3, this->name); + buffer.encode_string(3, this->name_ptr_, this->name_len_); buffer.encode_bool(5, this->disabled_by_default); #ifdef USE_ENTITY_ICON - buffer.encode_string(6, this->icon); + buffer.encode_string(6, this->icon_ptr_, this->icon_len_); #endif buffer.encode_uint32(7, static_cast(this->entity_category)); #ifdef USE_DEVICES @@ -1018,12 +1018,12 @@ void ListEntitiesCameraResponse::encode(ProtoWriteBuffer buffer) const { #endif } void ListEntitiesCameraResponse::calculate_size(uint32_t &total_size) const { - ProtoSize::add_string_field(total_size, 1, this->object_id); + ProtoSize::add_string_field(total_size, 1, this->object_id_len_); ProtoSize::add_fixed32_field(total_size, 1, this->key); - ProtoSize::add_string_field(total_size, 1, this->name); + ProtoSize::add_string_field(total_size, 1, this->name_len_); ProtoSize::add_bool_field(total_size, 1, this->disabled_by_default); #ifdef USE_ENTITY_ICON - ProtoSize::add_string_field(total_size, 1, this->icon); + ProtoSize::add_string_field(total_size, 1, this->icon_len_); #endif ProtoSize::add_enum_field(total_size, 1, static_cast(this->entity_category)); #ifdef USE_DEVICES @@ -1062,9 +1062,9 @@ bool CameraImageRequest::decode_varint(uint32_t field_id, ProtoVarInt value) { #endif #ifdef USE_CLIMATE void ListEntitiesClimateResponse::encode(ProtoWriteBuffer buffer) const { - buffer.encode_string(1, this->object_id); + buffer.encode_string(1, this->object_id_ptr_, this->object_id_len_); buffer.encode_fixed32(2, this->key); - buffer.encode_string(3, this->name); + buffer.encode_string(3, this->name_ptr_, this->name_len_); buffer.encode_bool(5, this->supports_current_temperature); buffer.encode_bool(6, this->supports_two_point_target_temperature); for (auto &it : this->supported_modes) { @@ -1091,7 +1091,7 @@ void ListEntitiesClimateResponse::encode(ProtoWriteBuffer buffer) const { } buffer.encode_bool(18, this->disabled_by_default); #ifdef USE_ENTITY_ICON - buffer.encode_string(19, this->icon); + buffer.encode_string(19, this->icon_ptr_, this->icon_len_); #endif buffer.encode_uint32(20, static_cast(this->entity_category)); buffer.encode_float(21, this->visual_current_temperature_step); @@ -1104,9 +1104,9 @@ void ListEntitiesClimateResponse::encode(ProtoWriteBuffer buffer) const { #endif } void ListEntitiesClimateResponse::calculate_size(uint32_t &total_size) const { - ProtoSize::add_string_field(total_size, 1, this->object_id); + ProtoSize::add_string_field(total_size, 1, this->object_id_len_); ProtoSize::add_fixed32_field(total_size, 1, this->key); - ProtoSize::add_string_field(total_size, 1, this->name); + ProtoSize::add_string_field(total_size, 1, this->name_len_); ProtoSize::add_bool_field(total_size, 1, this->supports_current_temperature); ProtoSize::add_bool_field(total_size, 1, this->supports_two_point_target_temperature); if (!this->supported_modes.empty()) { @@ -1130,7 +1130,7 @@ void ListEntitiesClimateResponse::calculate_size(uint32_t &total_size) const { } if (!this->supported_custom_fan_modes.empty()) { for (const auto &it : this->supported_custom_fan_modes) { - ProtoSize::add_string_field_repeated(total_size, 1, it); + ProtoSize::add_string_field(total_size, 1, it.length()); } } if (!this->supported_presets.empty()) { @@ -1140,12 +1140,12 @@ void ListEntitiesClimateResponse::calculate_size(uint32_t &total_size) const { } if (!this->supported_custom_presets.empty()) { for (const auto &it : this->supported_custom_presets) { - ProtoSize::add_string_field_repeated(total_size, 2, it); + ProtoSize::add_string_field(total_size, 2, it.length()); } } ProtoSize::add_bool_field(total_size, 2, this->disabled_by_default); #ifdef USE_ENTITY_ICON - ProtoSize::add_string_field(total_size, 2, this->icon); + ProtoSize::add_string_field(total_size, 2, this->icon_len_); #endif ProtoSize::add_enum_field(total_size, 2, static_cast(this->entity_category)); ProtoSize::add_float_field(total_size, 2, this->visual_current_temperature_step); @@ -1167,9 +1167,9 @@ void ClimateStateResponse::encode(ProtoWriteBuffer buffer) const { buffer.encode_uint32(8, static_cast(this->action)); buffer.encode_uint32(9, static_cast(this->fan_mode)); buffer.encode_uint32(10, static_cast(this->swing_mode)); - buffer.encode_string(11, this->custom_fan_mode); + buffer.encode_string(11, this->custom_fan_mode_ptr_, this->custom_fan_mode_len_); buffer.encode_uint32(12, static_cast(this->preset)); - buffer.encode_string(13, this->custom_preset); + buffer.encode_string(13, this->custom_preset_ptr_, this->custom_preset_len_); buffer.encode_float(14, this->current_humidity); buffer.encode_float(15, this->target_humidity); #ifdef USE_DEVICES @@ -1186,9 +1186,9 @@ void ClimateStateResponse::calculate_size(uint32_t &total_size) const { ProtoSize::add_enum_field(total_size, 1, static_cast(this->action)); ProtoSize::add_enum_field(total_size, 1, static_cast(this->fan_mode)); ProtoSize::add_enum_field(total_size, 1, static_cast(this->swing_mode)); - ProtoSize::add_string_field(total_size, 1, this->custom_fan_mode); + ProtoSize::add_string_field(total_size, 1, this->custom_fan_mode_len_); ProtoSize::add_enum_field(total_size, 1, static_cast(this->preset)); - ProtoSize::add_string_field(total_size, 1, this->custom_preset); + ProtoSize::add_string_field(total_size, 1, this->custom_preset_len_); ProtoSize::add_float_field(total_size, 1, this->current_humidity); ProtoSize::add_float_field(total_size, 1, this->target_humidity); #ifdef USE_DEVICES @@ -1287,39 +1287,39 @@ bool ClimateCommandRequest::decode_32bit(uint32_t field_id, Proto32Bit value) { #endif #ifdef USE_NUMBER void ListEntitiesNumberResponse::encode(ProtoWriteBuffer buffer) const { - buffer.encode_string(1, this->object_id); + buffer.encode_string(1, this->object_id_ptr_, this->object_id_len_); buffer.encode_fixed32(2, this->key); - buffer.encode_string(3, this->name); + buffer.encode_string(3, this->name_ptr_, this->name_len_); #ifdef USE_ENTITY_ICON - buffer.encode_string(5, this->icon); + buffer.encode_string(5, this->icon_ptr_, this->icon_len_); #endif buffer.encode_float(6, this->min_value); buffer.encode_float(7, this->max_value); buffer.encode_float(8, this->step); buffer.encode_bool(9, this->disabled_by_default); buffer.encode_uint32(10, static_cast(this->entity_category)); - buffer.encode_string(11, this->unit_of_measurement); + buffer.encode_string(11, this->unit_of_measurement_ptr_, this->unit_of_measurement_len_); buffer.encode_uint32(12, static_cast(this->mode)); - buffer.encode_string(13, this->device_class); + buffer.encode_string(13, this->device_class_ptr_, this->device_class_len_); #ifdef USE_DEVICES buffer.encode_uint32(14, this->device_id); #endif } void ListEntitiesNumberResponse::calculate_size(uint32_t &total_size) const { - ProtoSize::add_string_field(total_size, 1, this->object_id); + ProtoSize::add_string_field(total_size, 1, this->object_id_len_); ProtoSize::add_fixed32_field(total_size, 1, this->key); - ProtoSize::add_string_field(total_size, 1, this->name); + ProtoSize::add_string_field(total_size, 1, this->name_len_); #ifdef USE_ENTITY_ICON - ProtoSize::add_string_field(total_size, 1, this->icon); + ProtoSize::add_string_field(total_size, 1, this->icon_len_); #endif ProtoSize::add_float_field(total_size, 1, this->min_value); ProtoSize::add_float_field(total_size, 1, this->max_value); ProtoSize::add_float_field(total_size, 1, this->step); ProtoSize::add_bool_field(total_size, 1, this->disabled_by_default); ProtoSize::add_enum_field(total_size, 1, static_cast(this->entity_category)); - ProtoSize::add_string_field(total_size, 1, this->unit_of_measurement); + ProtoSize::add_string_field(total_size, 1, this->unit_of_measurement_len_); ProtoSize::add_enum_field(total_size, 1, static_cast(this->mode)); - ProtoSize::add_string_field(total_size, 1, this->device_class); + ProtoSize::add_string_field(total_size, 1, this->device_class_len_); #ifdef USE_DEVICES ProtoSize::add_uint32_field(total_size, 1, this->device_id); #endif @@ -1368,11 +1368,11 @@ bool NumberCommandRequest::decode_32bit(uint32_t field_id, Proto32Bit value) { #endif #ifdef USE_SELECT void ListEntitiesSelectResponse::encode(ProtoWriteBuffer buffer) const { - buffer.encode_string(1, this->object_id); + buffer.encode_string(1, this->object_id_ptr_, this->object_id_len_); buffer.encode_fixed32(2, this->key); - buffer.encode_string(3, this->name); + buffer.encode_string(3, this->name_ptr_, this->name_len_); #ifdef USE_ENTITY_ICON - buffer.encode_string(5, this->icon); + buffer.encode_string(5, this->icon_ptr_, this->icon_len_); #endif for (auto &it : this->options) { buffer.encode_string(6, it, true); @@ -1384,15 +1384,15 @@ void ListEntitiesSelectResponse::encode(ProtoWriteBuffer buffer) const { #endif } void ListEntitiesSelectResponse::calculate_size(uint32_t &total_size) const { - ProtoSize::add_string_field(total_size, 1, this->object_id); + ProtoSize::add_string_field(total_size, 1, this->object_id_len_); ProtoSize::add_fixed32_field(total_size, 1, this->key); - ProtoSize::add_string_field(total_size, 1, this->name); + ProtoSize::add_string_field(total_size, 1, this->name_len_); #ifdef USE_ENTITY_ICON - ProtoSize::add_string_field(total_size, 1, this->icon); + ProtoSize::add_string_field(total_size, 1, this->icon_len_); #endif if (!this->options.empty()) { for (const auto &it : this->options) { - ProtoSize::add_string_field_repeated(total_size, 1, it); + ProtoSize::add_string_field(total_size, 1, it.length()); } } ProtoSize::add_bool_field(total_size, 1, this->disabled_by_default); @@ -1403,7 +1403,7 @@ void ListEntitiesSelectResponse::calculate_size(uint32_t &total_size) const { } void SelectStateResponse::encode(ProtoWriteBuffer buffer) const { buffer.encode_fixed32(1, this->key); - buffer.encode_string(2, this->state); + buffer.encode_string(2, this->state_ptr_, this->state_len_); buffer.encode_bool(3, this->missing_state); #ifdef USE_DEVICES buffer.encode_uint32(4, this->device_id); @@ -1411,7 +1411,7 @@ void SelectStateResponse::encode(ProtoWriteBuffer buffer) const { } void SelectStateResponse::calculate_size(uint32_t &total_size) const { ProtoSize::add_fixed32_field(total_size, 1, this->key); - ProtoSize::add_string_field(total_size, 1, this->state); + ProtoSize::add_string_field(total_size, 1, this->state_len_); ProtoSize::add_bool_field(total_size, 1, this->missing_state); #ifdef USE_DEVICES ProtoSize::add_uint32_field(total_size, 1, this->device_id); @@ -1452,11 +1452,11 @@ bool SelectCommandRequest::decode_32bit(uint32_t field_id, Proto32Bit value) { #endif #ifdef USE_SIREN void ListEntitiesSirenResponse::encode(ProtoWriteBuffer buffer) const { - buffer.encode_string(1, this->object_id); + buffer.encode_string(1, this->object_id_ptr_, this->object_id_len_); buffer.encode_fixed32(2, this->key); - buffer.encode_string(3, this->name); + buffer.encode_string(3, this->name_ptr_, this->name_len_); #ifdef USE_ENTITY_ICON - buffer.encode_string(5, this->icon); + buffer.encode_string(5, this->icon_ptr_, this->icon_len_); #endif buffer.encode_bool(6, this->disabled_by_default); for (auto &it : this->tones) { @@ -1470,16 +1470,16 @@ void ListEntitiesSirenResponse::encode(ProtoWriteBuffer buffer) const { #endif } void ListEntitiesSirenResponse::calculate_size(uint32_t &total_size) const { - ProtoSize::add_string_field(total_size, 1, this->object_id); + ProtoSize::add_string_field(total_size, 1, this->object_id_len_); ProtoSize::add_fixed32_field(total_size, 1, this->key); - ProtoSize::add_string_field(total_size, 1, this->name); + ProtoSize::add_string_field(total_size, 1, this->name_len_); #ifdef USE_ENTITY_ICON - ProtoSize::add_string_field(total_size, 1, this->icon); + ProtoSize::add_string_field(total_size, 1, this->icon_len_); #endif ProtoSize::add_bool_field(total_size, 1, this->disabled_by_default); if (!this->tones.empty()) { for (const auto &it : this->tones) { - ProtoSize::add_string_field_repeated(total_size, 1, it); + ProtoSize::add_string_field(total_size, 1, it.length()); } } ProtoSize::add_bool_field(total_size, 1, this->supports_duration); @@ -1559,35 +1559,35 @@ bool SirenCommandRequest::decode_32bit(uint32_t field_id, Proto32Bit value) { #endif #ifdef USE_LOCK void ListEntitiesLockResponse::encode(ProtoWriteBuffer buffer) const { - buffer.encode_string(1, this->object_id); + buffer.encode_string(1, this->object_id_ptr_, this->object_id_len_); buffer.encode_fixed32(2, this->key); - buffer.encode_string(3, this->name); + buffer.encode_string(3, this->name_ptr_, this->name_len_); #ifdef USE_ENTITY_ICON - buffer.encode_string(5, this->icon); + buffer.encode_string(5, this->icon_ptr_, this->icon_len_); #endif buffer.encode_bool(6, this->disabled_by_default); buffer.encode_uint32(7, static_cast(this->entity_category)); buffer.encode_bool(8, this->assumed_state); buffer.encode_bool(9, this->supports_open); buffer.encode_bool(10, this->requires_code); - buffer.encode_string(11, this->code_format); + buffer.encode_string(11, this->code_format_ptr_, this->code_format_len_); #ifdef USE_DEVICES buffer.encode_uint32(12, this->device_id); #endif } void ListEntitiesLockResponse::calculate_size(uint32_t &total_size) const { - ProtoSize::add_string_field(total_size, 1, this->object_id); + ProtoSize::add_string_field(total_size, 1, this->object_id_len_); ProtoSize::add_fixed32_field(total_size, 1, this->key); - ProtoSize::add_string_field(total_size, 1, this->name); + ProtoSize::add_string_field(total_size, 1, this->name_len_); #ifdef USE_ENTITY_ICON - ProtoSize::add_string_field(total_size, 1, this->icon); + ProtoSize::add_string_field(total_size, 1, this->icon_len_); #endif ProtoSize::add_bool_field(total_size, 1, this->disabled_by_default); ProtoSize::add_enum_field(total_size, 1, static_cast(this->entity_category)); ProtoSize::add_bool_field(total_size, 1, this->assumed_state); ProtoSize::add_bool_field(total_size, 1, this->supports_open); ProtoSize::add_bool_field(total_size, 1, this->requires_code); - ProtoSize::add_string_field(total_size, 1, this->code_format); + ProtoSize::add_string_field(total_size, 1, this->code_format_len_); #ifdef USE_DEVICES ProtoSize::add_uint32_field(total_size, 1, this->device_id); #endif @@ -1647,29 +1647,29 @@ bool LockCommandRequest::decode_32bit(uint32_t field_id, Proto32Bit value) { #endif #ifdef USE_BUTTON void ListEntitiesButtonResponse::encode(ProtoWriteBuffer buffer) const { - buffer.encode_string(1, this->object_id); + buffer.encode_string(1, this->object_id_ptr_, this->object_id_len_); buffer.encode_fixed32(2, this->key); - buffer.encode_string(3, this->name); + buffer.encode_string(3, this->name_ptr_, this->name_len_); #ifdef USE_ENTITY_ICON - buffer.encode_string(5, this->icon); + buffer.encode_string(5, this->icon_ptr_, this->icon_len_); #endif buffer.encode_bool(6, this->disabled_by_default); buffer.encode_uint32(7, static_cast(this->entity_category)); - buffer.encode_string(8, this->device_class); + buffer.encode_string(8, this->device_class_ptr_, this->device_class_len_); #ifdef USE_DEVICES buffer.encode_uint32(9, this->device_id); #endif } void ListEntitiesButtonResponse::calculate_size(uint32_t &total_size) const { - ProtoSize::add_string_field(total_size, 1, this->object_id); + ProtoSize::add_string_field(total_size, 1, this->object_id_len_); ProtoSize::add_fixed32_field(total_size, 1, this->key); - ProtoSize::add_string_field(total_size, 1, this->name); + ProtoSize::add_string_field(total_size, 1, this->name_len_); #ifdef USE_ENTITY_ICON - ProtoSize::add_string_field(total_size, 1, this->icon); + ProtoSize::add_string_field(total_size, 1, this->icon_len_); #endif ProtoSize::add_bool_field(total_size, 1, this->disabled_by_default); ProtoSize::add_enum_field(total_size, 1, static_cast(this->entity_category)); - ProtoSize::add_string_field(total_size, 1, this->device_class); + ProtoSize::add_string_field(total_size, 1, this->device_class_len_); #ifdef USE_DEVICES ProtoSize::add_uint32_field(total_size, 1, this->device_id); #endif @@ -1699,25 +1699,25 @@ bool ButtonCommandRequest::decode_32bit(uint32_t field_id, Proto32Bit value) { #endif #ifdef USE_MEDIA_PLAYER void MediaPlayerSupportedFormat::encode(ProtoWriteBuffer buffer) const { - buffer.encode_string(1, this->format); + buffer.encode_string(1, this->format_ptr_, this->format_len_); buffer.encode_uint32(2, this->sample_rate); buffer.encode_uint32(3, this->num_channels); buffer.encode_uint32(4, static_cast(this->purpose)); buffer.encode_uint32(5, this->sample_bytes); } void MediaPlayerSupportedFormat::calculate_size(uint32_t &total_size) const { - ProtoSize::add_string_field(total_size, 1, this->format); + ProtoSize::add_string_field(total_size, 1, this->format_len_); ProtoSize::add_uint32_field(total_size, 1, this->sample_rate); ProtoSize::add_uint32_field(total_size, 1, this->num_channels); ProtoSize::add_enum_field(total_size, 1, static_cast(this->purpose)); ProtoSize::add_uint32_field(total_size, 1, this->sample_bytes); } void ListEntitiesMediaPlayerResponse::encode(ProtoWriteBuffer buffer) const { - buffer.encode_string(1, this->object_id); + buffer.encode_string(1, this->object_id_ptr_, this->object_id_len_); buffer.encode_fixed32(2, this->key); - buffer.encode_string(3, this->name); + buffer.encode_string(3, this->name_ptr_, this->name_len_); #ifdef USE_ENTITY_ICON - buffer.encode_string(5, this->icon); + buffer.encode_string(5, this->icon_ptr_, this->icon_len_); #endif buffer.encode_bool(6, this->disabled_by_default); buffer.encode_uint32(7, static_cast(this->entity_category)); @@ -1730,11 +1730,11 @@ void ListEntitiesMediaPlayerResponse::encode(ProtoWriteBuffer buffer) const { #endif } void ListEntitiesMediaPlayerResponse::calculate_size(uint32_t &total_size) const { - ProtoSize::add_string_field(total_size, 1, this->object_id); + ProtoSize::add_string_field(total_size, 1, this->object_id_len_); ProtoSize::add_fixed32_field(total_size, 1, this->key); - ProtoSize::add_string_field(total_size, 1, this->name); + ProtoSize::add_string_field(total_size, 1, this->name_len_); #ifdef USE_ENTITY_ICON - ProtoSize::add_string_field(total_size, 1, this->icon); + ProtoSize::add_string_field(total_size, 1, this->icon_len_); #endif ProtoSize::add_bool_field(total_size, 1, this->disabled_by_default); ProtoSize::add_enum_field(total_size, 1, static_cast(this->entity_category)); @@ -2186,17 +2186,17 @@ void VoiceAssistantAudioSettings::calculate_size(uint32_t &total_size) const { } void VoiceAssistantRequest::encode(ProtoWriteBuffer buffer) const { buffer.encode_bool(1, this->start); - buffer.encode_string(2, this->conversation_id); + buffer.encode_string(2, this->conversation_id_ptr_, this->conversation_id_len_); buffer.encode_uint32(3, this->flags); buffer.encode_message(4, this->audio_settings); - buffer.encode_string(5, this->wake_word_phrase); + buffer.encode_string(5, this->wake_word_phrase_ptr_, this->wake_word_phrase_len_); } void VoiceAssistantRequest::calculate_size(uint32_t &total_size) const { ProtoSize::add_bool_field(total_size, 1, this->start); - ProtoSize::add_string_field(total_size, 1, this->conversation_id); + ProtoSize::add_string_field(total_size, 1, this->conversation_id_len_); ProtoSize::add_uint32_field(total_size, 1, this->flags); ProtoSize::add_message_object(total_size, 1, this->audio_settings); - ProtoSize::add_string_field(total_size, 1, this->wake_word_phrase); + ProtoSize::add_string_field(total_size, 1, this->wake_word_phrase_len_); } bool VoiceAssistantResponse::decode_varint(uint32_t field_id, ProtoVarInt value) { switch (field_id) { @@ -2336,18 +2336,18 @@ void VoiceAssistantAnnounceFinished::calculate_size(uint32_t &total_size) const ProtoSize::add_bool_field(total_size, 1, this->success); } void VoiceAssistantWakeWord::encode(ProtoWriteBuffer buffer) const { - buffer.encode_string(1, this->id); - buffer.encode_string(2, this->wake_word); + buffer.encode_string(1, this->id_ptr_, this->id_len_); + buffer.encode_string(2, this->wake_word_ptr_, this->wake_word_len_); for (auto &it : this->trained_languages) { buffer.encode_string(3, it, true); } } void VoiceAssistantWakeWord::calculate_size(uint32_t &total_size) const { - ProtoSize::add_string_field(total_size, 1, this->id); - ProtoSize::add_string_field(total_size, 1, this->wake_word); + ProtoSize::add_string_field(total_size, 1, this->id_len_); + ProtoSize::add_string_field(total_size, 1, this->wake_word_len_); if (!this->trained_languages.empty()) { for (const auto &it : this->trained_languages) { - ProtoSize::add_string_field_repeated(total_size, 1, it); + ProtoSize::add_string_field(total_size, 1, it.length()); } } } @@ -2364,7 +2364,7 @@ void VoiceAssistantConfigurationResponse::calculate_size(uint32_t &total_size) c ProtoSize::add_repeated_message(total_size, 1, this->available_wake_words); if (!this->active_wake_words.empty()) { for (const auto &it : this->active_wake_words) { - ProtoSize::add_string_field_repeated(total_size, 1, it); + ProtoSize::add_string_field(total_size, 1, it.length()); } } ProtoSize::add_uint32_field(total_size, 1, this->max_active_wake_words); @@ -2382,11 +2382,11 @@ bool VoiceAssistantSetConfiguration::decode_length(uint32_t field_id, ProtoLengt #endif #ifdef USE_ALARM_CONTROL_PANEL void ListEntitiesAlarmControlPanelResponse::encode(ProtoWriteBuffer buffer) const { - buffer.encode_string(1, this->object_id); + buffer.encode_string(1, this->object_id_ptr_, this->object_id_len_); buffer.encode_fixed32(2, this->key); - buffer.encode_string(3, this->name); + buffer.encode_string(3, this->name_ptr_, this->name_len_); #ifdef USE_ENTITY_ICON - buffer.encode_string(5, this->icon); + buffer.encode_string(5, this->icon_ptr_, this->icon_len_); #endif buffer.encode_bool(6, this->disabled_by_default); buffer.encode_uint32(7, static_cast(this->entity_category)); @@ -2398,11 +2398,11 @@ void ListEntitiesAlarmControlPanelResponse::encode(ProtoWriteBuffer buffer) cons #endif } void ListEntitiesAlarmControlPanelResponse::calculate_size(uint32_t &total_size) const { - ProtoSize::add_string_field(total_size, 1, this->object_id); + ProtoSize::add_string_field(total_size, 1, this->object_id_len_); ProtoSize::add_fixed32_field(total_size, 1, this->key); - ProtoSize::add_string_field(total_size, 1, this->name); + ProtoSize::add_string_field(total_size, 1, this->name_len_); #ifdef USE_ENTITY_ICON - ProtoSize::add_string_field(total_size, 1, this->icon); + ProtoSize::add_string_field(total_size, 1, this->icon_len_); #endif ProtoSize::add_bool_field(total_size, 1, this->disabled_by_default); ProtoSize::add_enum_field(total_size, 1, static_cast(this->entity_category)); @@ -2465,34 +2465,34 @@ bool AlarmControlPanelCommandRequest::decode_32bit(uint32_t field_id, Proto32Bit #endif #ifdef USE_TEXT void ListEntitiesTextResponse::encode(ProtoWriteBuffer buffer) const { - buffer.encode_string(1, this->object_id); + buffer.encode_string(1, this->object_id_ptr_, this->object_id_len_); buffer.encode_fixed32(2, this->key); - buffer.encode_string(3, this->name); + buffer.encode_string(3, this->name_ptr_, this->name_len_); #ifdef USE_ENTITY_ICON - buffer.encode_string(5, this->icon); + buffer.encode_string(5, this->icon_ptr_, this->icon_len_); #endif buffer.encode_bool(6, this->disabled_by_default); buffer.encode_uint32(7, static_cast(this->entity_category)); buffer.encode_uint32(8, this->min_length); buffer.encode_uint32(9, this->max_length); - buffer.encode_string(10, this->pattern); + buffer.encode_string(10, this->pattern_ptr_, this->pattern_len_); buffer.encode_uint32(11, static_cast(this->mode)); #ifdef USE_DEVICES buffer.encode_uint32(12, this->device_id); #endif } void ListEntitiesTextResponse::calculate_size(uint32_t &total_size) const { - ProtoSize::add_string_field(total_size, 1, this->object_id); + ProtoSize::add_string_field(total_size, 1, this->object_id_len_); ProtoSize::add_fixed32_field(total_size, 1, this->key); - ProtoSize::add_string_field(total_size, 1, this->name); + ProtoSize::add_string_field(total_size, 1, this->name_len_); #ifdef USE_ENTITY_ICON - ProtoSize::add_string_field(total_size, 1, this->icon); + ProtoSize::add_string_field(total_size, 1, this->icon_len_); #endif ProtoSize::add_bool_field(total_size, 1, this->disabled_by_default); ProtoSize::add_enum_field(total_size, 1, static_cast(this->entity_category)); ProtoSize::add_uint32_field(total_size, 1, this->min_length); ProtoSize::add_uint32_field(total_size, 1, this->max_length); - ProtoSize::add_string_field(total_size, 1, this->pattern); + ProtoSize::add_string_field(total_size, 1, this->pattern_len_); ProtoSize::add_enum_field(total_size, 1, static_cast(this->mode)); #ifdef USE_DEVICES ProtoSize::add_uint32_field(total_size, 1, this->device_id); @@ -2500,7 +2500,7 @@ void ListEntitiesTextResponse::calculate_size(uint32_t &total_size) const { } void TextStateResponse::encode(ProtoWriteBuffer buffer) const { buffer.encode_fixed32(1, this->key); - buffer.encode_string(2, this->state); + buffer.encode_string(2, this->state_ptr_, this->state_len_); buffer.encode_bool(3, this->missing_state); #ifdef USE_DEVICES buffer.encode_uint32(4, this->device_id); @@ -2508,7 +2508,7 @@ void TextStateResponse::encode(ProtoWriteBuffer buffer) const { } void TextStateResponse::calculate_size(uint32_t &total_size) const { ProtoSize::add_fixed32_field(total_size, 1, this->key); - ProtoSize::add_string_field(total_size, 1, this->state); + ProtoSize::add_string_field(total_size, 1, this->state_len_); ProtoSize::add_bool_field(total_size, 1, this->missing_state); #ifdef USE_DEVICES ProtoSize::add_uint32_field(total_size, 1, this->device_id); @@ -2549,11 +2549,11 @@ bool TextCommandRequest::decode_32bit(uint32_t field_id, Proto32Bit value) { #endif #ifdef USE_DATETIME_DATE void ListEntitiesDateResponse::encode(ProtoWriteBuffer buffer) const { - buffer.encode_string(1, this->object_id); + buffer.encode_string(1, this->object_id_ptr_, this->object_id_len_); buffer.encode_fixed32(2, this->key); - buffer.encode_string(3, this->name); + buffer.encode_string(3, this->name_ptr_, this->name_len_); #ifdef USE_ENTITY_ICON - buffer.encode_string(5, this->icon); + buffer.encode_string(5, this->icon_ptr_, this->icon_len_); #endif buffer.encode_bool(6, this->disabled_by_default); buffer.encode_uint32(7, static_cast(this->entity_category)); @@ -2562,11 +2562,11 @@ void ListEntitiesDateResponse::encode(ProtoWriteBuffer buffer) const { #endif } void ListEntitiesDateResponse::calculate_size(uint32_t &total_size) const { - ProtoSize::add_string_field(total_size, 1, this->object_id); + ProtoSize::add_string_field(total_size, 1, this->object_id_len_); ProtoSize::add_fixed32_field(total_size, 1, this->key); - ProtoSize::add_string_field(total_size, 1, this->name); + ProtoSize::add_string_field(total_size, 1, this->name_len_); #ifdef USE_ENTITY_ICON - ProtoSize::add_string_field(total_size, 1, this->icon); + ProtoSize::add_string_field(total_size, 1, this->icon_len_); #endif ProtoSize::add_bool_field(total_size, 1, this->disabled_by_default); ProtoSize::add_enum_field(total_size, 1, static_cast(this->entity_category)); @@ -2628,11 +2628,11 @@ bool DateCommandRequest::decode_32bit(uint32_t field_id, Proto32Bit value) { #endif #ifdef USE_DATETIME_TIME void ListEntitiesTimeResponse::encode(ProtoWriteBuffer buffer) const { - buffer.encode_string(1, this->object_id); + buffer.encode_string(1, this->object_id_ptr_, this->object_id_len_); buffer.encode_fixed32(2, this->key); - buffer.encode_string(3, this->name); + buffer.encode_string(3, this->name_ptr_, this->name_len_); #ifdef USE_ENTITY_ICON - buffer.encode_string(5, this->icon); + buffer.encode_string(5, this->icon_ptr_, this->icon_len_); #endif buffer.encode_bool(6, this->disabled_by_default); buffer.encode_uint32(7, static_cast(this->entity_category)); @@ -2641,11 +2641,11 @@ void ListEntitiesTimeResponse::encode(ProtoWriteBuffer buffer) const { #endif } void ListEntitiesTimeResponse::calculate_size(uint32_t &total_size) const { - ProtoSize::add_string_field(total_size, 1, this->object_id); + ProtoSize::add_string_field(total_size, 1, this->object_id_len_); ProtoSize::add_fixed32_field(total_size, 1, this->key); - ProtoSize::add_string_field(total_size, 1, this->name); + ProtoSize::add_string_field(total_size, 1, this->name_len_); #ifdef USE_ENTITY_ICON - ProtoSize::add_string_field(total_size, 1, this->icon); + ProtoSize::add_string_field(total_size, 1, this->icon_len_); #endif ProtoSize::add_bool_field(total_size, 1, this->disabled_by_default); ProtoSize::add_enum_field(total_size, 1, static_cast(this->entity_category)); @@ -2707,15 +2707,15 @@ bool TimeCommandRequest::decode_32bit(uint32_t field_id, Proto32Bit value) { #endif #ifdef USE_EVENT void ListEntitiesEventResponse::encode(ProtoWriteBuffer buffer) const { - buffer.encode_string(1, this->object_id); + buffer.encode_string(1, this->object_id_ptr_, this->object_id_len_); buffer.encode_fixed32(2, this->key); - buffer.encode_string(3, this->name); + buffer.encode_string(3, this->name_ptr_, this->name_len_); #ifdef USE_ENTITY_ICON - buffer.encode_string(5, this->icon); + buffer.encode_string(5, this->icon_ptr_, this->icon_len_); #endif buffer.encode_bool(6, this->disabled_by_default); buffer.encode_uint32(7, static_cast(this->entity_category)); - buffer.encode_string(8, this->device_class); + buffer.encode_string(8, this->device_class_ptr_, this->device_class_len_); for (auto &it : this->event_types) { buffer.encode_string(9, it, true); } @@ -2724,18 +2724,18 @@ void ListEntitiesEventResponse::encode(ProtoWriteBuffer buffer) const { #endif } void ListEntitiesEventResponse::calculate_size(uint32_t &total_size) const { - ProtoSize::add_string_field(total_size, 1, this->object_id); + ProtoSize::add_string_field(total_size, 1, this->object_id_len_); ProtoSize::add_fixed32_field(total_size, 1, this->key); - ProtoSize::add_string_field(total_size, 1, this->name); + ProtoSize::add_string_field(total_size, 1, this->name_len_); #ifdef USE_ENTITY_ICON - ProtoSize::add_string_field(total_size, 1, this->icon); + ProtoSize::add_string_field(total_size, 1, this->icon_len_); #endif ProtoSize::add_bool_field(total_size, 1, this->disabled_by_default); ProtoSize::add_enum_field(total_size, 1, static_cast(this->entity_category)); - ProtoSize::add_string_field(total_size, 1, this->device_class); + ProtoSize::add_string_field(total_size, 1, this->device_class_len_); if (!this->event_types.empty()) { for (const auto &it : this->event_types) { - ProtoSize::add_string_field_repeated(total_size, 1, it); + ProtoSize::add_string_field(total_size, 1, it.length()); } } #ifdef USE_DEVICES @@ -2744,14 +2744,14 @@ void ListEntitiesEventResponse::calculate_size(uint32_t &total_size) const { } void EventResponse::encode(ProtoWriteBuffer buffer) const { buffer.encode_fixed32(1, this->key); - buffer.encode_string(2, this->event_type); + buffer.encode_string(2, this->event_type_ptr_, this->event_type_len_); #ifdef USE_DEVICES buffer.encode_uint32(3, this->device_id); #endif } void EventResponse::calculate_size(uint32_t &total_size) const { ProtoSize::add_fixed32_field(total_size, 1, this->key); - ProtoSize::add_string_field(total_size, 1, this->event_type); + ProtoSize::add_string_field(total_size, 1, this->event_type_len_); #ifdef USE_DEVICES ProtoSize::add_uint32_field(total_size, 1, this->device_id); #endif @@ -2759,15 +2759,15 @@ void EventResponse::calculate_size(uint32_t &total_size) const { #endif #ifdef USE_VALVE void ListEntitiesValveResponse::encode(ProtoWriteBuffer buffer) const { - buffer.encode_string(1, this->object_id); + buffer.encode_string(1, this->object_id_ptr_, this->object_id_len_); buffer.encode_fixed32(2, this->key); - buffer.encode_string(3, this->name); + buffer.encode_string(3, this->name_ptr_, this->name_len_); #ifdef USE_ENTITY_ICON - buffer.encode_string(5, this->icon); + buffer.encode_string(5, this->icon_ptr_, this->icon_len_); #endif buffer.encode_bool(6, this->disabled_by_default); buffer.encode_uint32(7, static_cast(this->entity_category)); - buffer.encode_string(8, this->device_class); + buffer.encode_string(8, this->device_class_ptr_, this->device_class_len_); buffer.encode_bool(9, this->assumed_state); buffer.encode_bool(10, this->supports_position); buffer.encode_bool(11, this->supports_stop); @@ -2776,15 +2776,15 @@ void ListEntitiesValveResponse::encode(ProtoWriteBuffer buffer) const { #endif } void ListEntitiesValveResponse::calculate_size(uint32_t &total_size) const { - ProtoSize::add_string_field(total_size, 1, this->object_id); + ProtoSize::add_string_field(total_size, 1, this->object_id_len_); ProtoSize::add_fixed32_field(total_size, 1, this->key); - ProtoSize::add_string_field(total_size, 1, this->name); + ProtoSize::add_string_field(total_size, 1, this->name_len_); #ifdef USE_ENTITY_ICON - ProtoSize::add_string_field(total_size, 1, this->icon); + ProtoSize::add_string_field(total_size, 1, this->icon_len_); #endif ProtoSize::add_bool_field(total_size, 1, this->disabled_by_default); ProtoSize::add_enum_field(total_size, 1, static_cast(this->entity_category)); - ProtoSize::add_string_field(total_size, 1, this->device_class); + ProtoSize::add_string_field(total_size, 1, this->device_class_len_); ProtoSize::add_bool_field(total_size, 1, this->assumed_state); ProtoSize::add_bool_field(total_size, 1, this->supports_position); ProtoSize::add_bool_field(total_size, 1, this->supports_stop); @@ -2842,11 +2842,11 @@ bool ValveCommandRequest::decode_32bit(uint32_t field_id, Proto32Bit value) { #endif #ifdef USE_DATETIME_DATETIME void ListEntitiesDateTimeResponse::encode(ProtoWriteBuffer buffer) const { - buffer.encode_string(1, this->object_id); + buffer.encode_string(1, this->object_id_ptr_, this->object_id_len_); buffer.encode_fixed32(2, this->key); - buffer.encode_string(3, this->name); + buffer.encode_string(3, this->name_ptr_, this->name_len_); #ifdef USE_ENTITY_ICON - buffer.encode_string(5, this->icon); + buffer.encode_string(5, this->icon_ptr_, this->icon_len_); #endif buffer.encode_bool(6, this->disabled_by_default); buffer.encode_uint32(7, static_cast(this->entity_category)); @@ -2855,11 +2855,11 @@ void ListEntitiesDateTimeResponse::encode(ProtoWriteBuffer buffer) const { #endif } void ListEntitiesDateTimeResponse::calculate_size(uint32_t &total_size) const { - ProtoSize::add_string_field(total_size, 1, this->object_id); + ProtoSize::add_string_field(total_size, 1, this->object_id_len_); ProtoSize::add_fixed32_field(total_size, 1, this->key); - ProtoSize::add_string_field(total_size, 1, this->name); + ProtoSize::add_string_field(total_size, 1, this->name_len_); #ifdef USE_ENTITY_ICON - ProtoSize::add_string_field(total_size, 1, this->icon); + ProtoSize::add_string_field(total_size, 1, this->icon_len_); #endif ProtoSize::add_bool_field(total_size, 1, this->disabled_by_default); ProtoSize::add_enum_field(total_size, 1, static_cast(this->entity_category)); @@ -2911,29 +2911,29 @@ bool DateTimeCommandRequest::decode_32bit(uint32_t field_id, Proto32Bit value) { #endif #ifdef USE_UPDATE void ListEntitiesUpdateResponse::encode(ProtoWriteBuffer buffer) const { - buffer.encode_string(1, this->object_id); + buffer.encode_string(1, this->object_id_ptr_, this->object_id_len_); buffer.encode_fixed32(2, this->key); - buffer.encode_string(3, this->name); + buffer.encode_string(3, this->name_ptr_, this->name_len_); #ifdef USE_ENTITY_ICON - buffer.encode_string(5, this->icon); + buffer.encode_string(5, this->icon_ptr_, this->icon_len_); #endif buffer.encode_bool(6, this->disabled_by_default); buffer.encode_uint32(7, static_cast(this->entity_category)); - buffer.encode_string(8, this->device_class); + buffer.encode_string(8, this->device_class_ptr_, this->device_class_len_); #ifdef USE_DEVICES buffer.encode_uint32(9, this->device_id); #endif } void ListEntitiesUpdateResponse::calculate_size(uint32_t &total_size) const { - ProtoSize::add_string_field(total_size, 1, this->object_id); + ProtoSize::add_string_field(total_size, 1, this->object_id_len_); ProtoSize::add_fixed32_field(total_size, 1, this->key); - ProtoSize::add_string_field(total_size, 1, this->name); + ProtoSize::add_string_field(total_size, 1, this->name_len_); #ifdef USE_ENTITY_ICON - ProtoSize::add_string_field(total_size, 1, this->icon); + ProtoSize::add_string_field(total_size, 1, this->icon_len_); #endif ProtoSize::add_bool_field(total_size, 1, this->disabled_by_default); ProtoSize::add_enum_field(total_size, 1, static_cast(this->entity_category)); - ProtoSize::add_string_field(total_size, 1, this->device_class); + ProtoSize::add_string_field(total_size, 1, this->device_class_len_); #ifdef USE_DEVICES ProtoSize::add_uint32_field(total_size, 1, this->device_id); #endif @@ -2944,11 +2944,11 @@ void UpdateStateResponse::encode(ProtoWriteBuffer buffer) const { buffer.encode_bool(3, this->in_progress); buffer.encode_bool(4, this->has_progress); buffer.encode_float(5, this->progress); - buffer.encode_string(6, this->current_version); - buffer.encode_string(7, this->latest_version); - buffer.encode_string(8, this->title); - buffer.encode_string(9, this->release_summary); - buffer.encode_string(10, this->release_url); + buffer.encode_string(6, this->current_version_ptr_, this->current_version_len_); + buffer.encode_string(7, this->latest_version_ptr_, this->latest_version_len_); + buffer.encode_string(8, this->title_ptr_, this->title_len_); + buffer.encode_string(9, this->release_summary_ptr_, this->release_summary_len_); + buffer.encode_string(10, this->release_url_ptr_, this->release_url_len_); #ifdef USE_DEVICES buffer.encode_uint32(11, this->device_id); #endif @@ -2959,11 +2959,11 @@ void UpdateStateResponse::calculate_size(uint32_t &total_size) const { ProtoSize::add_bool_field(total_size, 1, this->in_progress); ProtoSize::add_bool_field(total_size, 1, this->has_progress); ProtoSize::add_float_field(total_size, 1, this->progress); - ProtoSize::add_string_field(total_size, 1, this->current_version); - ProtoSize::add_string_field(total_size, 1, this->latest_version); - ProtoSize::add_string_field(total_size, 1, this->title); - ProtoSize::add_string_field(total_size, 1, this->release_summary); - ProtoSize::add_string_field(total_size, 1, this->release_url); + ProtoSize::add_string_field(total_size, 1, this->current_version_len_); + ProtoSize::add_string_field(total_size, 1, this->latest_version_len_); + ProtoSize::add_string_field(total_size, 1, this->title_len_); + ProtoSize::add_string_field(total_size, 1, this->release_summary_len_); + ProtoSize::add_string_field(total_size, 1, this->release_url_len_); #ifdef USE_DEVICES ProtoSize::add_uint32_field(total_size, 1, this->device_id); #endif diff --git a/esphome/components/api/api_pb2.h b/esphome/components/api/api_pb2.h index 7255aa7903..e41bba4afc 100644 --- a/esphome/components/api/api_pb2.h +++ b/esphome/components/api/api_pb2.h @@ -269,12 +269,27 @@ enum UpdateCommand : uint32_t { class InfoResponseProtoMessage : public ProtoMessage { public: ~InfoResponseProtoMessage() override = default; - std::string object_id{}; + const char *object_id_ptr_{nullptr}; + size_t object_id_len_{0}; + void set_object_id(const char *data, size_t len) { + this->object_id_ptr_ = data; + this->object_id_len_ = len; + } uint32_t key{0}; - std::string name{}; + const char *name_ptr_{nullptr}; + size_t name_len_{0}; + void set_name(const char *data, size_t len) { + this->name_ptr_ = data; + this->name_len_ = len; + } bool disabled_by_default{false}; #ifdef USE_ENTITY_ICON - std::string icon{}; + const char *icon_ptr_{nullptr}; + size_t icon_len_{0}; + void set_icon(const char *data, size_t len) { + this->icon_ptr_ = data; + this->icon_len_ = len; + } #endif enums::EntityCategory entity_category{}; #ifdef USE_DEVICES @@ -332,8 +347,18 @@ class HelloResponse : public ProtoMessage { #endif uint32_t api_version_major{0}; uint32_t api_version_minor{0}; - std::string server_info{}; - std::string name{}; + const char *server_info_ptr_{nullptr}; + size_t server_info_len_{0}; + void set_server_info(const char *data, size_t len) { + this->server_info_ptr_ = data; + this->server_info_len_ = len; + } + const char *name_ptr_{nullptr}; + size_t name_len_{0}; + void set_name(const char *data, size_t len) { + this->name_ptr_ = data; + this->name_len_ = len; + } void encode(ProtoWriteBuffer buffer) const override; void calculate_size(uint32_t &total_size) const override; #ifdef HAS_PROTO_MESSAGE_DUMP @@ -442,7 +467,12 @@ class DeviceInfoRequest : public ProtoDecodableMessage { class AreaInfo : public ProtoMessage { public: uint32_t area_id{0}; - std::string name{}; + const char *name_ptr_{nullptr}; + size_t name_len_{0}; + void set_name(const char *data, size_t len) { + this->name_ptr_ = data; + this->name_len_ = len; + } void encode(ProtoWriteBuffer buffer) const override; void calculate_size(uint32_t &total_size) const override; #ifdef HAS_PROTO_MESSAGE_DUMP @@ -456,7 +486,12 @@ class AreaInfo : public ProtoMessage { class DeviceInfo : public ProtoMessage { public: uint32_t device_id{0}; - std::string name{}; + const char *name_ptr_{nullptr}; + size_t name_len_{0}; + void set_name(const char *data, size_t len) { + this->name_ptr_ = data; + this->name_len_ = len; + } uint32_t area_id{0}; void encode(ProtoWriteBuffer buffer) const override; void calculate_size(uint32_t &total_size) const override; @@ -477,19 +512,54 @@ class DeviceInfoResponse : public ProtoMessage { #ifdef USE_API_PASSWORD bool uses_password{false}; #endif - std::string name{}; - std::string mac_address{}; - std::string esphome_version{}; - std::string compilation_time{}; - std::string model{}; + const char *name_ptr_{nullptr}; + size_t name_len_{0}; + void set_name(const char *data, size_t len) { + this->name_ptr_ = data; + this->name_len_ = len; + } + const char *mac_address_ptr_{nullptr}; + size_t mac_address_len_{0}; + void set_mac_address(const char *data, size_t len) { + this->mac_address_ptr_ = data; + this->mac_address_len_ = len; + } + const char *esphome_version_ptr_{nullptr}; + size_t esphome_version_len_{0}; + void set_esphome_version(const char *data, size_t len) { + this->esphome_version_ptr_ = data; + this->esphome_version_len_ = len; + } + const char *compilation_time_ptr_{nullptr}; + size_t compilation_time_len_{0}; + void set_compilation_time(const char *data, size_t len) { + this->compilation_time_ptr_ = data; + this->compilation_time_len_ = len; + } + const char *model_ptr_{nullptr}; + size_t model_len_{0}; + void set_model(const char *data, size_t len) { + this->model_ptr_ = data; + this->model_len_ = len; + } #ifdef USE_DEEP_SLEEP bool has_deep_sleep{false}; #endif #ifdef ESPHOME_PROJECT_NAME - std::string project_name{}; + const char *project_name_ptr_{nullptr}; + size_t project_name_len_{0}; + void set_project_name(const char *data, size_t len) { + this->project_name_ptr_ = data; + this->project_name_len_ = len; + } #endif #ifdef ESPHOME_PROJECT_NAME - std::string project_version{}; + const char *project_version_ptr_{nullptr}; + size_t project_version_len_{0}; + void set_project_version(const char *data, size_t len) { + this->project_version_ptr_ = data; + this->project_version_len_ = len; + } #endif #ifdef USE_WEBSERVER uint32_t webserver_port{0}; @@ -497,16 +567,36 @@ class DeviceInfoResponse : public ProtoMessage { #ifdef USE_BLUETOOTH_PROXY uint32_t bluetooth_proxy_feature_flags{0}; #endif - std::string manufacturer{}; - std::string friendly_name{}; + const char *manufacturer_ptr_{nullptr}; + size_t manufacturer_len_{0}; + void set_manufacturer(const char *data, size_t len) { + this->manufacturer_ptr_ = data; + this->manufacturer_len_ = len; + } + const char *friendly_name_ptr_{nullptr}; + size_t friendly_name_len_{0}; + void set_friendly_name(const char *data, size_t len) { + this->friendly_name_ptr_ = data; + this->friendly_name_len_ = len; + } #ifdef USE_VOICE_ASSISTANT uint32_t voice_assistant_feature_flags{0}; #endif #ifdef USE_AREAS - std::string suggested_area{}; + const char *suggested_area_ptr_{nullptr}; + size_t suggested_area_len_{0}; + void set_suggested_area(const char *data, size_t len) { + this->suggested_area_ptr_ = data; + this->suggested_area_len_ = len; + } #endif #ifdef USE_BLUETOOTH_PROXY - std::string bluetooth_mac_address{}; + const char *bluetooth_mac_address_ptr_{nullptr}; + size_t bluetooth_mac_address_len_{0}; + void set_bluetooth_mac_address(const char *data, size_t len) { + this->bluetooth_mac_address_ptr_ = data; + this->bluetooth_mac_address_len_ = len; + } #endif #ifdef USE_API_NOISE bool api_encryption_supported{false}; @@ -575,7 +665,12 @@ class ListEntitiesBinarySensorResponse : public InfoResponseProtoMessage { #ifdef HAS_PROTO_MESSAGE_DUMP const char *message_name() const override { return "list_entities_binary_sensor_response"; } #endif - std::string device_class{}; + const char *device_class_ptr_{nullptr}; + size_t device_class_len_{0}; + void set_device_class(const char *data, size_t len) { + this->device_class_ptr_ = data; + this->device_class_len_ = len; + } bool is_status_binary_sensor{false}; void encode(ProtoWriteBuffer buffer) const override; void calculate_size(uint32_t &total_size) const override; @@ -614,7 +709,12 @@ class ListEntitiesCoverResponse : public InfoResponseProtoMessage { bool assumed_state{false}; bool supports_position{false}; bool supports_tilt{false}; - std::string device_class{}; + const char *device_class_ptr_{nullptr}; + size_t device_class_len_{0}; + void set_device_class(const char *data, size_t len) { + this->device_class_ptr_ = data; + this->device_class_len_ = len; + } bool supports_stop{false}; void encode(ProtoWriteBuffer buffer) const override; void calculate_size(uint32_t &total_size) const override; @@ -695,7 +795,12 @@ class FanStateResponse : public StateResponseProtoMessage { bool oscillating{false}; enums::FanDirection direction{}; int32_t speed_level{0}; - std::string preset_mode{}; + const char *preset_mode_ptr_{nullptr}; + size_t preset_mode_len_{0}; + void set_preset_mode(const char *data, size_t len) { + this->preset_mode_ptr_ = data; + this->preset_mode_len_ = len; + } void encode(ProtoWriteBuffer buffer) const override; void calculate_size(uint32_t &total_size) const override; #ifdef HAS_PROTO_MESSAGE_DUMP @@ -769,7 +874,12 @@ class LightStateResponse : public StateResponseProtoMessage { float color_temperature{0.0f}; float cold_white{0.0f}; float warm_white{0.0f}; - std::string effect{}; + const char *effect_ptr_{nullptr}; + size_t effect_len_{0}; + void set_effect(const char *data, size_t len) { + this->effect_ptr_ = data; + this->effect_len_ = len; + } void encode(ProtoWriteBuffer buffer) const override; void calculate_size(uint32_t &total_size) const override; #ifdef HAS_PROTO_MESSAGE_DUMP @@ -829,10 +939,20 @@ class ListEntitiesSensorResponse : public InfoResponseProtoMessage { #ifdef HAS_PROTO_MESSAGE_DUMP const char *message_name() const override { return "list_entities_sensor_response"; } #endif - std::string unit_of_measurement{}; + const char *unit_of_measurement_ptr_{nullptr}; + size_t unit_of_measurement_len_{0}; + void set_unit_of_measurement(const char *data, size_t len) { + this->unit_of_measurement_ptr_ = data; + this->unit_of_measurement_len_ = len; + } int32_t accuracy_decimals{0}; bool force_update{false}; - std::string device_class{}; + const char *device_class_ptr_{nullptr}; + size_t device_class_len_{0}; + void set_device_class(const char *data, size_t len) { + this->device_class_ptr_ = data; + this->device_class_len_ = len; + } enums::SensorStateClass state_class{}; void encode(ProtoWriteBuffer buffer) const override; void calculate_size(uint32_t &total_size) const override; @@ -869,7 +989,12 @@ class ListEntitiesSwitchResponse : public InfoResponseProtoMessage { const char *message_name() const override { return "list_entities_switch_response"; } #endif bool assumed_state{false}; - std::string device_class{}; + const char *device_class_ptr_{nullptr}; + size_t device_class_len_{0}; + void set_device_class(const char *data, size_t len) { + this->device_class_ptr_ = data; + this->device_class_len_ = len; + } void encode(ProtoWriteBuffer buffer) const override; void calculate_size(uint32_t &total_size) const override; #ifdef HAS_PROTO_MESSAGE_DUMP @@ -919,7 +1044,12 @@ class ListEntitiesTextSensorResponse : public InfoResponseProtoMessage { #ifdef HAS_PROTO_MESSAGE_DUMP const char *message_name() const override { return "list_entities_text_sensor_response"; } #endif - std::string device_class{}; + const char *device_class_ptr_{nullptr}; + size_t device_class_len_{0}; + void set_device_class(const char *data, size_t len) { + this->device_class_ptr_ = data; + this->device_class_len_ = len; + } void encode(ProtoWriteBuffer buffer) const override; void calculate_size(uint32_t &total_size) const override; #ifdef HAS_PROTO_MESSAGE_DUMP @@ -935,7 +1065,12 @@ class TextSensorStateResponse : public StateResponseProtoMessage { #ifdef HAS_PROTO_MESSAGE_DUMP const char *message_name() const override { return "text_sensor_state_response"; } #endif - std::string state{}; + const char *state_ptr_{nullptr}; + size_t state_len_{0}; + void set_state(const char *data, size_t len) { + this->state_ptr_ = data; + this->state_len_ = len; + } bool missing_state{false}; void encode(ProtoWriteBuffer buffer) const override; void calculate_size(uint32_t &total_size) const override; @@ -1032,8 +1167,18 @@ class SubscribeHomeassistantServicesRequest : public ProtoDecodableMessage { }; class HomeassistantServiceMap : public ProtoMessage { public: - std::string key{}; - std::string value{}; + const char *key_ptr_{nullptr}; + size_t key_len_{0}; + void set_key(const char *data, size_t len) { + this->key_ptr_ = data; + this->key_len_ = len; + } + const char *value_ptr_{nullptr}; + size_t value_len_{0}; + void set_value(const char *data, size_t len) { + this->value_ptr_ = data; + this->value_len_ = len; + } void encode(ProtoWriteBuffer buffer) const override; void calculate_size(uint32_t &total_size) const override; #ifdef HAS_PROTO_MESSAGE_DUMP @@ -1049,7 +1194,12 @@ class HomeassistantServiceResponse : public ProtoMessage { #ifdef HAS_PROTO_MESSAGE_DUMP const char *message_name() const override { return "homeassistant_service_response"; } #endif - std::string service{}; + const char *service_ptr_{nullptr}; + size_t service_len_{0}; + void set_service(const char *data, size_t len) { + this->service_ptr_ = data; + this->service_len_ = len; + } std::vector data{}; std::vector data_template{}; std::vector variables{}; @@ -1082,8 +1232,18 @@ class SubscribeHomeAssistantStateResponse : public ProtoMessage { #ifdef HAS_PROTO_MESSAGE_DUMP const char *message_name() const override { return "subscribe_home_assistant_state_response"; } #endif - std::string entity_id{}; - std::string attribute{}; + const char *entity_id_ptr_{nullptr}; + size_t entity_id_len_{0}; + void set_entity_id(const char *data, size_t len) { + this->entity_id_ptr_ = data; + this->entity_id_len_ = len; + } + const char *attribute_ptr_{nullptr}; + size_t attribute_len_{0}; + void set_attribute(const char *data, size_t len) { + this->attribute_ptr_ = data; + this->attribute_len_ = len; + } bool once{false}; void encode(ProtoWriteBuffer buffer) const override; void calculate_size(uint32_t &total_size) const override; @@ -1143,7 +1303,12 @@ class GetTimeResponse : public ProtoDecodableMessage { #ifdef USE_API_SERVICES class ListEntitiesServicesArgument : public ProtoMessage { public: - std::string name{}; + const char *name_ptr_{nullptr}; + size_t name_len_{0}; + void set_name(const char *data, size_t len) { + this->name_ptr_ = data; + this->name_len_ = len; + } enums::ServiceArgType type{}; void encode(ProtoWriteBuffer buffer) const override; void calculate_size(uint32_t &total_size) const override; @@ -1160,7 +1325,12 @@ class ListEntitiesServicesResponse : public ProtoMessage { #ifdef HAS_PROTO_MESSAGE_DUMP const char *message_name() const override { return "list_entities_services_response"; } #endif - std::string name{}; + const char *name_ptr_{nullptr}; + size_t name_len_{0}; + void set_name(const char *data, size_t len) { + this->name_ptr_ = data; + this->name_len_ = len; + } uint32_t key{0}; std::vector args{}; void encode(ProtoWriteBuffer buffer) const override; @@ -1312,9 +1482,19 @@ class ClimateStateResponse : public StateResponseProtoMessage { enums::ClimateAction action{}; enums::ClimateFanMode fan_mode{}; enums::ClimateSwingMode swing_mode{}; - std::string custom_fan_mode{}; + const char *custom_fan_mode_ptr_{nullptr}; + size_t custom_fan_mode_len_{0}; + void set_custom_fan_mode(const char *data, size_t len) { + this->custom_fan_mode_ptr_ = data; + this->custom_fan_mode_len_ = len; + } enums::ClimatePreset preset{}; - std::string custom_preset{}; + const char *custom_preset_ptr_{nullptr}; + size_t custom_preset_len_{0}; + void set_custom_preset(const char *data, size_t len) { + this->custom_preset_ptr_ = data; + this->custom_preset_len_ = len; + } float current_humidity{0.0f}; float target_humidity{0.0f}; void encode(ProtoWriteBuffer buffer) const override; @@ -1373,9 +1553,19 @@ class ListEntitiesNumberResponse : public InfoResponseProtoMessage { float min_value{0.0f}; float max_value{0.0f}; float step{0.0f}; - std::string unit_of_measurement{}; + const char *unit_of_measurement_ptr_{nullptr}; + size_t unit_of_measurement_len_{0}; + void set_unit_of_measurement(const char *data, size_t len) { + this->unit_of_measurement_ptr_ = data; + this->unit_of_measurement_len_ = len; + } enums::NumberMode mode{}; - std::string device_class{}; + const char *device_class_ptr_{nullptr}; + size_t device_class_len_{0}; + void set_device_class(const char *data, size_t len) { + this->device_class_ptr_ = data; + this->device_class_len_ = len; + } void encode(ProtoWriteBuffer buffer) const override; void calculate_size(uint32_t &total_size) const override; #ifdef HAS_PROTO_MESSAGE_DUMP @@ -1442,7 +1632,12 @@ class SelectStateResponse : public StateResponseProtoMessage { #ifdef HAS_PROTO_MESSAGE_DUMP const char *message_name() const override { return "select_state_response"; } #endif - std::string state{}; + const char *state_ptr_{nullptr}; + size_t state_len_{0}; + void set_state(const char *data, size_t len) { + this->state_ptr_ = data; + this->state_len_ = len; + } bool missing_state{false}; void encode(ProtoWriteBuffer buffer) const override; void calculate_size(uint32_t &total_size) const override; @@ -1541,7 +1736,12 @@ class ListEntitiesLockResponse : public InfoResponseProtoMessage { bool assumed_state{false}; bool supports_open{false}; bool requires_code{false}; - std::string code_format{}; + const char *code_format_ptr_{nullptr}; + size_t code_format_len_{0}; + void set_code_format(const char *data, size_t len) { + this->code_format_ptr_ = data; + this->code_format_len_ = len; + } void encode(ProtoWriteBuffer buffer) const override; void calculate_size(uint32_t &total_size) const override; #ifdef HAS_PROTO_MESSAGE_DUMP @@ -1594,7 +1794,12 @@ class ListEntitiesButtonResponse : public InfoResponseProtoMessage { #ifdef HAS_PROTO_MESSAGE_DUMP const char *message_name() const override { return "list_entities_button_response"; } #endif - std::string device_class{}; + const char *device_class_ptr_{nullptr}; + size_t device_class_len_{0}; + void set_device_class(const char *data, size_t len) { + this->device_class_ptr_ = data; + this->device_class_len_ = len; + } void encode(ProtoWriteBuffer buffer) const override; void calculate_size(uint32_t &total_size) const override; #ifdef HAS_PROTO_MESSAGE_DUMP @@ -1622,7 +1827,12 @@ class ButtonCommandRequest : public CommandProtoMessage { #ifdef USE_MEDIA_PLAYER class MediaPlayerSupportedFormat : public ProtoMessage { public: - std::string format{}; + const char *format_ptr_{nullptr}; + size_t format_len_{0}; + void set_format(const char *data, size_t len) { + this->format_ptr_ = data; + this->format_len_ = len; + } uint32_t sample_rate{0}; uint32_t num_channels{0}; enums::MediaPlayerFormatPurpose purpose{}; @@ -2219,10 +2429,20 @@ class VoiceAssistantRequest : public ProtoMessage { const char *message_name() const override { return "voice_assistant_request"; } #endif bool start{false}; - std::string conversation_id{}; + const char *conversation_id_ptr_{nullptr}; + size_t conversation_id_len_{0}; + void set_conversation_id(const char *data, size_t len) { + this->conversation_id_ptr_ = data; + this->conversation_id_len_ = len; + } uint32_t flags{0}; VoiceAssistantAudioSettings audio_settings{}; - std::string wake_word_phrase{}; + const char *wake_word_phrase_ptr_{nullptr}; + size_t wake_word_phrase_len_{0}; + void set_wake_word_phrase(const char *data, size_t len) { + this->wake_word_phrase_ptr_ = data; + this->wake_word_phrase_len_ = len; + } void encode(ProtoWriteBuffer buffer) const override; void calculate_size(uint32_t &total_size) const override; #ifdef HAS_PROTO_MESSAGE_DUMP @@ -2358,8 +2578,18 @@ class VoiceAssistantAnnounceFinished : public ProtoMessage { }; class VoiceAssistantWakeWord : public ProtoMessage { public: - std::string id{}; - std::string wake_word{}; + const char *id_ptr_{nullptr}; + size_t id_len_{0}; + void set_id(const char *data, size_t len) { + this->id_ptr_ = data; + this->id_len_ = len; + } + const char *wake_word_ptr_{nullptr}; + size_t wake_word_len_{0}; + void set_wake_word(const char *data, size_t len) { + this->wake_word_ptr_ = data; + this->wake_word_len_ = len; + } std::vector trained_languages{}; void encode(ProtoWriteBuffer buffer) const override; void calculate_size(uint32_t &total_size) const override; @@ -2480,7 +2710,12 @@ class ListEntitiesTextResponse : public InfoResponseProtoMessage { #endif uint32_t min_length{0}; uint32_t max_length{0}; - std::string pattern{}; + const char *pattern_ptr_{nullptr}; + size_t pattern_len_{0}; + void set_pattern(const char *data, size_t len) { + this->pattern_ptr_ = data; + this->pattern_len_ = len; + } enums::TextMode mode{}; void encode(ProtoWriteBuffer buffer) const override; void calculate_size(uint32_t &total_size) const override; @@ -2497,7 +2732,12 @@ class TextStateResponse : public StateResponseProtoMessage { #ifdef HAS_PROTO_MESSAGE_DUMP const char *message_name() const override { return "text_state_response"; } #endif - std::string state{}; + const char *state_ptr_{nullptr}; + size_t state_len_{0}; + void set_state(const char *data, size_t len) { + this->state_ptr_ = data; + this->state_len_ = len; + } bool missing_state{false}; void encode(ProtoWriteBuffer buffer) const override; void calculate_size(uint32_t &total_size) const override; @@ -2641,7 +2881,12 @@ class ListEntitiesEventResponse : public InfoResponseProtoMessage { #ifdef HAS_PROTO_MESSAGE_DUMP const char *message_name() const override { return "list_entities_event_response"; } #endif - std::string device_class{}; + const char *device_class_ptr_{nullptr}; + size_t device_class_len_{0}; + void set_device_class(const char *data, size_t len) { + this->device_class_ptr_ = data; + this->device_class_len_ = len; + } std::vector event_types{}; void encode(ProtoWriteBuffer buffer) const override; void calculate_size(uint32_t &total_size) const override; @@ -2658,7 +2903,12 @@ class EventResponse : public StateResponseProtoMessage { #ifdef HAS_PROTO_MESSAGE_DUMP const char *message_name() const override { return "event_response"; } #endif - std::string event_type{}; + const char *event_type_ptr_{nullptr}; + size_t event_type_len_{0}; + void set_event_type(const char *data, size_t len) { + this->event_type_ptr_ = data; + this->event_type_len_ = len; + } void encode(ProtoWriteBuffer buffer) const override; void calculate_size(uint32_t &total_size) const override; #ifdef HAS_PROTO_MESSAGE_DUMP @@ -2676,7 +2926,12 @@ class ListEntitiesValveResponse : public InfoResponseProtoMessage { #ifdef HAS_PROTO_MESSAGE_DUMP const char *message_name() const override { return "list_entities_valve_response"; } #endif - std::string device_class{}; + const char *device_class_ptr_{nullptr}; + size_t device_class_len_{0}; + void set_device_class(const char *data, size_t len) { + this->device_class_ptr_ = data; + this->device_class_len_ = len; + } bool assumed_state{false}; bool supports_position{false}; bool supports_stop{false}; @@ -2782,7 +3037,12 @@ class ListEntitiesUpdateResponse : public InfoResponseProtoMessage { #ifdef HAS_PROTO_MESSAGE_DUMP const char *message_name() const override { return "list_entities_update_response"; } #endif - std::string device_class{}; + const char *device_class_ptr_{nullptr}; + size_t device_class_len_{0}; + void set_device_class(const char *data, size_t len) { + this->device_class_ptr_ = data; + this->device_class_len_ = len; + } void encode(ProtoWriteBuffer buffer) const override; void calculate_size(uint32_t &total_size) const override; #ifdef HAS_PROTO_MESSAGE_DUMP @@ -2802,11 +3062,36 @@ class UpdateStateResponse : public StateResponseProtoMessage { bool in_progress{false}; bool has_progress{false}; float progress{0.0f}; - std::string current_version{}; - std::string latest_version{}; - std::string title{}; - std::string release_summary{}; - std::string release_url{}; + const char *current_version_ptr_{nullptr}; + size_t current_version_len_{0}; + void set_current_version(const char *data, size_t len) { + this->current_version_ptr_ = data; + this->current_version_len_ = len; + } + const char *latest_version_ptr_{nullptr}; + size_t latest_version_len_{0}; + void set_latest_version(const char *data, size_t len) { + this->latest_version_ptr_ = data; + this->latest_version_len_ = len; + } + const char *title_ptr_{nullptr}; + size_t title_len_{0}; + void set_title(const char *data, size_t len) { + this->title_ptr_ = data; + this->title_len_ = len; + } + const char *release_summary_ptr_{nullptr}; + size_t release_summary_len_{0}; + void set_release_summary(const char *data, size_t len) { + this->release_summary_ptr_ = data; + this->release_summary_len_ = len; + } + const char *release_url_ptr_{nullptr}; + size_t release_url_len_{0}; + void set_release_url(const char *data, size_t len) { + this->release_url_ptr_ = data; + this->release_url_len_ = len; + } void encode(ProtoWriteBuffer buffer) const override; void calculate_size(uint32_t &total_size) const override; #ifdef HAS_PROTO_MESSAGE_DUMP diff --git a/esphome/components/api/api_pb2_dump.cpp b/esphome/components/api/api_pb2_dump.cpp index 03852bd365..48121f38c7 100644 --- a/esphome/components/api/api_pb2_dump.cpp +++ b/esphome/components/api/api_pb2_dump.cpp @@ -580,11 +580,19 @@ void HelloResponse::dump_to(std::string &out) const { out.append("\n"); out.append(" server_info: "); - out.append("'").append(this->server_info).append("'"); + if (this->server_info_ptr_ != nullptr) { + out.append("'").append(this->server_info_ptr_).append("'"); + } else { + out.append("'").append("").append("'"); + } out.append("\n"); out.append(" name: "); - out.append("'").append(this->name).append("'"); + if (this->name_ptr_ != nullptr) { + out.append("'").append(this->name_ptr_).append("'"); + } else { + out.append("'").append("").append("'"); + } out.append("\n"); out.append("}"); } @@ -619,7 +627,11 @@ void AreaInfo::dump_to(std::string &out) const { out.append("\n"); out.append(" name: "); - out.append("'").append(this->name).append("'"); + if (this->name_ptr_ != nullptr) { + out.append("'").append(this->name_ptr_).append("'"); + } else { + out.append("'").append("").append("'"); + } out.append("\n"); out.append("}"); } @@ -634,7 +646,11 @@ void DeviceInfo::dump_to(std::string &out) const { out.append("\n"); out.append(" name: "); - out.append("'").append(this->name).append("'"); + if (this->name_ptr_ != nullptr) { + out.append("'").append(this->name_ptr_).append("'"); + } else { + out.append("'").append("").append("'"); + } out.append("\n"); out.append(" area_id: "); @@ -654,23 +670,43 @@ void DeviceInfoResponse::dump_to(std::string &out) const { #endif out.append(" name: "); - out.append("'").append(this->name).append("'"); + if (this->name_ptr_ != nullptr) { + out.append("'").append(this->name_ptr_).append("'"); + } else { + out.append("'").append("").append("'"); + } out.append("\n"); out.append(" mac_address: "); - out.append("'").append(this->mac_address).append("'"); + if (this->mac_address_ptr_ != nullptr) { + out.append("'").append(this->mac_address_ptr_).append("'"); + } else { + out.append("'").append("").append("'"); + } out.append("\n"); out.append(" esphome_version: "); - out.append("'").append(this->esphome_version).append("'"); + if (this->esphome_version_ptr_ != nullptr) { + out.append("'").append(this->esphome_version_ptr_).append("'"); + } else { + out.append("'").append("").append("'"); + } out.append("\n"); out.append(" compilation_time: "); - out.append("'").append(this->compilation_time).append("'"); + if (this->compilation_time_ptr_ != nullptr) { + out.append("'").append(this->compilation_time_ptr_).append("'"); + } else { + out.append("'").append("").append("'"); + } out.append("\n"); out.append(" model: "); - out.append("'").append(this->model).append("'"); + if (this->model_ptr_ != nullptr) { + out.append("'").append(this->model_ptr_).append("'"); + } else { + out.append("'").append("").append("'"); + } out.append("\n"); #ifdef USE_DEEP_SLEEP @@ -681,13 +717,21 @@ void DeviceInfoResponse::dump_to(std::string &out) const { #endif #ifdef ESPHOME_PROJECT_NAME out.append(" project_name: "); - out.append("'").append(this->project_name).append("'"); + if (this->project_name_ptr_ != nullptr) { + out.append("'").append(this->project_name_ptr_).append("'"); + } else { + out.append("'").append("").append("'"); + } out.append("\n"); #endif #ifdef ESPHOME_PROJECT_NAME out.append(" project_version: "); - out.append("'").append(this->project_version).append("'"); + if (this->project_version_ptr_ != nullptr) { + out.append("'").append(this->project_version_ptr_).append("'"); + } else { + out.append("'").append("").append("'"); + } out.append("\n"); #endif @@ -706,11 +750,19 @@ void DeviceInfoResponse::dump_to(std::string &out) const { #endif out.append(" manufacturer: "); - out.append("'").append(this->manufacturer).append("'"); + if (this->manufacturer_ptr_ != nullptr) { + out.append("'").append(this->manufacturer_ptr_).append("'"); + } else { + out.append("'").append("").append("'"); + } out.append("\n"); out.append(" friendly_name: "); - out.append("'").append(this->friendly_name).append("'"); + if (this->friendly_name_ptr_ != nullptr) { + out.append("'").append(this->friendly_name_ptr_).append("'"); + } else { + out.append("'").append("").append("'"); + } out.append("\n"); #ifdef USE_VOICE_ASSISTANT @@ -722,13 +774,21 @@ void DeviceInfoResponse::dump_to(std::string &out) const { #endif #ifdef USE_AREAS out.append(" suggested_area: "); - out.append("'").append(this->suggested_area).append("'"); + if (this->suggested_area_ptr_ != nullptr) { + out.append("'").append(this->suggested_area_ptr_).append("'"); + } else { + out.append("'").append("").append("'"); + } out.append("\n"); #endif #ifdef USE_BLUETOOTH_PROXY out.append(" bluetooth_mac_address: "); - out.append("'").append(this->bluetooth_mac_address).append("'"); + if (this->bluetooth_mac_address_ptr_ != nullptr) { + out.append("'").append(this->bluetooth_mac_address_ptr_).append("'"); + } else { + out.append("'").append("").append("'"); + } out.append("\n"); #endif @@ -770,7 +830,11 @@ void ListEntitiesBinarySensorResponse::dump_to(std::string &out) const { __attribute__((unused)) char buffer[64]; out.append("ListEntitiesBinarySensorResponse {\n"); out.append(" object_id: "); - out.append("'").append(this->object_id).append("'"); + if (this->object_id_ptr_ != nullptr) { + out.append("'").append(this->object_id_ptr_).append("'"); + } else { + out.append("'").append("").append("'"); + } out.append("\n"); out.append(" key: "); @@ -779,11 +843,19 @@ void ListEntitiesBinarySensorResponse::dump_to(std::string &out) const { out.append("\n"); out.append(" name: "); - out.append("'").append(this->name).append("'"); + if (this->name_ptr_ != nullptr) { + out.append("'").append(this->name_ptr_).append("'"); + } else { + out.append("'").append("").append("'"); + } out.append("\n"); out.append(" device_class: "); - out.append("'").append(this->device_class).append("'"); + if (this->device_class_ptr_ != nullptr) { + out.append("'").append(this->device_class_ptr_).append("'"); + } else { + out.append("'").append("").append("'"); + } out.append("\n"); out.append(" is_status_binary_sensor: "); @@ -796,7 +868,11 @@ void ListEntitiesBinarySensorResponse::dump_to(std::string &out) const { #ifdef USE_ENTITY_ICON out.append(" icon: "); - out.append("'").append(this->icon).append("'"); + if (this->icon_ptr_ != nullptr) { + out.append("'").append(this->icon_ptr_).append("'"); + } else { + out.append("'").append("").append("'"); + } out.append("\n"); #endif @@ -844,7 +920,11 @@ void ListEntitiesCoverResponse::dump_to(std::string &out) const { __attribute__((unused)) char buffer[64]; out.append("ListEntitiesCoverResponse {\n"); out.append(" object_id: "); - out.append("'").append(this->object_id).append("'"); + if (this->object_id_ptr_ != nullptr) { + out.append("'").append(this->object_id_ptr_).append("'"); + } else { + out.append("'").append("").append("'"); + } out.append("\n"); out.append(" key: "); @@ -853,7 +933,11 @@ void ListEntitiesCoverResponse::dump_to(std::string &out) const { out.append("\n"); out.append(" name: "); - out.append("'").append(this->name).append("'"); + if (this->name_ptr_ != nullptr) { + out.append("'").append(this->name_ptr_).append("'"); + } else { + out.append("'").append("").append("'"); + } out.append("\n"); out.append(" assumed_state: "); @@ -869,7 +953,11 @@ void ListEntitiesCoverResponse::dump_to(std::string &out) const { out.append("\n"); out.append(" device_class: "); - out.append("'").append(this->device_class).append("'"); + if (this->device_class_ptr_ != nullptr) { + out.append("'").append(this->device_class_ptr_).append("'"); + } else { + out.append("'").append("").append("'"); + } out.append("\n"); out.append(" disabled_by_default: "); @@ -878,7 +966,11 @@ void ListEntitiesCoverResponse::dump_to(std::string &out) const { #ifdef USE_ENTITY_ICON out.append(" icon: "); - out.append("'").append(this->icon).append("'"); + if (this->icon_ptr_ != nullptr) { + out.append("'").append(this->icon_ptr_).append("'"); + } else { + out.append("'").append("").append("'"); + } out.append("\n"); #endif @@ -975,7 +1067,11 @@ void ListEntitiesFanResponse::dump_to(std::string &out) const { __attribute__((unused)) char buffer[64]; out.append("ListEntitiesFanResponse {\n"); out.append(" object_id: "); - out.append("'").append(this->object_id).append("'"); + if (this->object_id_ptr_ != nullptr) { + out.append("'").append(this->object_id_ptr_).append("'"); + } else { + out.append("'").append("").append("'"); + } out.append("\n"); out.append(" key: "); @@ -984,7 +1080,11 @@ void ListEntitiesFanResponse::dump_to(std::string &out) const { out.append("\n"); out.append(" name: "); - out.append("'").append(this->name).append("'"); + if (this->name_ptr_ != nullptr) { + out.append("'").append(this->name_ptr_).append("'"); + } else { + out.append("'").append("").append("'"); + } out.append("\n"); out.append(" supports_oscillation: "); @@ -1010,7 +1110,11 @@ void ListEntitiesFanResponse::dump_to(std::string &out) const { #ifdef USE_ENTITY_ICON out.append(" icon: "); - out.append("'").append(this->icon).append("'"); + if (this->icon_ptr_ != nullptr) { + out.append("'").append(this->icon_ptr_).append("'"); + } else { + out.append("'").append("").append("'"); + } out.append("\n"); #endif @@ -1020,7 +1124,11 @@ void ListEntitiesFanResponse::dump_to(std::string &out) const { for (const auto &it : this->supported_preset_modes) { out.append(" supported_preset_modes: "); - out.append("'").append(it).append("'"); + if (this->supported_preset_modes_ptr_ != nullptr) { + out.append("'").append(this->supported_preset_modes_ptr_).append("'"); + } else { + out.append("'").append(this->supported_preset_modes).append("'"); + } out.append("\n"); } @@ -1059,7 +1167,11 @@ void FanStateResponse::dump_to(std::string &out) const { out.append("\n"); out.append(" preset_mode: "); - out.append("'").append(this->preset_mode).append("'"); + if (this->preset_mode_ptr_ != nullptr) { + out.append("'").append(this->preset_mode_ptr_).append("'"); + } else { + out.append("'").append("").append("'"); + } out.append("\n"); #ifdef USE_DEVICES @@ -1135,7 +1247,11 @@ void ListEntitiesLightResponse::dump_to(std::string &out) const { __attribute__((unused)) char buffer[64]; out.append("ListEntitiesLightResponse {\n"); out.append(" object_id: "); - out.append("'").append(this->object_id).append("'"); + if (this->object_id_ptr_ != nullptr) { + out.append("'").append(this->object_id_ptr_).append("'"); + } else { + out.append("'").append("").append("'"); + } out.append("\n"); out.append(" key: "); @@ -1144,7 +1260,11 @@ void ListEntitiesLightResponse::dump_to(std::string &out) const { out.append("\n"); out.append(" name: "); - out.append("'").append(this->name).append("'"); + if (this->name_ptr_ != nullptr) { + out.append("'").append(this->name_ptr_).append("'"); + } else { + out.append("'").append("").append("'"); + } out.append("\n"); for (const auto &it : this->supported_color_modes) { @@ -1165,7 +1285,11 @@ void ListEntitiesLightResponse::dump_to(std::string &out) const { for (const auto &it : this->effects) { out.append(" effects: "); - out.append("'").append(it).append("'"); + if (this->effects_ptr_ != nullptr) { + out.append("'").append(this->effects_ptr_).append("'"); + } else { + out.append("'").append(this->effects).append("'"); + } out.append("\n"); } @@ -1175,7 +1299,11 @@ void ListEntitiesLightResponse::dump_to(std::string &out) const { #ifdef USE_ENTITY_ICON out.append(" icon: "); - out.append("'").append(this->icon).append("'"); + if (this->icon_ptr_ != nullptr) { + out.append("'").append(this->icon_ptr_).append("'"); + } else { + out.append("'").append("").append("'"); + } out.append("\n"); #endif @@ -1254,7 +1382,11 @@ void LightStateResponse::dump_to(std::string &out) const { out.append("\n"); out.append(" effect: "); - out.append("'").append(this->effect).append("'"); + if (this->effect_ptr_ != nullptr) { + out.append("'").append(this->effect_ptr_).append("'"); + } else { + out.append("'").append("").append("'"); + } out.append("\n"); #ifdef USE_DEVICES @@ -1404,7 +1536,11 @@ void ListEntitiesSensorResponse::dump_to(std::string &out) const { __attribute__((unused)) char buffer[64]; out.append("ListEntitiesSensorResponse {\n"); out.append(" object_id: "); - out.append("'").append(this->object_id).append("'"); + if (this->object_id_ptr_ != nullptr) { + out.append("'").append(this->object_id_ptr_).append("'"); + } else { + out.append("'").append("").append("'"); + } out.append("\n"); out.append(" key: "); @@ -1413,17 +1549,29 @@ void ListEntitiesSensorResponse::dump_to(std::string &out) const { out.append("\n"); out.append(" name: "); - out.append("'").append(this->name).append("'"); + if (this->name_ptr_ != nullptr) { + out.append("'").append(this->name_ptr_).append("'"); + } else { + out.append("'").append("").append("'"); + } out.append("\n"); #ifdef USE_ENTITY_ICON out.append(" icon: "); - out.append("'").append(this->icon).append("'"); + if (this->icon_ptr_ != nullptr) { + out.append("'").append(this->icon_ptr_).append("'"); + } else { + out.append("'").append("").append("'"); + } out.append("\n"); #endif out.append(" unit_of_measurement: "); - out.append("'").append(this->unit_of_measurement).append("'"); + if (this->unit_of_measurement_ptr_ != nullptr) { + out.append("'").append(this->unit_of_measurement_ptr_).append("'"); + } else { + out.append("'").append("").append("'"); + } out.append("\n"); out.append(" accuracy_decimals: "); @@ -1436,7 +1584,11 @@ void ListEntitiesSensorResponse::dump_to(std::string &out) const { out.append("\n"); out.append(" device_class: "); - out.append("'").append(this->device_class).append("'"); + if (this->device_class_ptr_ != nullptr) { + out.append("'").append(this->device_class_ptr_).append("'"); + } else { + out.append("'").append("").append("'"); + } out.append("\n"); out.append(" state_class: "); @@ -1492,7 +1644,11 @@ void ListEntitiesSwitchResponse::dump_to(std::string &out) const { __attribute__((unused)) char buffer[64]; out.append("ListEntitiesSwitchResponse {\n"); out.append(" object_id: "); - out.append("'").append(this->object_id).append("'"); + if (this->object_id_ptr_ != nullptr) { + out.append("'").append(this->object_id_ptr_).append("'"); + } else { + out.append("'").append("").append("'"); + } out.append("\n"); out.append(" key: "); @@ -1501,12 +1657,20 @@ void ListEntitiesSwitchResponse::dump_to(std::string &out) const { out.append("\n"); out.append(" name: "); - out.append("'").append(this->name).append("'"); + if (this->name_ptr_ != nullptr) { + out.append("'").append(this->name_ptr_).append("'"); + } else { + out.append("'").append("").append("'"); + } out.append("\n"); #ifdef USE_ENTITY_ICON out.append(" icon: "); - out.append("'").append(this->icon).append("'"); + if (this->icon_ptr_ != nullptr) { + out.append("'").append(this->icon_ptr_).append("'"); + } else { + out.append("'").append("").append("'"); + } out.append("\n"); #endif @@ -1523,7 +1687,11 @@ void ListEntitiesSwitchResponse::dump_to(std::string &out) const { out.append("\n"); out.append(" device_class: "); - out.append("'").append(this->device_class).append("'"); + if (this->device_class_ptr_ != nullptr) { + out.append("'").append(this->device_class_ptr_).append("'"); + } else { + out.append("'").append("").append("'"); + } out.append("\n"); #ifdef USE_DEVICES @@ -1583,7 +1751,11 @@ void ListEntitiesTextSensorResponse::dump_to(std::string &out) const { __attribute__((unused)) char buffer[64]; out.append("ListEntitiesTextSensorResponse {\n"); out.append(" object_id: "); - out.append("'").append(this->object_id).append("'"); + if (this->object_id_ptr_ != nullptr) { + out.append("'").append(this->object_id_ptr_).append("'"); + } else { + out.append("'").append("").append("'"); + } out.append("\n"); out.append(" key: "); @@ -1592,12 +1764,20 @@ void ListEntitiesTextSensorResponse::dump_to(std::string &out) const { out.append("\n"); out.append(" name: "); - out.append("'").append(this->name).append("'"); + if (this->name_ptr_ != nullptr) { + out.append("'").append(this->name_ptr_).append("'"); + } else { + out.append("'").append("").append("'"); + } out.append("\n"); #ifdef USE_ENTITY_ICON out.append(" icon: "); - out.append("'").append(this->icon).append("'"); + if (this->icon_ptr_ != nullptr) { + out.append("'").append(this->icon_ptr_).append("'"); + } else { + out.append("'").append("").append("'"); + } out.append("\n"); #endif @@ -1610,7 +1790,11 @@ void ListEntitiesTextSensorResponse::dump_to(std::string &out) const { out.append("\n"); out.append(" device_class: "); - out.append("'").append(this->device_class).append("'"); + if (this->device_class_ptr_ != nullptr) { + out.append("'").append(this->device_class_ptr_).append("'"); + } else { + out.append("'").append("").append("'"); + } out.append("\n"); #ifdef USE_DEVICES @@ -1631,7 +1815,11 @@ void TextSensorStateResponse::dump_to(std::string &out) const { out.append("\n"); out.append(" state: "); - out.append("'").append(this->state).append("'"); + if (this->state_ptr_ != nullptr) { + out.append("'").append(this->state_ptr_).append("'"); + } else { + out.append("'").append("").append("'"); + } out.append("\n"); out.append(" missing_state: "); @@ -1697,11 +1885,19 @@ void HomeassistantServiceMap::dump_to(std::string &out) const { __attribute__((unused)) char buffer[64]; out.append("HomeassistantServiceMap {\n"); out.append(" key: "); - out.append("'").append(this->key).append("'"); + if (this->key_ptr_ != nullptr) { + out.append("'").append(this->key_ptr_).append("'"); + } else { + out.append("'").append("").append("'"); + } out.append("\n"); out.append(" value: "); - out.append("'").append(this->value).append("'"); + if (this->value_ptr_ != nullptr) { + out.append("'").append(this->value_ptr_).append("'"); + } else { + out.append("'").append("").append("'"); + } out.append("\n"); out.append("}"); } @@ -1709,7 +1905,11 @@ void HomeassistantServiceResponse::dump_to(std::string &out) const { __attribute__((unused)) char buffer[64]; out.append("HomeassistantServiceResponse {\n"); out.append(" service: "); - out.append("'").append(this->service).append("'"); + if (this->service_ptr_ != nullptr) { + out.append("'").append(this->service_ptr_).append("'"); + } else { + out.append("'").append("").append("'"); + } out.append("\n"); for (const auto &it : this->data) { @@ -1742,11 +1942,19 @@ void SubscribeHomeAssistantStateResponse::dump_to(std::string &out) const { __attribute__((unused)) char buffer[64]; out.append("SubscribeHomeAssistantStateResponse {\n"); out.append(" entity_id: "); - out.append("'").append(this->entity_id).append("'"); + if (this->entity_id_ptr_ != nullptr) { + out.append("'").append(this->entity_id_ptr_).append("'"); + } else { + out.append("'").append("").append("'"); + } out.append("\n"); out.append(" attribute: "); - out.append("'").append(this->attribute).append("'"); + if (this->attribute_ptr_ != nullptr) { + out.append("'").append(this->attribute_ptr_).append("'"); + } else { + out.append("'").append("").append("'"); + } out.append("\n"); out.append(" once: "); @@ -1785,7 +1993,11 @@ void ListEntitiesServicesArgument::dump_to(std::string &out) const { __attribute__((unused)) char buffer[64]; out.append("ListEntitiesServicesArgument {\n"); out.append(" name: "); - out.append("'").append(this->name).append("'"); + if (this->name_ptr_ != nullptr) { + out.append("'").append(this->name_ptr_).append("'"); + } else { + out.append("'").append("").append("'"); + } out.append("\n"); out.append(" type: "); @@ -1797,7 +2009,11 @@ void ListEntitiesServicesResponse::dump_to(std::string &out) const { __attribute__((unused)) char buffer[64]; out.append("ListEntitiesServicesResponse {\n"); out.append(" name: "); - out.append("'").append(this->name).append("'"); + if (this->name_ptr_ != nullptr) { + out.append("'").append(this->name_ptr_).append("'"); + } else { + out.append("'").append("").append("'"); + } out.append("\n"); out.append(" key: "); @@ -1860,7 +2076,11 @@ void ExecuteServiceArgument::dump_to(std::string &out) const { for (const auto &it : this->string_array) { out.append(" string_array: "); - out.append("'").append(it).append("'"); + if (this->string_array_ptr_ != nullptr) { + out.append("'").append(this->string_array_ptr_).append("'"); + } else { + out.append("'").append(this->string_array).append("'"); + } out.append("\n"); } out.append("}"); @@ -1886,7 +2106,11 @@ void ListEntitiesCameraResponse::dump_to(std::string &out) const { __attribute__((unused)) char buffer[64]; out.append("ListEntitiesCameraResponse {\n"); out.append(" object_id: "); - out.append("'").append(this->object_id).append("'"); + if (this->object_id_ptr_ != nullptr) { + out.append("'").append(this->object_id_ptr_).append("'"); + } else { + out.append("'").append("").append("'"); + } out.append("\n"); out.append(" key: "); @@ -1895,7 +2119,11 @@ void ListEntitiesCameraResponse::dump_to(std::string &out) const { out.append("\n"); out.append(" name: "); - out.append("'").append(this->name).append("'"); + if (this->name_ptr_ != nullptr) { + out.append("'").append(this->name_ptr_).append("'"); + } else { + out.append("'").append("").append("'"); + } out.append("\n"); out.append(" disabled_by_default: "); @@ -1904,7 +2132,11 @@ void ListEntitiesCameraResponse::dump_to(std::string &out) const { #ifdef USE_ENTITY_ICON out.append(" icon: "); - out.append("'").append(this->icon).append("'"); + if (this->icon_ptr_ != nullptr) { + out.append("'").append(this->icon_ptr_).append("'"); + } else { + out.append("'").append("").append("'"); + } out.append("\n"); #endif @@ -1964,7 +2196,11 @@ void ListEntitiesClimateResponse::dump_to(std::string &out) const { __attribute__((unused)) char buffer[64]; out.append("ListEntitiesClimateResponse {\n"); out.append(" object_id: "); - out.append("'").append(this->object_id).append("'"); + if (this->object_id_ptr_ != nullptr) { + out.append("'").append(this->object_id_ptr_).append("'"); + } else { + out.append("'").append("").append("'"); + } out.append("\n"); out.append(" key: "); @@ -1973,7 +2209,11 @@ void ListEntitiesClimateResponse::dump_to(std::string &out) const { out.append("\n"); out.append(" name: "); - out.append("'").append(this->name).append("'"); + if (this->name_ptr_ != nullptr) { + out.append("'").append(this->name_ptr_).append("'"); + } else { + out.append("'").append("").append("'"); + } out.append("\n"); out.append(" supports_current_temperature: "); @@ -2023,7 +2263,11 @@ void ListEntitiesClimateResponse::dump_to(std::string &out) const { for (const auto &it : this->supported_custom_fan_modes) { out.append(" supported_custom_fan_modes: "); - out.append("'").append(it).append("'"); + if (this->supported_custom_fan_modes_ptr_ != nullptr) { + out.append("'").append(this->supported_custom_fan_modes_ptr_).append("'"); + } else { + out.append("'").append(this->supported_custom_fan_modes).append("'"); + } out.append("\n"); } @@ -2035,7 +2279,11 @@ void ListEntitiesClimateResponse::dump_to(std::string &out) const { for (const auto &it : this->supported_custom_presets) { out.append(" supported_custom_presets: "); - out.append("'").append(it).append("'"); + if (this->supported_custom_presets_ptr_ != nullptr) { + out.append("'").append(this->supported_custom_presets_ptr_).append("'"); + } else { + out.append("'").append(this->supported_custom_presets).append("'"); + } out.append("\n"); } @@ -2045,7 +2293,11 @@ void ListEntitiesClimateResponse::dump_to(std::string &out) const { #ifdef USE_ENTITY_ICON out.append(" icon: "); - out.append("'").append(this->icon).append("'"); + if (this->icon_ptr_ != nullptr) { + out.append("'").append(this->icon_ptr_).append("'"); + } else { + out.append("'").append("").append("'"); + } out.append("\n"); #endif @@ -2130,7 +2382,11 @@ void ClimateStateResponse::dump_to(std::string &out) const { out.append("\n"); out.append(" custom_fan_mode: "); - out.append("'").append(this->custom_fan_mode).append("'"); + if (this->custom_fan_mode_ptr_ != nullptr) { + out.append("'").append(this->custom_fan_mode_ptr_).append("'"); + } else { + out.append("'").append("").append("'"); + } out.append("\n"); out.append(" preset: "); @@ -2138,7 +2394,11 @@ void ClimateStateResponse::dump_to(std::string &out) const { out.append("\n"); out.append(" custom_preset: "); - out.append("'").append(this->custom_preset).append("'"); + if (this->custom_preset_ptr_ != nullptr) { + out.append("'").append(this->custom_preset_ptr_).append("'"); + } else { + out.append("'").append("").append("'"); + } out.append("\n"); out.append(" current_humidity: "); @@ -2267,7 +2527,11 @@ void ListEntitiesNumberResponse::dump_to(std::string &out) const { __attribute__((unused)) char buffer[64]; out.append("ListEntitiesNumberResponse {\n"); out.append(" object_id: "); - out.append("'").append(this->object_id).append("'"); + if (this->object_id_ptr_ != nullptr) { + out.append("'").append(this->object_id_ptr_).append("'"); + } else { + out.append("'").append("").append("'"); + } out.append("\n"); out.append(" key: "); @@ -2276,12 +2540,20 @@ void ListEntitiesNumberResponse::dump_to(std::string &out) const { out.append("\n"); out.append(" name: "); - out.append("'").append(this->name).append("'"); + if (this->name_ptr_ != nullptr) { + out.append("'").append(this->name_ptr_).append("'"); + } else { + out.append("'").append("").append("'"); + } out.append("\n"); #ifdef USE_ENTITY_ICON out.append(" icon: "); - out.append("'").append(this->icon).append("'"); + if (this->icon_ptr_ != nullptr) { + out.append("'").append(this->icon_ptr_).append("'"); + } else { + out.append("'").append("").append("'"); + } out.append("\n"); #endif @@ -2309,7 +2581,11 @@ void ListEntitiesNumberResponse::dump_to(std::string &out) const { out.append("\n"); out.append(" unit_of_measurement: "); - out.append("'").append(this->unit_of_measurement).append("'"); + if (this->unit_of_measurement_ptr_ != nullptr) { + out.append("'").append(this->unit_of_measurement_ptr_).append("'"); + } else { + out.append("'").append("").append("'"); + } out.append("\n"); out.append(" mode: "); @@ -2317,7 +2593,11 @@ void ListEntitiesNumberResponse::dump_to(std::string &out) const { out.append("\n"); out.append(" device_class: "); - out.append("'").append(this->device_class).append("'"); + if (this->device_class_ptr_ != nullptr) { + out.append("'").append(this->device_class_ptr_).append("'"); + } else { + out.append("'").append("").append("'"); + } out.append("\n"); #ifdef USE_DEVICES @@ -2383,7 +2663,11 @@ void ListEntitiesSelectResponse::dump_to(std::string &out) const { __attribute__((unused)) char buffer[64]; out.append("ListEntitiesSelectResponse {\n"); out.append(" object_id: "); - out.append("'").append(this->object_id).append("'"); + if (this->object_id_ptr_ != nullptr) { + out.append("'").append(this->object_id_ptr_).append("'"); + } else { + out.append("'").append("").append("'"); + } out.append("\n"); out.append(" key: "); @@ -2392,18 +2676,30 @@ void ListEntitiesSelectResponse::dump_to(std::string &out) const { out.append("\n"); out.append(" name: "); - out.append("'").append(this->name).append("'"); + if (this->name_ptr_ != nullptr) { + out.append("'").append(this->name_ptr_).append("'"); + } else { + out.append("'").append("").append("'"); + } out.append("\n"); #ifdef USE_ENTITY_ICON out.append(" icon: "); - out.append("'").append(this->icon).append("'"); + if (this->icon_ptr_ != nullptr) { + out.append("'").append(this->icon_ptr_).append("'"); + } else { + out.append("'").append("").append("'"); + } out.append("\n"); #endif for (const auto &it : this->options) { out.append(" options: "); - out.append("'").append(it).append("'"); + if (this->options_ptr_ != nullptr) { + out.append("'").append(this->options_ptr_).append("'"); + } else { + out.append("'").append(this->options).append("'"); + } out.append("\n"); } @@ -2433,7 +2729,11 @@ void SelectStateResponse::dump_to(std::string &out) const { out.append("\n"); out.append(" state: "); - out.append("'").append(this->state).append("'"); + if (this->state_ptr_ != nullptr) { + out.append("'").append(this->state_ptr_).append("'"); + } else { + out.append("'").append("").append("'"); + } out.append("\n"); out.append(" missing_state: "); @@ -2476,7 +2776,11 @@ void ListEntitiesSirenResponse::dump_to(std::string &out) const { __attribute__((unused)) char buffer[64]; out.append("ListEntitiesSirenResponse {\n"); out.append(" object_id: "); - out.append("'").append(this->object_id).append("'"); + if (this->object_id_ptr_ != nullptr) { + out.append("'").append(this->object_id_ptr_).append("'"); + } else { + out.append("'").append("").append("'"); + } out.append("\n"); out.append(" key: "); @@ -2485,12 +2789,20 @@ void ListEntitiesSirenResponse::dump_to(std::string &out) const { out.append("\n"); out.append(" name: "); - out.append("'").append(this->name).append("'"); + if (this->name_ptr_ != nullptr) { + out.append("'").append(this->name_ptr_).append("'"); + } else { + out.append("'").append("").append("'"); + } out.append("\n"); #ifdef USE_ENTITY_ICON out.append(" icon: "); - out.append("'").append(this->icon).append("'"); + if (this->icon_ptr_ != nullptr) { + out.append("'").append(this->icon_ptr_).append("'"); + } else { + out.append("'").append("").append("'"); + } out.append("\n"); #endif @@ -2500,7 +2812,11 @@ void ListEntitiesSirenResponse::dump_to(std::string &out) const { for (const auto &it : this->tones) { out.append(" tones: "); - out.append("'").append(it).append("'"); + if (this->tones_ptr_ != nullptr) { + out.append("'").append(this->tones_ptr_).append("'"); + } else { + out.append("'").append(this->tones).append("'"); + } out.append("\n"); } @@ -2603,7 +2919,11 @@ void ListEntitiesLockResponse::dump_to(std::string &out) const { __attribute__((unused)) char buffer[64]; out.append("ListEntitiesLockResponse {\n"); out.append(" object_id: "); - out.append("'").append(this->object_id).append("'"); + if (this->object_id_ptr_ != nullptr) { + out.append("'").append(this->object_id_ptr_).append("'"); + } else { + out.append("'").append("").append("'"); + } out.append("\n"); out.append(" key: "); @@ -2612,12 +2932,20 @@ void ListEntitiesLockResponse::dump_to(std::string &out) const { out.append("\n"); out.append(" name: "); - out.append("'").append(this->name).append("'"); + if (this->name_ptr_ != nullptr) { + out.append("'").append(this->name_ptr_).append("'"); + } else { + out.append("'").append("").append("'"); + } out.append("\n"); #ifdef USE_ENTITY_ICON out.append(" icon: "); - out.append("'").append(this->icon).append("'"); + if (this->icon_ptr_ != nullptr) { + out.append("'").append(this->icon_ptr_).append("'"); + } else { + out.append("'").append("").append("'"); + } out.append("\n"); #endif @@ -2642,7 +2970,11 @@ void ListEntitiesLockResponse::dump_to(std::string &out) const { out.append("\n"); out.append(" code_format: "); - out.append("'").append(this->code_format).append("'"); + if (this->code_format_ptr_ != nullptr) { + out.append("'").append(this->code_format_ptr_).append("'"); + } else { + out.append("'").append("").append("'"); + } out.append("\n"); #ifdef USE_DEVICES @@ -2710,7 +3042,11 @@ void ListEntitiesButtonResponse::dump_to(std::string &out) const { __attribute__((unused)) char buffer[64]; out.append("ListEntitiesButtonResponse {\n"); out.append(" object_id: "); - out.append("'").append(this->object_id).append("'"); + if (this->object_id_ptr_ != nullptr) { + out.append("'").append(this->object_id_ptr_).append("'"); + } else { + out.append("'").append("").append("'"); + } out.append("\n"); out.append(" key: "); @@ -2719,12 +3055,20 @@ void ListEntitiesButtonResponse::dump_to(std::string &out) const { out.append("\n"); out.append(" name: "); - out.append("'").append(this->name).append("'"); + if (this->name_ptr_ != nullptr) { + out.append("'").append(this->name_ptr_).append("'"); + } else { + out.append("'").append("").append("'"); + } out.append("\n"); #ifdef USE_ENTITY_ICON out.append(" icon: "); - out.append("'").append(this->icon).append("'"); + if (this->icon_ptr_ != nullptr) { + out.append("'").append(this->icon_ptr_).append("'"); + } else { + out.append("'").append("").append("'"); + } out.append("\n"); #endif @@ -2737,7 +3081,11 @@ void ListEntitiesButtonResponse::dump_to(std::string &out) const { out.append("\n"); out.append(" device_class: "); - out.append("'").append(this->device_class).append("'"); + if (this->device_class_ptr_ != nullptr) { + out.append("'").append(this->device_class_ptr_).append("'"); + } else { + out.append("'").append("").append("'"); + } out.append("\n"); #ifdef USE_DEVICES @@ -2772,7 +3120,11 @@ void MediaPlayerSupportedFormat::dump_to(std::string &out) const { __attribute__((unused)) char buffer[64]; out.append("MediaPlayerSupportedFormat {\n"); out.append(" format: "); - out.append("'").append(this->format).append("'"); + if (this->format_ptr_ != nullptr) { + out.append("'").append(this->format_ptr_).append("'"); + } else { + out.append("'").append("").append("'"); + } out.append("\n"); out.append(" sample_rate: "); @@ -2799,7 +3151,11 @@ void ListEntitiesMediaPlayerResponse::dump_to(std::string &out) const { __attribute__((unused)) char buffer[64]; out.append("ListEntitiesMediaPlayerResponse {\n"); out.append(" object_id: "); - out.append("'").append(this->object_id).append("'"); + if (this->object_id_ptr_ != nullptr) { + out.append("'").append(this->object_id_ptr_).append("'"); + } else { + out.append("'").append("").append("'"); + } out.append("\n"); out.append(" key: "); @@ -2808,12 +3164,20 @@ void ListEntitiesMediaPlayerResponse::dump_to(std::string &out) const { out.append("\n"); out.append(" name: "); - out.append("'").append(this->name).append("'"); + if (this->name_ptr_ != nullptr) { + out.append("'").append(this->name_ptr_).append("'"); + } else { + out.append("'").append("").append("'"); + } out.append("\n"); #ifdef USE_ENTITY_ICON out.append(" icon: "); - out.append("'").append(this->icon).append("'"); + if (this->icon_ptr_ != nullptr) { + out.append("'").append(this->icon_ptr_).append("'"); + } else { + out.append("'").append("").append("'"); + } out.append("\n"); #endif @@ -3423,7 +3787,11 @@ void VoiceAssistantRequest::dump_to(std::string &out) const { out.append("\n"); out.append(" conversation_id: "); - out.append("'").append(this->conversation_id).append("'"); + if (this->conversation_id_ptr_ != nullptr) { + out.append("'").append(this->conversation_id_ptr_).append("'"); + } else { + out.append("'").append("").append("'"); + } out.append("\n"); out.append(" flags: "); @@ -3436,7 +3804,11 @@ void VoiceAssistantRequest::dump_to(std::string &out) const { out.append("\n"); out.append(" wake_word_phrase: "); - out.append("'").append(this->wake_word_phrase).append("'"); + if (this->wake_word_phrase_ptr_ != nullptr) { + out.append("'").append(this->wake_word_phrase_ptr_).append("'"); + } else { + out.append("'").append("").append("'"); + } out.append("\n"); out.append("}"); } @@ -3557,16 +3929,28 @@ void VoiceAssistantWakeWord::dump_to(std::string &out) const { __attribute__((unused)) char buffer[64]; out.append("VoiceAssistantWakeWord {\n"); out.append(" id: "); - out.append("'").append(this->id).append("'"); + if (this->id_ptr_ != nullptr) { + out.append("'").append(this->id_ptr_).append("'"); + } else { + out.append("'").append("").append("'"); + } out.append("\n"); out.append(" wake_word: "); - out.append("'").append(this->wake_word).append("'"); + if (this->wake_word_ptr_ != nullptr) { + out.append("'").append(this->wake_word_ptr_).append("'"); + } else { + out.append("'").append("").append("'"); + } out.append("\n"); for (const auto &it : this->trained_languages) { out.append(" trained_languages: "); - out.append("'").append(it).append("'"); + if (this->trained_languages_ptr_ != nullptr) { + out.append("'").append(this->trained_languages_ptr_).append("'"); + } else { + out.append("'").append(this->trained_languages).append("'"); + } out.append("\n"); } out.append("}"); @@ -3585,7 +3969,11 @@ void VoiceAssistantConfigurationResponse::dump_to(std::string &out) const { for (const auto &it : this->active_wake_words) { out.append(" active_wake_words: "); - out.append("'").append(it).append("'"); + if (this->active_wake_words_ptr_ != nullptr) { + out.append("'").append(this->active_wake_words_ptr_).append("'"); + } else { + out.append("'").append(this->active_wake_words).append("'"); + } out.append("\n"); } @@ -3600,7 +3988,11 @@ void VoiceAssistantSetConfiguration::dump_to(std::string &out) const { out.append("VoiceAssistantSetConfiguration {\n"); for (const auto &it : this->active_wake_words) { out.append(" active_wake_words: "); - out.append("'").append(it).append("'"); + if (this->active_wake_words_ptr_ != nullptr) { + out.append("'").append(this->active_wake_words_ptr_).append("'"); + } else { + out.append("'").append(this->active_wake_words).append("'"); + } out.append("\n"); } out.append("}"); @@ -3611,7 +4003,11 @@ void ListEntitiesAlarmControlPanelResponse::dump_to(std::string &out) const { __attribute__((unused)) char buffer[64]; out.append("ListEntitiesAlarmControlPanelResponse {\n"); out.append(" object_id: "); - out.append("'").append(this->object_id).append("'"); + if (this->object_id_ptr_ != nullptr) { + out.append("'").append(this->object_id_ptr_).append("'"); + } else { + out.append("'").append("").append("'"); + } out.append("\n"); out.append(" key: "); @@ -3620,12 +4016,20 @@ void ListEntitiesAlarmControlPanelResponse::dump_to(std::string &out) const { out.append("\n"); out.append(" name: "); - out.append("'").append(this->name).append("'"); + if (this->name_ptr_ != nullptr) { + out.append("'").append(this->name_ptr_).append("'"); + } else { + out.append("'").append("").append("'"); + } out.append("\n"); #ifdef USE_ENTITY_ICON out.append(" icon: "); - out.append("'").append(this->icon).append("'"); + if (this->icon_ptr_ != nullptr) { + out.append("'").append(this->icon_ptr_).append("'"); + } else { + out.append("'").append("").append("'"); + } out.append("\n"); #endif @@ -3711,7 +4115,11 @@ void ListEntitiesTextResponse::dump_to(std::string &out) const { __attribute__((unused)) char buffer[64]; out.append("ListEntitiesTextResponse {\n"); out.append(" object_id: "); - out.append("'").append(this->object_id).append("'"); + if (this->object_id_ptr_ != nullptr) { + out.append("'").append(this->object_id_ptr_).append("'"); + } else { + out.append("'").append("").append("'"); + } out.append("\n"); out.append(" key: "); @@ -3720,12 +4128,20 @@ void ListEntitiesTextResponse::dump_to(std::string &out) const { out.append("\n"); out.append(" name: "); - out.append("'").append(this->name).append("'"); + if (this->name_ptr_ != nullptr) { + out.append("'").append(this->name_ptr_).append("'"); + } else { + out.append("'").append("").append("'"); + } out.append("\n"); #ifdef USE_ENTITY_ICON out.append(" icon: "); - out.append("'").append(this->icon).append("'"); + if (this->icon_ptr_ != nullptr) { + out.append("'").append(this->icon_ptr_).append("'"); + } else { + out.append("'").append("").append("'"); + } out.append("\n"); #endif @@ -3748,7 +4164,11 @@ void ListEntitiesTextResponse::dump_to(std::string &out) const { out.append("\n"); out.append(" pattern: "); - out.append("'").append(this->pattern).append("'"); + if (this->pattern_ptr_ != nullptr) { + out.append("'").append(this->pattern_ptr_).append("'"); + } else { + out.append("'").append("").append("'"); + } out.append("\n"); out.append(" mode: "); @@ -3773,7 +4193,11 @@ void TextStateResponse::dump_to(std::string &out) const { out.append("\n"); out.append(" state: "); - out.append("'").append(this->state).append("'"); + if (this->state_ptr_ != nullptr) { + out.append("'").append(this->state_ptr_).append("'"); + } else { + out.append("'").append("").append("'"); + } out.append("\n"); out.append(" missing_state: "); @@ -3816,7 +4240,11 @@ void ListEntitiesDateResponse::dump_to(std::string &out) const { __attribute__((unused)) char buffer[64]; out.append("ListEntitiesDateResponse {\n"); out.append(" object_id: "); - out.append("'").append(this->object_id).append("'"); + if (this->object_id_ptr_ != nullptr) { + out.append("'").append(this->object_id_ptr_).append("'"); + } else { + out.append("'").append("").append("'"); + } out.append("\n"); out.append(" key: "); @@ -3825,12 +4253,20 @@ void ListEntitiesDateResponse::dump_to(std::string &out) const { out.append("\n"); out.append(" name: "); - out.append("'").append(this->name).append("'"); + if (this->name_ptr_ != nullptr) { + out.append("'").append(this->name_ptr_).append("'"); + } else { + out.append("'").append("").append("'"); + } out.append("\n"); #ifdef USE_ENTITY_ICON out.append(" icon: "); - out.append("'").append(this->icon).append("'"); + if (this->icon_ptr_ != nullptr) { + out.append("'").append(this->icon_ptr_).append("'"); + } else { + out.append("'").append("").append("'"); + } out.append("\n"); #endif @@ -3925,7 +4361,11 @@ void ListEntitiesTimeResponse::dump_to(std::string &out) const { __attribute__((unused)) char buffer[64]; out.append("ListEntitiesTimeResponse {\n"); out.append(" object_id: "); - out.append("'").append(this->object_id).append("'"); + if (this->object_id_ptr_ != nullptr) { + out.append("'").append(this->object_id_ptr_).append("'"); + } else { + out.append("'").append("").append("'"); + } out.append("\n"); out.append(" key: "); @@ -3934,12 +4374,20 @@ void ListEntitiesTimeResponse::dump_to(std::string &out) const { out.append("\n"); out.append(" name: "); - out.append("'").append(this->name).append("'"); + if (this->name_ptr_ != nullptr) { + out.append("'").append(this->name_ptr_).append("'"); + } else { + out.append("'").append("").append("'"); + } out.append("\n"); #ifdef USE_ENTITY_ICON out.append(" icon: "); - out.append("'").append(this->icon).append("'"); + if (this->icon_ptr_ != nullptr) { + out.append("'").append(this->icon_ptr_).append("'"); + } else { + out.append("'").append("").append("'"); + } out.append("\n"); #endif @@ -4034,7 +4482,11 @@ void ListEntitiesEventResponse::dump_to(std::string &out) const { __attribute__((unused)) char buffer[64]; out.append("ListEntitiesEventResponse {\n"); out.append(" object_id: "); - out.append("'").append(this->object_id).append("'"); + if (this->object_id_ptr_ != nullptr) { + out.append("'").append(this->object_id_ptr_).append("'"); + } else { + out.append("'").append("").append("'"); + } out.append("\n"); out.append(" key: "); @@ -4043,12 +4495,20 @@ void ListEntitiesEventResponse::dump_to(std::string &out) const { out.append("\n"); out.append(" name: "); - out.append("'").append(this->name).append("'"); + if (this->name_ptr_ != nullptr) { + out.append("'").append(this->name_ptr_).append("'"); + } else { + out.append("'").append("").append("'"); + } out.append("\n"); #ifdef USE_ENTITY_ICON out.append(" icon: "); - out.append("'").append(this->icon).append("'"); + if (this->icon_ptr_ != nullptr) { + out.append("'").append(this->icon_ptr_).append("'"); + } else { + out.append("'").append("").append("'"); + } out.append("\n"); #endif @@ -4061,12 +4521,20 @@ void ListEntitiesEventResponse::dump_to(std::string &out) const { out.append("\n"); out.append(" device_class: "); - out.append("'").append(this->device_class).append("'"); + if (this->device_class_ptr_ != nullptr) { + out.append("'").append(this->device_class_ptr_).append("'"); + } else { + out.append("'").append("").append("'"); + } out.append("\n"); for (const auto &it : this->event_types) { out.append(" event_types: "); - out.append("'").append(it).append("'"); + if (this->event_types_ptr_ != nullptr) { + out.append("'").append(this->event_types_ptr_).append("'"); + } else { + out.append("'").append(this->event_types).append("'"); + } out.append("\n"); } @@ -4088,7 +4556,11 @@ void EventResponse::dump_to(std::string &out) const { out.append("\n"); out.append(" event_type: "); - out.append("'").append(this->event_type).append("'"); + if (this->event_type_ptr_ != nullptr) { + out.append("'").append(this->event_type_ptr_).append("'"); + } else { + out.append("'").append("").append("'"); + } out.append("\n"); #ifdef USE_DEVICES @@ -4106,7 +4578,11 @@ void ListEntitiesValveResponse::dump_to(std::string &out) const { __attribute__((unused)) char buffer[64]; out.append("ListEntitiesValveResponse {\n"); out.append(" object_id: "); - out.append("'").append(this->object_id).append("'"); + if (this->object_id_ptr_ != nullptr) { + out.append("'").append(this->object_id_ptr_).append("'"); + } else { + out.append("'").append("").append("'"); + } out.append("\n"); out.append(" key: "); @@ -4115,12 +4591,20 @@ void ListEntitiesValveResponse::dump_to(std::string &out) const { out.append("\n"); out.append(" name: "); - out.append("'").append(this->name).append("'"); + if (this->name_ptr_ != nullptr) { + out.append("'").append(this->name_ptr_).append("'"); + } else { + out.append("'").append("").append("'"); + } out.append("\n"); #ifdef USE_ENTITY_ICON out.append(" icon: "); - out.append("'").append(this->icon).append("'"); + if (this->icon_ptr_ != nullptr) { + out.append("'").append(this->icon_ptr_).append("'"); + } else { + out.append("'").append("").append("'"); + } out.append("\n"); #endif @@ -4133,7 +4617,11 @@ void ListEntitiesValveResponse::dump_to(std::string &out) const { out.append("\n"); out.append(" device_class: "); - out.append("'").append(this->device_class).append("'"); + if (this->device_class_ptr_ != nullptr) { + out.append("'").append(this->device_class_ptr_).append("'"); + } else { + out.append("'").append("").append("'"); + } out.append("\n"); out.append(" assumed_state: "); @@ -4219,7 +4707,11 @@ void ListEntitiesDateTimeResponse::dump_to(std::string &out) const { __attribute__((unused)) char buffer[64]; out.append("ListEntitiesDateTimeResponse {\n"); out.append(" object_id: "); - out.append("'").append(this->object_id).append("'"); + if (this->object_id_ptr_ != nullptr) { + out.append("'").append(this->object_id_ptr_).append("'"); + } else { + out.append("'").append("").append("'"); + } out.append("\n"); out.append(" key: "); @@ -4228,12 +4720,20 @@ void ListEntitiesDateTimeResponse::dump_to(std::string &out) const { out.append("\n"); out.append(" name: "); - out.append("'").append(this->name).append("'"); + if (this->name_ptr_ != nullptr) { + out.append("'").append(this->name_ptr_).append("'"); + } else { + out.append("'").append("").append("'"); + } out.append("\n"); #ifdef USE_ENTITY_ICON out.append(" icon: "); - out.append("'").append(this->icon).append("'"); + if (this->icon_ptr_ != nullptr) { + out.append("'").append(this->icon_ptr_).append("'"); + } else { + out.append("'").append("").append("'"); + } out.append("\n"); #endif @@ -4308,7 +4808,11 @@ void ListEntitiesUpdateResponse::dump_to(std::string &out) const { __attribute__((unused)) char buffer[64]; out.append("ListEntitiesUpdateResponse {\n"); out.append(" object_id: "); - out.append("'").append(this->object_id).append("'"); + if (this->object_id_ptr_ != nullptr) { + out.append("'").append(this->object_id_ptr_).append("'"); + } else { + out.append("'").append("").append("'"); + } out.append("\n"); out.append(" key: "); @@ -4317,12 +4821,20 @@ void ListEntitiesUpdateResponse::dump_to(std::string &out) const { out.append("\n"); out.append(" name: "); - out.append("'").append(this->name).append("'"); + if (this->name_ptr_ != nullptr) { + out.append("'").append(this->name_ptr_).append("'"); + } else { + out.append("'").append("").append("'"); + } out.append("\n"); #ifdef USE_ENTITY_ICON out.append(" icon: "); - out.append("'").append(this->icon).append("'"); + if (this->icon_ptr_ != nullptr) { + out.append("'").append(this->icon_ptr_).append("'"); + } else { + out.append("'").append("").append("'"); + } out.append("\n"); #endif @@ -4335,7 +4847,11 @@ void ListEntitiesUpdateResponse::dump_to(std::string &out) const { out.append("\n"); out.append(" device_class: "); - out.append("'").append(this->device_class).append("'"); + if (this->device_class_ptr_ != nullptr) { + out.append("'").append(this->device_class_ptr_).append("'"); + } else { + out.append("'").append("").append("'"); + } out.append("\n"); #ifdef USE_DEVICES @@ -4373,23 +4889,43 @@ void UpdateStateResponse::dump_to(std::string &out) const { out.append("\n"); out.append(" current_version: "); - out.append("'").append(this->current_version).append("'"); + if (this->current_version_ptr_ != nullptr) { + out.append("'").append(this->current_version_ptr_).append("'"); + } else { + out.append("'").append("").append("'"); + } out.append("\n"); out.append(" latest_version: "); - out.append("'").append(this->latest_version).append("'"); + if (this->latest_version_ptr_ != nullptr) { + out.append("'").append(this->latest_version_ptr_).append("'"); + } else { + out.append("'").append("").append("'"); + } out.append("\n"); out.append(" title: "); - out.append("'").append(this->title).append("'"); + if (this->title_ptr_ != nullptr) { + out.append("'").append(this->title_ptr_).append("'"); + } else { + out.append("'").append("").append("'"); + } out.append("\n"); out.append(" release_summary: "); - out.append("'").append(this->release_summary).append("'"); + if (this->release_summary_ptr_ != nullptr) { + out.append("'").append(this->release_summary_ptr_).append("'"); + } else { + out.append("'").append("").append("'"); + } out.append("\n"); out.append(" release_url: "); - out.append("'").append(this->release_url).append("'"); + if (this->release_url_ptr_ != nullptr) { + out.append("'").append(this->release_url_ptr_).append("'"); + } else { + out.append("'").append("").append("'"); + } out.append("\n"); #ifdef USE_DEVICES diff --git a/esphome/components/api/custom_api_device.h b/esphome/components/api/custom_api_device.h index 35329c4a5e..18f830551b 100644 --- a/esphome/components/api/custom_api_device.h +++ b/esphome/components/api/custom_api_device.h @@ -148,7 +148,7 @@ class CustomAPIDevice { */ void call_homeassistant_service(const std::string &service_name) { HomeassistantServiceResponse resp; - resp.service = service_name; + resp.set_service(service_name.c_str(), service_name.length()); global_api_server->send_homeassistant_service_call(resp); } @@ -168,12 +168,12 @@ class CustomAPIDevice { */ void call_homeassistant_service(const std::string &service_name, const std::map &data) { HomeassistantServiceResponse resp; - resp.service = service_name; + resp.set_service(service_name.c_str(), service_name.length()); for (auto &it : data) { - HomeassistantServiceMap kv; - kv.key = it.first; - kv.value = it.second; - resp.data.push_back(kv); + resp.data.emplace_back(); + auto &kv = resp.data.back(); + kv.set_key(it.first.c_str(), it.first.length()); + kv.set_value(it.second.c_str(), it.second.length()); } global_api_server->send_homeassistant_service_call(resp); } @@ -190,7 +190,7 @@ class CustomAPIDevice { */ void fire_homeassistant_event(const std::string &event_name) { HomeassistantServiceResponse resp; - resp.service = event_name; + resp.set_service(event_name.c_str(), event_name.length()); resp.is_event = true; global_api_server->send_homeassistant_service_call(resp); } @@ -210,13 +210,13 @@ class CustomAPIDevice { */ void fire_homeassistant_event(const std::string &service_name, const std::map &data) { HomeassistantServiceResponse resp; - resp.service = service_name; + resp.set_service(service_name.c_str(), service_name.length()); resp.is_event = true; for (auto &it : data) { - HomeassistantServiceMap kv; - kv.key = it.first; - kv.value = it.second; - resp.data.push_back(kv); + resp.data.emplace_back(); + auto &kv = resp.data.back(); + kv.set_key(it.first.c_str(), it.first.length()); + kv.set_value(it.second.c_str(), it.second.length()); } global_api_server->send_homeassistant_service_call(resp); } diff --git a/esphome/components/api/homeassistant_service.h b/esphome/components/api/homeassistant_service.h index f765f1f806..ab6f5249b8 100644 --- a/esphome/components/api/homeassistant_service.h +++ b/esphome/components/api/homeassistant_service.h @@ -59,25 +59,29 @@ template class HomeAssistantServiceCallAction : public Actionservice_.value(x...); + std::string service_value = this->service_.value(x...); + resp.set_service(service_value.c_str(), service_value.length()); resp.is_event = this->is_event_; for (auto &it : this->data_) { - HomeassistantServiceMap kv; - kv.key = it.key; - kv.value = it.value.value(x...); - resp.data.push_back(kv); + resp.data.emplace_back(); + auto &kv = resp.data.back(); + kv.set_key(it.key.c_str(), it.key.length()); + std::string value = it.value.value(x...); + kv.set_value(value.c_str(), value.length()); } for (auto &it : this->data_template_) { - HomeassistantServiceMap kv; - kv.key = it.key; - kv.value = it.value.value(x...); - resp.data_template.push_back(kv); + resp.data_template.emplace_back(); + auto &kv = resp.data_template.back(); + kv.set_key(it.key.c_str(), it.key.length()); + std::string value = it.value.value(x...); + kv.set_value(value.c_str(), value.length()); } for (auto &it : this->variables_) { - HomeassistantServiceMap kv; - kv.key = it.key; - kv.value = it.value.value(x...); - resp.variables.push_back(kv); + resp.variables.emplace_back(); + auto &kv = resp.variables.back(); + kv.set_key(it.key.c_str(), it.key.length()); + std::string value = it.value.value(x...); + kv.set_value(value.c_str(), value.length()); } this->parent_->send_homeassistant_service_call(resp); } diff --git a/esphome/components/api/proto.h b/esphome/components/api/proto.h index 6ae4556cc1..ac42a514b9 100644 --- a/esphome/components/api/proto.h +++ b/esphome/components/api/proto.h @@ -683,12 +683,16 @@ class ProtoSize { } /** - * @brief Calculates and adds the size of a string/bytes field to the total message size (repeated field version) + * @brief Calculates and adds the size of a string field using length */ - static inline void add_string_field_repeated(uint32_t &total_size, uint32_t field_id_size, const std::string &str) { - // Always calculate size for repeated fields - const uint32_t str_size = static_cast(str.size()); - total_size += field_id_size + varint(str_size) + str_size; + static inline void add_string_field(uint32_t &total_size, uint32_t field_id_size, size_t len) { + // Skip calculation if string is empty + if (len == 0) { + return; // No need to update total_size + } + + // Field ID + length varint + string bytes + total_size += field_id_size + varint(static_cast(len)) + static_cast(len); } /** diff --git a/esphome/components/api/user_services.h b/esphome/components/api/user_services.h index 1420a15ff9..0ea13aa5e3 100644 --- a/esphome/components/api/user_services.h +++ b/esphome/components/api/user_services.h @@ -33,14 +33,14 @@ template class UserServiceBase : public UserServiceDescriptor { ListEntitiesServicesResponse encode_list_service_response() override { ListEntitiesServicesResponse msg; - msg.name = this->name_; + msg.set_name(this->name_.c_str(), this->name_.length()); msg.key = this->key_; std::array arg_types = {to_service_arg_type()...}; for (int i = 0; i < sizeof...(Ts); i++) { - ListEntitiesServicesArgument arg; + msg.args.emplace_back(); + auto &arg = msg.args.back(); arg.type = arg_types[i]; - arg.name = this->arg_names_[i]; - msg.args.push_back(arg); + arg.set_name(this->arg_names_[i].c_str(), this->arg_names_[i].length()); } return msg; } diff --git a/esphome/components/homeassistant/number/homeassistant_number.cpp b/esphome/components/homeassistant/number/homeassistant_number.cpp index a7f71c3244..b78cc6bcbf 100644 --- a/esphome/components/homeassistant/number/homeassistant_number.cpp +++ b/esphome/components/homeassistant/number/homeassistant_number.cpp @@ -84,17 +84,18 @@ void HomeassistantNumber::control(float value) { this->publish_state(value); api::HomeassistantServiceResponse resp; - resp.service = "number.set_value"; + resp.set_service("number.set_value", 17); - api::HomeassistantServiceMap entity_id; - entity_id.key = "entity_id"; - entity_id.value = this->entity_id_; - resp.data.push_back(entity_id); + resp.data.emplace_back(); + auto &entity_id = resp.data.back(); + entity_id.set_key("entity_id", 9); + entity_id.set_value(this->entity_id_.c_str(), this->entity_id_.length()); - api::HomeassistantServiceMap entity_value; - entity_value.key = "value"; - entity_value.value = to_string(value); - resp.data.push_back(entity_value); + resp.data.emplace_back(); + auto &entity_value = resp.data.back(); + entity_value.set_key("value", 5); + std::string value_str = to_string(value); + entity_value.set_value(value_str.c_str(), value_str.length()); api::global_api_server->send_homeassistant_service_call(resp); } diff --git a/esphome/components/homeassistant/switch/homeassistant_switch.cpp b/esphome/components/homeassistant/switch/homeassistant_switch.cpp index 0451c95069..f8ce102990 100644 --- a/esphome/components/homeassistant/switch/homeassistant_switch.cpp +++ b/esphome/components/homeassistant/switch/homeassistant_switch.cpp @@ -42,15 +42,15 @@ void HomeassistantSwitch::write_state(bool state) { api::HomeassistantServiceResponse resp; if (state) { - resp.service = "homeassistant.turn_on"; + resp.set_service("homeassistant.turn_on", 22); } else { - resp.service = "homeassistant.turn_off"; + resp.set_service("homeassistant.turn_off", 23); } - api::HomeassistantServiceMap entity_id_kv; - entity_id_kv.key = "entity_id"; - entity_id_kv.value = this->entity_id_; - resp.data.push_back(entity_id_kv); + resp.data.emplace_back(); + auto &entity_id_kv = resp.data.back(); + entity_id_kv.set_key("entity_id", 9); + entity_id_kv.set_value(this->entity_id_.c_str(), this->entity_id_.length()); api::global_api_server->send_homeassistant_service_call(resp); } diff --git a/script/api_protobuf/api_protobuf.py b/script/api_protobuf/api_protobuf.py index 2678b7009a..beb283b470 100755 --- a/script/api_protobuf/api_protobuf.py +++ b/script/api_protobuf/api_protobuf.py @@ -340,6 +340,10 @@ def create_field_type_info( if field.type == 12: return BytesType(field, needs_decode, needs_encode) + # Special handling for string fields + if field.type == 9: + return StringType(field, needs_decode, needs_encode) + validate_field_type(field.type, field.name) return TYPE_INFO[field.type](field) @@ -540,12 +544,70 @@ class StringType(TypeInfo): encode_func = "encode_string" wire_type = WireType.LENGTH_DELIMITED # Uses wire type 2 + @property + def public_content(self) -> list[str]: + content: list[str] = [] + # Add std::string storage if message needs decoding + if self._needs_decode: + content.append(f"std::string {self.field_name}{{}};") + + if self._needs_encode: + content.extend( + [ + # Add pointer/length fields if message needs encoding + f"const char* {self.field_name}_ptr_{{nullptr}};", + f"size_t {self.field_name}_len_{{0}};", + # Add setter method if message needs encoding + f"void set_{self.field_name}(const char* data, size_t len) {{", + f" this->{self.field_name}_ptr_ = data;", + f" this->{self.field_name}_len_ = len;", + "}", + ] + ) + return content + + @property + def encode_content(self) -> str: + return f"buffer.encode_string({self.number}, this->{self.field_name}_ptr_, this->{self.field_name}_len_);" + def dump(self, name): - o = f'out.append("\'").append({name}).append("\'");' - return o + # For SOURCE_CLIENT only, always use std::string + if not self._needs_encode: + return f'out.append("\'").append(this->{self.field_name}).append("\'");' + + # For SOURCE_SERVER, always use pointer/length + if not self._needs_decode: + return ( + f"if (this->{self.field_name}_ptr_ != nullptr) {{" + f' out.append("\'").append(this->{self.field_name}_ptr_).append("\'");' + f"}} else {{" + f' out.append("\'").append("").append("\'");' + f"}}" + ) + + # For SOURCE_BOTH, check if pointer is set (sending) or use string (received) + return ( + f"if (this->{self.field_name}_ptr_ != nullptr) {{" + f' out.append("\'").append(this->{self.field_name}_ptr_).append("\'");' + f"}} else {{" + f' out.append("\'").append(this->{self.field_name}).append("\'");' + f"}}" + ) def get_size_calculation(self, name: str, force: bool = False) -> str: - return self._get_simple_size_calculation(name, force, "add_string_field") + # For SOURCE_CLIENT only messages, use the string field directly + if not self._needs_encode: + return self._get_simple_size_calculation(name, force, "add_string_field") + + # Check if this is being called from a repeated field context + # In that case, 'name' will be 'it' and we need to use .length() + if name == "it": + field_id_size = self.calculate_field_id_size() + return f"ProtoSize::add_string_field(total_size, {field_id_size}, it.length());" + + # For messages that need encoding, use the length only + field_id_size = self.calculate_field_id_size() + return f"ProtoSize::add_string_field(total_size, {field_id_size}, this->{self.field_name}_len_);" def get_estimated_size(self) -> int: return self.calculate_field_id_size() + 8 # field ID + 8 bytes typical string