From b3bb059e42ba3f1e56d4a4eedc8b420c6f9dbc29 Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Thu, 10 Jul 2025 11:06:08 -1000 Subject: [PATCH] less bad --- esphome/components/api/api_pb2.cpp | 2230 ++++++++++++------------ esphome/components/api/api_pb2.h | 2272 ++++++++++++------------- esphome/components/api/proto.cpp | 2439 ++++++--------------------- esphome/components/api/proto.h | 155 +- script/api_protobuf/api_protobuf.py | 331 +++- 5 files changed, 3039 insertions(+), 4388 deletions(-) diff --git a/esphome/components/api/api_pb2.cpp b/esphome/components/api/api_pb2.cpp index 1f4acde3c7..b30b060156 100644 --- a/esphome/components/api/api_pb2.cpp +++ b/esphome/components/api/api_pb2.cpp @@ -63,1214 +63,1166 @@ namespace api { #endif // Metadata definitions for classes using metadata approach -const FieldMetaV2 HelloRequest::FIELDS_V2[3] = { - {1, PROTO_FIELD_OFFSET(HelloRequest, client_info), ProtoFieldType::TYPE_STRING, false, 1, {}}, - {2, PROTO_FIELD_OFFSET(HelloRequest, api_version_major), ProtoFieldType::TYPE_UINT32, false, 1, {}}, - {3, PROTO_FIELD_OFFSET(HelloRequest, api_version_minor), ProtoFieldType::TYPE_UINT32, false, 1, {}}}; -const FieldMetaV2 HelloResponse::FIELDS_V2[4] = { - {1, PROTO_FIELD_OFFSET(HelloResponse, api_version_major), ProtoFieldType::TYPE_UINT32, false, 1, {}}, - {2, PROTO_FIELD_OFFSET(HelloResponse, api_version_minor), ProtoFieldType::TYPE_UINT32, false, 1, {}}, - {3, PROTO_FIELD_OFFSET(HelloResponse, server_info), ProtoFieldType::TYPE_STRING, false, 1, {}}, - {4, PROTO_FIELD_OFFSET(HelloResponse, name), ProtoFieldType::TYPE_STRING, false, 1, {}}}; -const FieldMetaV2 ConnectRequest::FIELDS_V2[1] = { - {1, PROTO_FIELD_OFFSET(ConnectRequest, password), ProtoFieldType::TYPE_STRING, false, 1, {}}}; -const FieldMetaV2 ConnectResponse::FIELDS_V2[1] = { - {1, PROTO_FIELD_OFFSET(ConnectResponse, invalid_password), ProtoFieldType::TYPE_BOOL, false, 1, {}}}; -const FieldMetaV2 AreaInfo::FIELDS_V2[2] = { - {1, PROTO_FIELD_OFFSET(AreaInfo, area_id), ProtoFieldType::TYPE_UINT32, false, 1, {}}, - {2, PROTO_FIELD_OFFSET(AreaInfo, name), ProtoFieldType::TYPE_STRING, false, 1, {}}}; -const FieldMetaV2 DeviceInfo::FIELDS_V2[3] = { - {1, PROTO_FIELD_OFFSET(DeviceInfo, device_id), ProtoFieldType::TYPE_UINT32, false, 1, {}}, - {2, PROTO_FIELD_OFFSET(DeviceInfo, name), ProtoFieldType::TYPE_STRING, false, 1, {}}, - {3, PROTO_FIELD_OFFSET(DeviceInfo, area_id), ProtoFieldType::TYPE_UINT32, false, 1, {}}}; -const FieldMetaV2 DeviceInfoResponse::FIELDS_V2[20] = { - {1, PROTO_FIELD_OFFSET(DeviceInfoResponse, uses_password), ProtoFieldType::TYPE_BOOL, false, 1, {}}, - {2, PROTO_FIELD_OFFSET(DeviceInfoResponse, name), ProtoFieldType::TYPE_STRING, false, 1, {}}, - {3, PROTO_FIELD_OFFSET(DeviceInfoResponse, mac_address), ProtoFieldType::TYPE_STRING, false, 1, {}}, - {4, PROTO_FIELD_OFFSET(DeviceInfoResponse, esphome_version), ProtoFieldType::TYPE_STRING, false, 1, {}}, - {5, PROTO_FIELD_OFFSET(DeviceInfoResponse, compilation_time), ProtoFieldType::TYPE_STRING, false, 1, {}}, - {6, PROTO_FIELD_OFFSET(DeviceInfoResponse, model), ProtoFieldType::TYPE_STRING, false, 1, {}}, - {7, PROTO_FIELD_OFFSET(DeviceInfoResponse, has_deep_sleep), ProtoFieldType::TYPE_BOOL, false, 1, {}}, - {8, PROTO_FIELD_OFFSET(DeviceInfoResponse, project_name), ProtoFieldType::TYPE_STRING, false, 1, {}}, - {9, PROTO_FIELD_OFFSET(DeviceInfoResponse, project_version), ProtoFieldType::TYPE_STRING, false, 1, {}}, - {10, PROTO_FIELD_OFFSET(DeviceInfoResponse, webserver_port), ProtoFieldType::TYPE_UINT32, false, 1, {}}, - {11, - PROTO_FIELD_OFFSET(DeviceInfoResponse, legacy_bluetooth_proxy_version), - ProtoFieldType::TYPE_UINT32, - false, - 1, - {}}, - {15, - PROTO_FIELD_OFFSET(DeviceInfoResponse, bluetooth_proxy_feature_flags), - ProtoFieldType::TYPE_UINT32, - false, - 1, - {}}, - {12, PROTO_FIELD_OFFSET(DeviceInfoResponse, manufacturer), ProtoFieldType::TYPE_STRING, false, 1, {}}, - {13, PROTO_FIELD_OFFSET(DeviceInfoResponse, friendly_name), ProtoFieldType::TYPE_STRING, false, 1, {}}, - {14, - PROTO_FIELD_OFFSET(DeviceInfoResponse, legacy_voice_assistant_version), - ProtoFieldType::TYPE_UINT32, - false, - 1, - {}}, - {17, - PROTO_FIELD_OFFSET(DeviceInfoResponse, voice_assistant_feature_flags), - ProtoFieldType::TYPE_UINT32, - false, - 2, - {}}, - {16, PROTO_FIELD_OFFSET(DeviceInfoResponse, suggested_area), ProtoFieldType::TYPE_STRING, false, 2, {}}, - {18, PROTO_FIELD_OFFSET(DeviceInfoResponse, bluetooth_mac_address), ProtoFieldType::TYPE_STRING, false, 2, {}}, - {19, PROTO_FIELD_OFFSET(DeviceInfoResponse, api_encryption_supported), ProtoFieldType::TYPE_BOOL, false, 2, {}}, - {22, - PROTO_FIELD_OFFSET(DeviceInfoResponse, area), - ProtoFieldType::TYPE_MESSAGE, - false, - 2, - {.message = {&encode_message_field, &size_message_field, &decode_message_field}}}}; -const RepeatedFieldMetaV2 DeviceInfoResponse::REPEATED_FIELDS_V2[2] = { +const FieldMetaV3 HelloRequest::FIELDS_V3[3] = { + {1, 8, {.offset = PROTO_FIELD_OFFSET(HelloRequest, client_info)}}, + {2, 2, {.offset = PROTO_FIELD_OFFSET(HelloRequest, api_version_major)}}, + {3, 2, {.offset = PROTO_FIELD_OFFSET(HelloRequest, api_version_minor)}}}; +const FieldMetaV3 HelloResponse::FIELDS_V3[4] = { + {1, 2, {.offset = PROTO_FIELD_OFFSET(HelloResponse, api_version_major)}}, + {2, 2, {.offset = PROTO_FIELD_OFFSET(HelloResponse, api_version_minor)}}, + {3, 8, {.offset = PROTO_FIELD_OFFSET(HelloResponse, server_info)}}, + {4, 8, {.offset = PROTO_FIELD_OFFSET(HelloResponse, name)}}}; +const FieldMetaV3 ConnectRequest::FIELDS_V3[1] = {{1, 8, {.offset = PROTO_FIELD_OFFSET(ConnectRequest, password)}}}; +const FieldMetaV3 ConnectResponse::FIELDS_V3[1] = { + {1, 0, {.offset = PROTO_FIELD_OFFSET(ConnectResponse, invalid_password)}}}; +const FieldMetaV3 AreaInfo::FIELDS_V3[2] = {{1, 2, {.offset = PROTO_FIELD_OFFSET(AreaInfo, area_id)}}, + {2, 8, {.offset = PROTO_FIELD_OFFSET(AreaInfo, name)}}}; +const FieldMetaV3 DeviceInfo::FIELDS_V3[3] = {{1, 2, {.offset = PROTO_FIELD_OFFSET(DeviceInfo, device_id)}}, + {2, 8, {.offset = PROTO_FIELD_OFFSET(DeviceInfo, name)}}, + {3, 2, {.offset = PROTO_FIELD_OFFSET(DeviceInfo, area_id)}}}; +const FieldMetaV3 DeviceInfoResponse::FIELDS_V3[20] = { + {1, 0, {.offset = PROTO_FIELD_OFFSET(DeviceInfoResponse, uses_password)}}, + {2, 8, {.offset = PROTO_FIELD_OFFSET(DeviceInfoResponse, name)}}, + {3, 8, {.offset = PROTO_FIELD_OFFSET(DeviceInfoResponse, mac_address)}}, + {4, 8, {.offset = PROTO_FIELD_OFFSET(DeviceInfoResponse, esphome_version)}}, + {5, 8, {.offset = PROTO_FIELD_OFFSET(DeviceInfoResponse, compilation_time)}}, + {6, 8, {.offset = PROTO_FIELD_OFFSET(DeviceInfoResponse, model)}}, + {7, 0, {.offset = PROTO_FIELD_OFFSET(DeviceInfoResponse, has_deep_sleep)}}, + {8, 8, {.offset = PROTO_FIELD_OFFSET(DeviceInfoResponse, project_name)}}, + {9, 8, {.offset = PROTO_FIELD_OFFSET(DeviceInfoResponse, project_version)}}, + {10, 2, {.offset = PROTO_FIELD_OFFSET(DeviceInfoResponse, webserver_port)}}, + {11, 2, {.offset = PROTO_FIELD_OFFSET(DeviceInfoResponse, legacy_bluetooth_proxy_version)}}, + {15, 2, {.offset = PROTO_FIELD_OFFSET(DeviceInfoResponse, bluetooth_proxy_feature_flags)}}, + {12, 8, {.offset = PROTO_FIELD_OFFSET(DeviceInfoResponse, manufacturer)}}, + {13, 8, {.offset = PROTO_FIELD_OFFSET(DeviceInfoResponse, friendly_name)}}, + {14, 2, {.offset = PROTO_FIELD_OFFSET(DeviceInfoResponse, legacy_voice_assistant_version)}}, + {17, 34, {.offset = PROTO_FIELD_OFFSET(DeviceInfoResponse, voice_assistant_feature_flags)}}, + {16, 40, {.offset = PROTO_FIELD_OFFSET(DeviceInfoResponse, suggested_area)}}, + {18, 40, {.offset = PROTO_FIELD_OFFSET(DeviceInfoResponse, bluetooth_mac_address)}}, + {19, 32, {.offset = PROTO_FIELD_OFFSET(DeviceInfoResponse, api_encryption_supported)}}, + {22, 42, {.offset_low = static_cast(PROTO_FIELD_OFFSET(DeviceInfoResponse, area)), .message_type_id = 9}}}; +const RepeatedFieldMetaV3 DeviceInfoResponse::REPEATED_FIELDS_V3[2] = { {20, - PROTO_FIELD_OFFSET(DeviceInfoResponse, devices), - ProtoFieldType::TYPE_MESSAGE, - 2, - {.message = {&encode_repeated_message_field, &size_repeated_message_field, - &decode_repeated_message_field}}}, + 42, + {.offset_low = static_cast(PROTO_FIELD_OFFSET(DeviceInfoResponse, devices)), .message_type_id = 0}}, {21, - PROTO_FIELD_OFFSET(DeviceInfoResponse, areas), - ProtoFieldType::TYPE_MESSAGE, - 2, - {.message = {&encode_repeated_message_field, &size_repeated_message_field, - &decode_repeated_message_field}}}}; + 42, + {.offset_low = static_cast(PROTO_FIELD_OFFSET(DeviceInfoResponse, areas)), .message_type_id = 1}}}; #ifdef USE_BINARY_SENSOR -const FieldMetaV2 ListEntitiesBinarySensorResponse::FIELDS_V2[10] = { - {1, PROTO_FIELD_OFFSET(ListEntitiesBinarySensorResponse, object_id), ProtoFieldType::TYPE_STRING, false, 1, {}}, - {2, PROTO_FIELD_OFFSET(ListEntitiesBinarySensorResponse, key), ProtoFieldType::TYPE_FIXED32, false, 1, {}}, - {3, PROTO_FIELD_OFFSET(ListEntitiesBinarySensorResponse, name), ProtoFieldType::TYPE_STRING, false, 1, {}}, - {4, PROTO_FIELD_OFFSET(ListEntitiesBinarySensorResponse, unique_id), ProtoFieldType::TYPE_STRING, false, 1, {}}, - {5, PROTO_FIELD_OFFSET(ListEntitiesBinarySensorResponse, device_class), ProtoFieldType::TYPE_STRING, false, 1, {}}, - {6, - PROTO_FIELD_OFFSET(ListEntitiesBinarySensorResponse, is_status_binary_sensor), - ProtoFieldType::TYPE_BOOL, - false, - 1, - {}}, - {7, - PROTO_FIELD_OFFSET(ListEntitiesBinarySensorResponse, disabled_by_default), - ProtoFieldType::TYPE_BOOL, - false, - 1, - {}}, - {8, PROTO_FIELD_OFFSET(ListEntitiesBinarySensorResponse, icon), ProtoFieldType::TYPE_STRING, false, 1, {}}, - {9, PROTO_FIELD_OFFSET(ListEntitiesBinarySensorResponse, entity_category), ProtoFieldType::TYPE_ENUM, false, 1, {}}, - {10, PROTO_FIELD_OFFSET(ListEntitiesBinarySensorResponse, device_id), ProtoFieldType::TYPE_UINT32, false, 1, {}}}; -const FieldMetaV2 BinarySensorStateResponse::FIELDS_V2[4] = { - {1, PROTO_FIELD_OFFSET(BinarySensorStateResponse, key), ProtoFieldType::TYPE_FIXED32, false, 1, {}}, - {2, PROTO_FIELD_OFFSET(BinarySensorStateResponse, state), ProtoFieldType::TYPE_BOOL, false, 1, {}}, - {3, PROTO_FIELD_OFFSET(BinarySensorStateResponse, missing_state), ProtoFieldType::TYPE_BOOL, false, 1, {}}, - {4, PROTO_FIELD_OFFSET(BinarySensorStateResponse, device_id), ProtoFieldType::TYPE_UINT32, false, 1, {}}}; +const FieldMetaV3 ListEntitiesBinarySensorResponse::FIELDS_V3[10] = { + {1, 8, {.offset = PROTO_FIELD_OFFSET(ListEntitiesBinarySensorResponse, object_id)}}, + {2, 12, {.offset = PROTO_FIELD_OFFSET(ListEntitiesBinarySensorResponse, key)}}, + {3, 8, {.offset = PROTO_FIELD_OFFSET(ListEntitiesBinarySensorResponse, name)}}, + {4, 8, {.offset = PROTO_FIELD_OFFSET(ListEntitiesBinarySensorResponse, unique_id)}}, + {5, 8, {.offset = PROTO_FIELD_OFFSET(ListEntitiesBinarySensorResponse, device_class)}}, + {6, 0, {.offset = PROTO_FIELD_OFFSET(ListEntitiesBinarySensorResponse, is_status_binary_sensor)}}, + {7, 0, {.offset = PROTO_FIELD_OFFSET(ListEntitiesBinarySensorResponse, disabled_by_default)}}, + {8, 8, {.offset = PROTO_FIELD_OFFSET(ListEntitiesBinarySensorResponse, icon)}}, + {9, 7, {.offset = PROTO_FIELD_OFFSET(ListEntitiesBinarySensorResponse, entity_category)}}, + {10, 2, {.offset = PROTO_FIELD_OFFSET(ListEntitiesBinarySensorResponse, device_id)}}}; +const FieldMetaV3 BinarySensorStateResponse::FIELDS_V3[4] = { + {1, 12, {.offset = PROTO_FIELD_OFFSET(BinarySensorStateResponse, key)}}, + {2, 0, {.offset = PROTO_FIELD_OFFSET(BinarySensorStateResponse, state)}}, + {3, 0, {.offset = PROTO_FIELD_OFFSET(BinarySensorStateResponse, missing_state)}}, + {4, 2, {.offset = PROTO_FIELD_OFFSET(BinarySensorStateResponse, device_id)}}}; #endif #ifdef USE_COVER -const FieldMetaV2 ListEntitiesCoverResponse::FIELDS_V2[13] = { - {1, PROTO_FIELD_OFFSET(ListEntitiesCoverResponse, object_id), ProtoFieldType::TYPE_STRING, false, 1, {}}, - {2, PROTO_FIELD_OFFSET(ListEntitiesCoverResponse, key), ProtoFieldType::TYPE_FIXED32, false, 1, {}}, - {3, PROTO_FIELD_OFFSET(ListEntitiesCoverResponse, name), ProtoFieldType::TYPE_STRING, false, 1, {}}, - {4, PROTO_FIELD_OFFSET(ListEntitiesCoverResponse, unique_id), ProtoFieldType::TYPE_STRING, false, 1, {}}, - {5, PROTO_FIELD_OFFSET(ListEntitiesCoverResponse, assumed_state), ProtoFieldType::TYPE_BOOL, false, 1, {}}, - {6, PROTO_FIELD_OFFSET(ListEntitiesCoverResponse, supports_position), ProtoFieldType::TYPE_BOOL, false, 1, {}}, - {7, PROTO_FIELD_OFFSET(ListEntitiesCoverResponse, supports_tilt), ProtoFieldType::TYPE_BOOL, false, 1, {}}, - {8, PROTO_FIELD_OFFSET(ListEntitiesCoverResponse, device_class), ProtoFieldType::TYPE_STRING, false, 1, {}}, - {9, PROTO_FIELD_OFFSET(ListEntitiesCoverResponse, disabled_by_default), ProtoFieldType::TYPE_BOOL, false, 1, {}}, - {10, PROTO_FIELD_OFFSET(ListEntitiesCoverResponse, icon), ProtoFieldType::TYPE_STRING, false, 1, {}}, - {11, PROTO_FIELD_OFFSET(ListEntitiesCoverResponse, entity_category), ProtoFieldType::TYPE_ENUM, false, 1, {}}, - {12, PROTO_FIELD_OFFSET(ListEntitiesCoverResponse, supports_stop), ProtoFieldType::TYPE_BOOL, false, 1, {}}, - {13, PROTO_FIELD_OFFSET(ListEntitiesCoverResponse, device_id), ProtoFieldType::TYPE_UINT32, false, 1, {}}}; -const FieldMetaV2 CoverStateResponse::FIELDS_V2[6] = { - {1, PROTO_FIELD_OFFSET(CoverStateResponse, key), ProtoFieldType::TYPE_FIXED32, false, 1, {}}, - {2, PROTO_FIELD_OFFSET(CoverStateResponse, legacy_state), ProtoFieldType::TYPE_ENUM, false, 1, {}}, - {3, PROTO_FIELD_OFFSET(CoverStateResponse, position), ProtoFieldType::TYPE_FLOAT, false, 1, {}}, - {4, PROTO_FIELD_OFFSET(CoverStateResponse, tilt), ProtoFieldType::TYPE_FLOAT, false, 1, {}}, - {5, PROTO_FIELD_OFFSET(CoverStateResponse, current_operation), ProtoFieldType::TYPE_ENUM, false, 1, {}}, - {6, PROTO_FIELD_OFFSET(CoverStateResponse, device_id), ProtoFieldType::TYPE_UINT32, false, 1, {}}}; -const FieldMetaV2 CoverCommandRequest::FIELDS_V2[8] = { - {1, PROTO_FIELD_OFFSET(CoverCommandRequest, key), ProtoFieldType::TYPE_FIXED32, false, 1, {}}, - {2, PROTO_FIELD_OFFSET(CoverCommandRequest, has_legacy_command), ProtoFieldType::TYPE_BOOL, false, 1, {}}, - {3, PROTO_FIELD_OFFSET(CoverCommandRequest, legacy_command), ProtoFieldType::TYPE_ENUM, false, 1, {}}, - {4, PROTO_FIELD_OFFSET(CoverCommandRequest, has_position), ProtoFieldType::TYPE_BOOL, false, 1, {}}, - {5, PROTO_FIELD_OFFSET(CoverCommandRequest, position), ProtoFieldType::TYPE_FLOAT, false, 1, {}}, - {6, PROTO_FIELD_OFFSET(CoverCommandRequest, has_tilt), ProtoFieldType::TYPE_BOOL, false, 1, {}}, - {7, PROTO_FIELD_OFFSET(CoverCommandRequest, tilt), ProtoFieldType::TYPE_FLOAT, false, 1, {}}, - {8, PROTO_FIELD_OFFSET(CoverCommandRequest, stop), ProtoFieldType::TYPE_BOOL, false, 1, {}}}; +const FieldMetaV3 ListEntitiesCoverResponse::FIELDS_V3[13] = { + {1, 8, {.offset = PROTO_FIELD_OFFSET(ListEntitiesCoverResponse, object_id)}}, + {2, 12, {.offset = PROTO_FIELD_OFFSET(ListEntitiesCoverResponse, key)}}, + {3, 8, {.offset = PROTO_FIELD_OFFSET(ListEntitiesCoverResponse, name)}}, + {4, 8, {.offset = PROTO_FIELD_OFFSET(ListEntitiesCoverResponse, unique_id)}}, + {5, 0, {.offset = PROTO_FIELD_OFFSET(ListEntitiesCoverResponse, assumed_state)}}, + {6, 0, {.offset = PROTO_FIELD_OFFSET(ListEntitiesCoverResponse, supports_position)}}, + {7, 0, {.offset = PROTO_FIELD_OFFSET(ListEntitiesCoverResponse, supports_tilt)}}, + {8, 8, {.offset = PROTO_FIELD_OFFSET(ListEntitiesCoverResponse, device_class)}}, + {9, 0, {.offset = PROTO_FIELD_OFFSET(ListEntitiesCoverResponse, disabled_by_default)}}, + {10, 8, {.offset = PROTO_FIELD_OFFSET(ListEntitiesCoverResponse, icon)}}, + {11, 7, {.offset = PROTO_FIELD_OFFSET(ListEntitiesCoverResponse, entity_category)}}, + {12, 0, {.offset = PROTO_FIELD_OFFSET(ListEntitiesCoverResponse, supports_stop)}}, + {13, 2, {.offset = PROTO_FIELD_OFFSET(ListEntitiesCoverResponse, device_id)}}}; +const FieldMetaV3 CoverStateResponse::FIELDS_V3[6] = { + {1, 12, {.offset = PROTO_FIELD_OFFSET(CoverStateResponse, key)}}, + {2, 7, {.offset = PROTO_FIELD_OFFSET(CoverStateResponse, legacy_state)}}, + {3, 11, {.offset = PROTO_FIELD_OFFSET(CoverStateResponse, position)}}, + {4, 11, {.offset = PROTO_FIELD_OFFSET(CoverStateResponse, tilt)}}, + {5, 7, {.offset = PROTO_FIELD_OFFSET(CoverStateResponse, current_operation)}}, + {6, 2, {.offset = PROTO_FIELD_OFFSET(CoverStateResponse, device_id)}}}; +const FieldMetaV3 CoverCommandRequest::FIELDS_V3[8] = { + {1, 12, {.offset = PROTO_FIELD_OFFSET(CoverCommandRequest, key)}}, + {2, 0, {.offset = PROTO_FIELD_OFFSET(CoverCommandRequest, has_legacy_command)}}, + {3, 7, {.offset = PROTO_FIELD_OFFSET(CoverCommandRequest, legacy_command)}}, + {4, 0, {.offset = PROTO_FIELD_OFFSET(CoverCommandRequest, has_position)}}, + {5, 11, {.offset = PROTO_FIELD_OFFSET(CoverCommandRequest, position)}}, + {6, 0, {.offset = PROTO_FIELD_OFFSET(CoverCommandRequest, has_tilt)}}, + {7, 11, {.offset = PROTO_FIELD_OFFSET(CoverCommandRequest, tilt)}}, + {8, 0, {.offset = PROTO_FIELD_OFFSET(CoverCommandRequest, stop)}}}; #endif #ifdef USE_FAN -const FieldMetaV2 ListEntitiesFanResponse::FIELDS_V2[12] = { - {1, PROTO_FIELD_OFFSET(ListEntitiesFanResponse, object_id), ProtoFieldType::TYPE_STRING, false, 1, {}}, - {2, PROTO_FIELD_OFFSET(ListEntitiesFanResponse, key), ProtoFieldType::TYPE_FIXED32, false, 1, {}}, - {3, PROTO_FIELD_OFFSET(ListEntitiesFanResponse, name), ProtoFieldType::TYPE_STRING, false, 1, {}}, - {4, PROTO_FIELD_OFFSET(ListEntitiesFanResponse, unique_id), ProtoFieldType::TYPE_STRING, false, 1, {}}, - {5, PROTO_FIELD_OFFSET(ListEntitiesFanResponse, supports_oscillation), ProtoFieldType::TYPE_BOOL, false, 1, {}}, - {6, PROTO_FIELD_OFFSET(ListEntitiesFanResponse, supports_speed), ProtoFieldType::TYPE_BOOL, false, 1, {}}, - {7, PROTO_FIELD_OFFSET(ListEntitiesFanResponse, supports_direction), ProtoFieldType::TYPE_BOOL, false, 1, {}}, - {8, PROTO_FIELD_OFFSET(ListEntitiesFanResponse, supported_speed_count), ProtoFieldType::TYPE_INT32, false, 1, {}}, - {9, PROTO_FIELD_OFFSET(ListEntitiesFanResponse, disabled_by_default), ProtoFieldType::TYPE_BOOL, false, 1, {}}, - {10, PROTO_FIELD_OFFSET(ListEntitiesFanResponse, icon), ProtoFieldType::TYPE_STRING, false, 1, {}}, - {11, PROTO_FIELD_OFFSET(ListEntitiesFanResponse, entity_category), ProtoFieldType::TYPE_ENUM, false, 1, {}}, - {13, PROTO_FIELD_OFFSET(ListEntitiesFanResponse, device_id), ProtoFieldType::TYPE_UINT32, false, 1, {}}}; -const RepeatedFieldMetaV2 ListEntitiesFanResponse::REPEATED_FIELDS_V2[1] = { - {12, PROTO_FIELD_OFFSET(ListEntitiesFanResponse, supported_preset_modes), ProtoFieldType::TYPE_STRING, 1, {}}}; -const FieldMetaV2 FanStateResponse::FIELDS_V2[8] = { - {1, PROTO_FIELD_OFFSET(FanStateResponse, key), ProtoFieldType::TYPE_FIXED32, false, 1, {}}, - {2, PROTO_FIELD_OFFSET(FanStateResponse, state), ProtoFieldType::TYPE_BOOL, false, 1, {}}, - {3, PROTO_FIELD_OFFSET(FanStateResponse, oscillating), ProtoFieldType::TYPE_BOOL, false, 1, {}}, - {4, PROTO_FIELD_OFFSET(FanStateResponse, speed), ProtoFieldType::TYPE_ENUM, false, 1, {}}, - {5, PROTO_FIELD_OFFSET(FanStateResponse, direction), ProtoFieldType::TYPE_ENUM, false, 1, {}}, - {6, PROTO_FIELD_OFFSET(FanStateResponse, speed_level), ProtoFieldType::TYPE_INT32, false, 1, {}}, - {7, PROTO_FIELD_OFFSET(FanStateResponse, preset_mode), ProtoFieldType::TYPE_STRING, false, 1, {}}, - {8, PROTO_FIELD_OFFSET(FanStateResponse, device_id), ProtoFieldType::TYPE_UINT32, false, 1, {}}}; -const FieldMetaV2 FanCommandRequest::FIELDS_V2[13] = { - {1, PROTO_FIELD_OFFSET(FanCommandRequest, key), ProtoFieldType::TYPE_FIXED32, false, 1, {}}, - {2, PROTO_FIELD_OFFSET(FanCommandRequest, has_state), ProtoFieldType::TYPE_BOOL, false, 1, {}}, - {3, PROTO_FIELD_OFFSET(FanCommandRequest, state), ProtoFieldType::TYPE_BOOL, false, 1, {}}, - {4, PROTO_FIELD_OFFSET(FanCommandRequest, has_speed), ProtoFieldType::TYPE_BOOL, false, 1, {}}, - {5, PROTO_FIELD_OFFSET(FanCommandRequest, speed), ProtoFieldType::TYPE_ENUM, false, 1, {}}, - {6, PROTO_FIELD_OFFSET(FanCommandRequest, has_oscillating), ProtoFieldType::TYPE_BOOL, false, 1, {}}, - {7, PROTO_FIELD_OFFSET(FanCommandRequest, oscillating), ProtoFieldType::TYPE_BOOL, false, 1, {}}, - {8, PROTO_FIELD_OFFSET(FanCommandRequest, has_direction), ProtoFieldType::TYPE_BOOL, false, 1, {}}, - {9, PROTO_FIELD_OFFSET(FanCommandRequest, direction), ProtoFieldType::TYPE_ENUM, false, 1, {}}, - {10, PROTO_FIELD_OFFSET(FanCommandRequest, has_speed_level), ProtoFieldType::TYPE_BOOL, false, 1, {}}, - {11, PROTO_FIELD_OFFSET(FanCommandRequest, speed_level), ProtoFieldType::TYPE_INT32, false, 1, {}}, - {12, PROTO_FIELD_OFFSET(FanCommandRequest, has_preset_mode), ProtoFieldType::TYPE_BOOL, false, 1, {}}, - {13, PROTO_FIELD_OFFSET(FanCommandRequest, preset_mode), ProtoFieldType::TYPE_STRING, false, 1, {}}}; +const FieldMetaV3 ListEntitiesFanResponse::FIELDS_V3[12] = { + {1, 8, {.offset = PROTO_FIELD_OFFSET(ListEntitiesFanResponse, object_id)}}, + {2, 12, {.offset = PROTO_FIELD_OFFSET(ListEntitiesFanResponse, key)}}, + {3, 8, {.offset = PROTO_FIELD_OFFSET(ListEntitiesFanResponse, name)}}, + {4, 8, {.offset = PROTO_FIELD_OFFSET(ListEntitiesFanResponse, unique_id)}}, + {5, 0, {.offset = PROTO_FIELD_OFFSET(ListEntitiesFanResponse, supports_oscillation)}}, + {6, 0, {.offset = PROTO_FIELD_OFFSET(ListEntitiesFanResponse, supports_speed)}}, + {7, 0, {.offset = PROTO_FIELD_OFFSET(ListEntitiesFanResponse, supports_direction)}}, + {8, 1, {.offset = PROTO_FIELD_OFFSET(ListEntitiesFanResponse, supported_speed_count)}}, + {9, 0, {.offset = PROTO_FIELD_OFFSET(ListEntitiesFanResponse, disabled_by_default)}}, + {10, 8, {.offset = PROTO_FIELD_OFFSET(ListEntitiesFanResponse, icon)}}, + {11, 7, {.offset = PROTO_FIELD_OFFSET(ListEntitiesFanResponse, entity_category)}}, + {13, 2, {.offset = PROTO_FIELD_OFFSET(ListEntitiesFanResponse, device_id)}}}; +const RepeatedFieldMetaV3 ListEntitiesFanResponse::REPEATED_FIELDS_V3[1] = { + {12, 8, {.offset = PROTO_FIELD_OFFSET(ListEntitiesFanResponse, supported_preset_modes)}}}; +const FieldMetaV3 FanStateResponse::FIELDS_V3[8] = { + {1, 12, {.offset = PROTO_FIELD_OFFSET(FanStateResponse, key)}}, + {2, 0, {.offset = PROTO_FIELD_OFFSET(FanStateResponse, state)}}, + {3, 0, {.offset = PROTO_FIELD_OFFSET(FanStateResponse, oscillating)}}, + {4, 7, {.offset = PROTO_FIELD_OFFSET(FanStateResponse, speed)}}, + {5, 7, {.offset = PROTO_FIELD_OFFSET(FanStateResponse, direction)}}, + {6, 1, {.offset = PROTO_FIELD_OFFSET(FanStateResponse, speed_level)}}, + {7, 8, {.offset = PROTO_FIELD_OFFSET(FanStateResponse, preset_mode)}}, + {8, 2, {.offset = PROTO_FIELD_OFFSET(FanStateResponse, device_id)}}}; +const FieldMetaV3 FanCommandRequest::FIELDS_V3[13] = { + {1, 12, {.offset = PROTO_FIELD_OFFSET(FanCommandRequest, key)}}, + {2, 0, {.offset = PROTO_FIELD_OFFSET(FanCommandRequest, has_state)}}, + {3, 0, {.offset = PROTO_FIELD_OFFSET(FanCommandRequest, state)}}, + {4, 0, {.offset = PROTO_FIELD_OFFSET(FanCommandRequest, has_speed)}}, + {5, 7, {.offset = PROTO_FIELD_OFFSET(FanCommandRequest, speed)}}, + {6, 0, {.offset = PROTO_FIELD_OFFSET(FanCommandRequest, has_oscillating)}}, + {7, 0, {.offset = PROTO_FIELD_OFFSET(FanCommandRequest, oscillating)}}, + {8, 0, {.offset = PROTO_FIELD_OFFSET(FanCommandRequest, has_direction)}}, + {9, 7, {.offset = PROTO_FIELD_OFFSET(FanCommandRequest, direction)}}, + {10, 0, {.offset = PROTO_FIELD_OFFSET(FanCommandRequest, has_speed_level)}}, + {11, 1, {.offset = PROTO_FIELD_OFFSET(FanCommandRequest, speed_level)}}, + {12, 0, {.offset = PROTO_FIELD_OFFSET(FanCommandRequest, has_preset_mode)}}, + {13, 8, {.offset = PROTO_FIELD_OFFSET(FanCommandRequest, preset_mode)}}}; #endif #ifdef USE_LIGHT -const FieldMetaV2 ListEntitiesLightResponse::FIELDS_V2[14] = { - {1, PROTO_FIELD_OFFSET(ListEntitiesLightResponse, object_id), ProtoFieldType::TYPE_STRING, false, 1, {}}, - {2, PROTO_FIELD_OFFSET(ListEntitiesLightResponse, key), ProtoFieldType::TYPE_FIXED32, false, 1, {}}, - {3, PROTO_FIELD_OFFSET(ListEntitiesLightResponse, name), ProtoFieldType::TYPE_STRING, false, 1, {}}, - {4, PROTO_FIELD_OFFSET(ListEntitiesLightResponse, unique_id), ProtoFieldType::TYPE_STRING, false, 1, {}}, - {5, - PROTO_FIELD_OFFSET(ListEntitiesLightResponse, legacy_supports_brightness), - ProtoFieldType::TYPE_BOOL, - false, - 1, - {}}, - {6, PROTO_FIELD_OFFSET(ListEntitiesLightResponse, legacy_supports_rgb), ProtoFieldType::TYPE_BOOL, false, 1, {}}, - {7, - PROTO_FIELD_OFFSET(ListEntitiesLightResponse, legacy_supports_white_value), - ProtoFieldType::TYPE_BOOL, - false, - 1, - {}}, - {8, - PROTO_FIELD_OFFSET(ListEntitiesLightResponse, legacy_supports_color_temperature), - ProtoFieldType::TYPE_BOOL, - false, - 1, - {}}, - {9, PROTO_FIELD_OFFSET(ListEntitiesLightResponse, min_mireds), ProtoFieldType::TYPE_FLOAT, false, 1, {}}, - {10, PROTO_FIELD_OFFSET(ListEntitiesLightResponse, max_mireds), ProtoFieldType::TYPE_FLOAT, false, 1, {}}, - {13, PROTO_FIELD_OFFSET(ListEntitiesLightResponse, disabled_by_default), ProtoFieldType::TYPE_BOOL, false, 1, {}}, - {14, PROTO_FIELD_OFFSET(ListEntitiesLightResponse, icon), ProtoFieldType::TYPE_STRING, false, 1, {}}, - {15, PROTO_FIELD_OFFSET(ListEntitiesLightResponse, entity_category), ProtoFieldType::TYPE_ENUM, false, 1, {}}, - {16, PROTO_FIELD_OFFSET(ListEntitiesLightResponse, device_id), ProtoFieldType::TYPE_UINT32, false, 2, {}}}; -const RepeatedFieldMetaV2 ListEntitiesLightResponse::REPEATED_FIELDS_V2[2] = { - {12, PROTO_FIELD_OFFSET(ListEntitiesLightResponse, supported_color_modes), ProtoFieldType::TYPE_ENUM, 1, {}}, - {11, PROTO_FIELD_OFFSET(ListEntitiesLightResponse, effects), ProtoFieldType::TYPE_STRING, 1, {}}}; -const FieldMetaV2 LightStateResponse::FIELDS_V2[14] = { - {1, PROTO_FIELD_OFFSET(LightStateResponse, key), ProtoFieldType::TYPE_FIXED32, false, 1, {}}, - {2, PROTO_FIELD_OFFSET(LightStateResponse, state), ProtoFieldType::TYPE_BOOL, false, 1, {}}, - {3, PROTO_FIELD_OFFSET(LightStateResponse, brightness), ProtoFieldType::TYPE_FLOAT, false, 1, {}}, - {11, PROTO_FIELD_OFFSET(LightStateResponse, color_mode), ProtoFieldType::TYPE_ENUM, false, 1, {}}, - {10, PROTO_FIELD_OFFSET(LightStateResponse, color_brightness), ProtoFieldType::TYPE_FLOAT, false, 1, {}}, - {4, PROTO_FIELD_OFFSET(LightStateResponse, red), ProtoFieldType::TYPE_FLOAT, false, 1, {}}, - {5, PROTO_FIELD_OFFSET(LightStateResponse, green), ProtoFieldType::TYPE_FLOAT, false, 1, {}}, - {6, PROTO_FIELD_OFFSET(LightStateResponse, blue), ProtoFieldType::TYPE_FLOAT, false, 1, {}}, - {7, PROTO_FIELD_OFFSET(LightStateResponse, white), ProtoFieldType::TYPE_FLOAT, false, 1, {}}, - {8, PROTO_FIELD_OFFSET(LightStateResponse, color_temperature), ProtoFieldType::TYPE_FLOAT, false, 1, {}}, - {12, PROTO_FIELD_OFFSET(LightStateResponse, cold_white), ProtoFieldType::TYPE_FLOAT, false, 1, {}}, - {13, PROTO_FIELD_OFFSET(LightStateResponse, warm_white), ProtoFieldType::TYPE_FLOAT, false, 1, {}}, - {9, PROTO_FIELD_OFFSET(LightStateResponse, effect), ProtoFieldType::TYPE_STRING, false, 1, {}}, - {14, PROTO_FIELD_OFFSET(LightStateResponse, device_id), ProtoFieldType::TYPE_UINT32, false, 1, {}}}; -const FieldMetaV2 LightCommandRequest::FIELDS_V2[27] = { - {1, PROTO_FIELD_OFFSET(LightCommandRequest, key), ProtoFieldType::TYPE_FIXED32, false, 1, {}}, - {2, PROTO_FIELD_OFFSET(LightCommandRequest, has_state), ProtoFieldType::TYPE_BOOL, false, 1, {}}, - {3, PROTO_FIELD_OFFSET(LightCommandRequest, state), ProtoFieldType::TYPE_BOOL, false, 1, {}}, - {4, PROTO_FIELD_OFFSET(LightCommandRequest, has_brightness), ProtoFieldType::TYPE_BOOL, false, 1, {}}, - {5, PROTO_FIELD_OFFSET(LightCommandRequest, brightness), ProtoFieldType::TYPE_FLOAT, false, 1, {}}, - {22, PROTO_FIELD_OFFSET(LightCommandRequest, has_color_mode), ProtoFieldType::TYPE_BOOL, false, 2, {}}, - {23, PROTO_FIELD_OFFSET(LightCommandRequest, color_mode), ProtoFieldType::TYPE_ENUM, false, 2, {}}, - {20, PROTO_FIELD_OFFSET(LightCommandRequest, has_color_brightness), ProtoFieldType::TYPE_BOOL, false, 2, {}}, - {21, PROTO_FIELD_OFFSET(LightCommandRequest, color_brightness), ProtoFieldType::TYPE_FLOAT, false, 2, {}}, - {6, PROTO_FIELD_OFFSET(LightCommandRequest, has_rgb), ProtoFieldType::TYPE_BOOL, false, 1, {}}, - {7, PROTO_FIELD_OFFSET(LightCommandRequest, red), ProtoFieldType::TYPE_FLOAT, false, 1, {}}, - {8, PROTO_FIELD_OFFSET(LightCommandRequest, green), ProtoFieldType::TYPE_FLOAT, false, 1, {}}, - {9, PROTO_FIELD_OFFSET(LightCommandRequest, blue), ProtoFieldType::TYPE_FLOAT, false, 1, {}}, - {10, PROTO_FIELD_OFFSET(LightCommandRequest, has_white), ProtoFieldType::TYPE_BOOL, false, 1, {}}, - {11, PROTO_FIELD_OFFSET(LightCommandRequest, white), ProtoFieldType::TYPE_FLOAT, false, 1, {}}, - {12, PROTO_FIELD_OFFSET(LightCommandRequest, has_color_temperature), ProtoFieldType::TYPE_BOOL, false, 1, {}}, - {13, PROTO_FIELD_OFFSET(LightCommandRequest, color_temperature), ProtoFieldType::TYPE_FLOAT, false, 1, {}}, - {24, PROTO_FIELD_OFFSET(LightCommandRequest, has_cold_white), ProtoFieldType::TYPE_BOOL, false, 2, {}}, - {25, PROTO_FIELD_OFFSET(LightCommandRequest, cold_white), ProtoFieldType::TYPE_FLOAT, false, 2, {}}, - {26, PROTO_FIELD_OFFSET(LightCommandRequest, has_warm_white), ProtoFieldType::TYPE_BOOL, false, 2, {}}, - {27, PROTO_FIELD_OFFSET(LightCommandRequest, warm_white), ProtoFieldType::TYPE_FLOAT, false, 2, {}}, - {14, PROTO_FIELD_OFFSET(LightCommandRequest, has_transition_length), ProtoFieldType::TYPE_BOOL, false, 1, {}}, - {15, PROTO_FIELD_OFFSET(LightCommandRequest, transition_length), ProtoFieldType::TYPE_UINT32, false, 1, {}}, - {16, PROTO_FIELD_OFFSET(LightCommandRequest, has_flash_length), ProtoFieldType::TYPE_BOOL, false, 2, {}}, - {17, PROTO_FIELD_OFFSET(LightCommandRequest, flash_length), ProtoFieldType::TYPE_UINT32, false, 2, {}}, - {18, PROTO_FIELD_OFFSET(LightCommandRequest, has_effect), ProtoFieldType::TYPE_BOOL, false, 2, {}}, - {19, PROTO_FIELD_OFFSET(LightCommandRequest, effect), ProtoFieldType::TYPE_STRING, false, 2, {}}}; +const FieldMetaV3 ListEntitiesLightResponse::FIELDS_V3[14] = { + {1, 8, {.offset = PROTO_FIELD_OFFSET(ListEntitiesLightResponse, object_id)}}, + {2, 12, {.offset = PROTO_FIELD_OFFSET(ListEntitiesLightResponse, key)}}, + {3, 8, {.offset = PROTO_FIELD_OFFSET(ListEntitiesLightResponse, name)}}, + {4, 8, {.offset = PROTO_FIELD_OFFSET(ListEntitiesLightResponse, unique_id)}}, + {5, 0, {.offset = PROTO_FIELD_OFFSET(ListEntitiesLightResponse, legacy_supports_brightness)}}, + {6, 0, {.offset = PROTO_FIELD_OFFSET(ListEntitiesLightResponse, legacy_supports_rgb)}}, + {7, 0, {.offset = PROTO_FIELD_OFFSET(ListEntitiesLightResponse, legacy_supports_white_value)}}, + {8, 0, {.offset = PROTO_FIELD_OFFSET(ListEntitiesLightResponse, legacy_supports_color_temperature)}}, + {9, 11, {.offset = PROTO_FIELD_OFFSET(ListEntitiesLightResponse, min_mireds)}}, + {10, 11, {.offset = PROTO_FIELD_OFFSET(ListEntitiesLightResponse, max_mireds)}}, + {13, 0, {.offset = PROTO_FIELD_OFFSET(ListEntitiesLightResponse, disabled_by_default)}}, + {14, 8, {.offset = PROTO_FIELD_OFFSET(ListEntitiesLightResponse, icon)}}, + {15, 7, {.offset = PROTO_FIELD_OFFSET(ListEntitiesLightResponse, entity_category)}}, + {16, 34, {.offset = PROTO_FIELD_OFFSET(ListEntitiesLightResponse, device_id)}}}; +const RepeatedFieldMetaV3 ListEntitiesLightResponse::REPEATED_FIELDS_V3[2] = { + {12, 7, {.offset = PROTO_FIELD_OFFSET(ListEntitiesLightResponse, supported_color_modes)}}, + {11, 8, {.offset = PROTO_FIELD_OFFSET(ListEntitiesLightResponse, effects)}}}; +const FieldMetaV3 LightStateResponse::FIELDS_V3[14] = { + {1, 12, {.offset = PROTO_FIELD_OFFSET(LightStateResponse, key)}}, + {2, 0, {.offset = PROTO_FIELD_OFFSET(LightStateResponse, state)}}, + {3, 11, {.offset = PROTO_FIELD_OFFSET(LightStateResponse, brightness)}}, + {11, 7, {.offset = PROTO_FIELD_OFFSET(LightStateResponse, color_mode)}}, + {10, 11, {.offset = PROTO_FIELD_OFFSET(LightStateResponse, color_brightness)}}, + {4, 11, {.offset = PROTO_FIELD_OFFSET(LightStateResponse, red)}}, + {5, 11, {.offset = PROTO_FIELD_OFFSET(LightStateResponse, green)}}, + {6, 11, {.offset = PROTO_FIELD_OFFSET(LightStateResponse, blue)}}, + {7, 11, {.offset = PROTO_FIELD_OFFSET(LightStateResponse, white)}}, + {8, 11, {.offset = PROTO_FIELD_OFFSET(LightStateResponse, color_temperature)}}, + {12, 11, {.offset = PROTO_FIELD_OFFSET(LightStateResponse, cold_white)}}, + {13, 11, {.offset = PROTO_FIELD_OFFSET(LightStateResponse, warm_white)}}, + {9, 8, {.offset = PROTO_FIELD_OFFSET(LightStateResponse, effect)}}, + {14, 2, {.offset = PROTO_FIELD_OFFSET(LightStateResponse, device_id)}}}; +const FieldMetaV3 LightCommandRequest::FIELDS_V3[27] = { + {1, 12, {.offset = PROTO_FIELD_OFFSET(LightCommandRequest, key)}}, + {2, 0, {.offset = PROTO_FIELD_OFFSET(LightCommandRequest, has_state)}}, + {3, 0, {.offset = PROTO_FIELD_OFFSET(LightCommandRequest, state)}}, + {4, 0, {.offset = PROTO_FIELD_OFFSET(LightCommandRequest, has_brightness)}}, + {5, 11, {.offset = PROTO_FIELD_OFFSET(LightCommandRequest, brightness)}}, + {22, 32, {.offset = PROTO_FIELD_OFFSET(LightCommandRequest, has_color_mode)}}, + {23, 39, {.offset = PROTO_FIELD_OFFSET(LightCommandRequest, color_mode)}}, + {20, 32, {.offset = PROTO_FIELD_OFFSET(LightCommandRequest, has_color_brightness)}}, + {21, 43, {.offset = PROTO_FIELD_OFFSET(LightCommandRequest, color_brightness)}}, + {6, 0, {.offset = PROTO_FIELD_OFFSET(LightCommandRequest, has_rgb)}}, + {7, 11, {.offset = PROTO_FIELD_OFFSET(LightCommandRequest, red)}}, + {8, 11, {.offset = PROTO_FIELD_OFFSET(LightCommandRequest, green)}}, + {9, 11, {.offset = PROTO_FIELD_OFFSET(LightCommandRequest, blue)}}, + {10, 0, {.offset = PROTO_FIELD_OFFSET(LightCommandRequest, has_white)}}, + {11, 11, {.offset = PROTO_FIELD_OFFSET(LightCommandRequest, white)}}, + {12, 0, {.offset = PROTO_FIELD_OFFSET(LightCommandRequest, has_color_temperature)}}, + {13, 11, {.offset = PROTO_FIELD_OFFSET(LightCommandRequest, color_temperature)}}, + {24, 32, {.offset = PROTO_FIELD_OFFSET(LightCommandRequest, has_cold_white)}}, + {25, 43, {.offset = PROTO_FIELD_OFFSET(LightCommandRequest, cold_white)}}, + {26, 32, {.offset = PROTO_FIELD_OFFSET(LightCommandRequest, has_warm_white)}}, + {27, 43, {.offset = PROTO_FIELD_OFFSET(LightCommandRequest, warm_white)}}, + {14, 0, {.offset = PROTO_FIELD_OFFSET(LightCommandRequest, has_transition_length)}}, + {15, 2, {.offset = PROTO_FIELD_OFFSET(LightCommandRequest, transition_length)}}, + {16, 32, {.offset = PROTO_FIELD_OFFSET(LightCommandRequest, has_flash_length)}}, + {17, 34, {.offset = PROTO_FIELD_OFFSET(LightCommandRequest, flash_length)}}, + {18, 32, {.offset = PROTO_FIELD_OFFSET(LightCommandRequest, has_effect)}}, + {19, 40, {.offset = PROTO_FIELD_OFFSET(LightCommandRequest, effect)}}}; #endif #ifdef USE_SENSOR -const FieldMetaV2 ListEntitiesSensorResponse::FIELDS_V2[14] = { - {1, PROTO_FIELD_OFFSET(ListEntitiesSensorResponse, object_id), ProtoFieldType::TYPE_STRING, false, 1, {}}, - {2, PROTO_FIELD_OFFSET(ListEntitiesSensorResponse, key), ProtoFieldType::TYPE_FIXED32, false, 1, {}}, - {3, PROTO_FIELD_OFFSET(ListEntitiesSensorResponse, name), ProtoFieldType::TYPE_STRING, false, 1, {}}, - {4, PROTO_FIELD_OFFSET(ListEntitiesSensorResponse, unique_id), ProtoFieldType::TYPE_STRING, false, 1, {}}, - {5, PROTO_FIELD_OFFSET(ListEntitiesSensorResponse, icon), ProtoFieldType::TYPE_STRING, false, 1, {}}, - {6, PROTO_FIELD_OFFSET(ListEntitiesSensorResponse, unit_of_measurement), ProtoFieldType::TYPE_STRING, false, 1, {}}, - {7, PROTO_FIELD_OFFSET(ListEntitiesSensorResponse, accuracy_decimals), ProtoFieldType::TYPE_INT32, false, 1, {}}, - {8, PROTO_FIELD_OFFSET(ListEntitiesSensorResponse, force_update), ProtoFieldType::TYPE_BOOL, false, 1, {}}, - {9, PROTO_FIELD_OFFSET(ListEntitiesSensorResponse, device_class), ProtoFieldType::TYPE_STRING, false, 1, {}}, - {10, PROTO_FIELD_OFFSET(ListEntitiesSensorResponse, state_class), ProtoFieldType::TYPE_ENUM, false, 1, {}}, - {11, - PROTO_FIELD_OFFSET(ListEntitiesSensorResponse, legacy_last_reset_type), - ProtoFieldType::TYPE_ENUM, - false, - 1, - {}}, - {12, PROTO_FIELD_OFFSET(ListEntitiesSensorResponse, disabled_by_default), ProtoFieldType::TYPE_BOOL, false, 1, {}}, - {13, PROTO_FIELD_OFFSET(ListEntitiesSensorResponse, entity_category), ProtoFieldType::TYPE_ENUM, false, 1, {}}, - {14, PROTO_FIELD_OFFSET(ListEntitiesSensorResponse, device_id), ProtoFieldType::TYPE_UINT32, false, 1, {}}}; -const FieldMetaV2 SensorStateResponse::FIELDS_V2[4] = { - {1, PROTO_FIELD_OFFSET(SensorStateResponse, key), ProtoFieldType::TYPE_FIXED32, false, 1, {}}, - {2, PROTO_FIELD_OFFSET(SensorStateResponse, state), ProtoFieldType::TYPE_FLOAT, false, 1, {}}, - {3, PROTO_FIELD_OFFSET(SensorStateResponse, missing_state), ProtoFieldType::TYPE_BOOL, false, 1, {}}, - {4, PROTO_FIELD_OFFSET(SensorStateResponse, device_id), ProtoFieldType::TYPE_UINT32, false, 1, {}}}; +const FieldMetaV3 ListEntitiesSensorResponse::FIELDS_V3[14] = { + {1, 8, {.offset = PROTO_FIELD_OFFSET(ListEntitiesSensorResponse, object_id)}}, + {2, 12, {.offset = PROTO_FIELD_OFFSET(ListEntitiesSensorResponse, key)}}, + {3, 8, {.offset = PROTO_FIELD_OFFSET(ListEntitiesSensorResponse, name)}}, + {4, 8, {.offset = PROTO_FIELD_OFFSET(ListEntitiesSensorResponse, unique_id)}}, + {5, 8, {.offset = PROTO_FIELD_OFFSET(ListEntitiesSensorResponse, icon)}}, + {6, 8, {.offset = PROTO_FIELD_OFFSET(ListEntitiesSensorResponse, unit_of_measurement)}}, + {7, 1, {.offset = PROTO_FIELD_OFFSET(ListEntitiesSensorResponse, accuracy_decimals)}}, + {8, 0, {.offset = PROTO_FIELD_OFFSET(ListEntitiesSensorResponse, force_update)}}, + {9, 8, {.offset = PROTO_FIELD_OFFSET(ListEntitiesSensorResponse, device_class)}}, + {10, 7, {.offset = PROTO_FIELD_OFFSET(ListEntitiesSensorResponse, state_class)}}, + {11, 7, {.offset = PROTO_FIELD_OFFSET(ListEntitiesSensorResponse, legacy_last_reset_type)}}, + {12, 0, {.offset = PROTO_FIELD_OFFSET(ListEntitiesSensorResponse, disabled_by_default)}}, + {13, 7, {.offset = PROTO_FIELD_OFFSET(ListEntitiesSensorResponse, entity_category)}}, + {14, 2, {.offset = PROTO_FIELD_OFFSET(ListEntitiesSensorResponse, device_id)}}}; +const FieldMetaV3 SensorStateResponse::FIELDS_V3[4] = { + {1, 12, {.offset = PROTO_FIELD_OFFSET(SensorStateResponse, key)}}, + {2, 11, {.offset = PROTO_FIELD_OFFSET(SensorStateResponse, state)}}, + {3, 0, {.offset = PROTO_FIELD_OFFSET(SensorStateResponse, missing_state)}}, + {4, 2, {.offset = PROTO_FIELD_OFFSET(SensorStateResponse, device_id)}}}; #endif #ifdef USE_SWITCH -const FieldMetaV2 ListEntitiesSwitchResponse::FIELDS_V2[10] = { - {1, PROTO_FIELD_OFFSET(ListEntitiesSwitchResponse, object_id), ProtoFieldType::TYPE_STRING, false, 1, {}}, - {2, PROTO_FIELD_OFFSET(ListEntitiesSwitchResponse, key), ProtoFieldType::TYPE_FIXED32, false, 1, {}}, - {3, PROTO_FIELD_OFFSET(ListEntitiesSwitchResponse, name), ProtoFieldType::TYPE_STRING, false, 1, {}}, - {4, PROTO_FIELD_OFFSET(ListEntitiesSwitchResponse, unique_id), ProtoFieldType::TYPE_STRING, false, 1, {}}, - {5, PROTO_FIELD_OFFSET(ListEntitiesSwitchResponse, icon), ProtoFieldType::TYPE_STRING, false, 1, {}}, - {6, PROTO_FIELD_OFFSET(ListEntitiesSwitchResponse, assumed_state), ProtoFieldType::TYPE_BOOL, false, 1, {}}, - {7, PROTO_FIELD_OFFSET(ListEntitiesSwitchResponse, disabled_by_default), ProtoFieldType::TYPE_BOOL, false, 1, {}}, - {8, PROTO_FIELD_OFFSET(ListEntitiesSwitchResponse, entity_category), ProtoFieldType::TYPE_ENUM, false, 1, {}}, - {9, PROTO_FIELD_OFFSET(ListEntitiesSwitchResponse, device_class), ProtoFieldType::TYPE_STRING, false, 1, {}}, - {10, PROTO_FIELD_OFFSET(ListEntitiesSwitchResponse, device_id), ProtoFieldType::TYPE_UINT32, false, 1, {}}}; -const FieldMetaV2 SwitchStateResponse::FIELDS_V2[3] = { - {1, PROTO_FIELD_OFFSET(SwitchStateResponse, key), ProtoFieldType::TYPE_FIXED32, false, 1, {}}, - {2, PROTO_FIELD_OFFSET(SwitchStateResponse, state), ProtoFieldType::TYPE_BOOL, false, 1, {}}, - {3, PROTO_FIELD_OFFSET(SwitchStateResponse, device_id), ProtoFieldType::TYPE_UINT32, false, 1, {}}}; -const FieldMetaV2 SwitchCommandRequest::FIELDS_V2[2] = { - {1, PROTO_FIELD_OFFSET(SwitchCommandRequest, key), ProtoFieldType::TYPE_FIXED32, false, 1, {}}, - {2, PROTO_FIELD_OFFSET(SwitchCommandRequest, state), ProtoFieldType::TYPE_BOOL, false, 1, {}}}; +const FieldMetaV3 ListEntitiesSwitchResponse::FIELDS_V3[10] = { + {1, 8, {.offset = PROTO_FIELD_OFFSET(ListEntitiesSwitchResponse, object_id)}}, + {2, 12, {.offset = PROTO_FIELD_OFFSET(ListEntitiesSwitchResponse, key)}}, + {3, 8, {.offset = PROTO_FIELD_OFFSET(ListEntitiesSwitchResponse, name)}}, + {4, 8, {.offset = PROTO_FIELD_OFFSET(ListEntitiesSwitchResponse, unique_id)}}, + {5, 8, {.offset = PROTO_FIELD_OFFSET(ListEntitiesSwitchResponse, icon)}}, + {6, 0, {.offset = PROTO_FIELD_OFFSET(ListEntitiesSwitchResponse, assumed_state)}}, + {7, 0, {.offset = PROTO_FIELD_OFFSET(ListEntitiesSwitchResponse, disabled_by_default)}}, + {8, 7, {.offset = PROTO_FIELD_OFFSET(ListEntitiesSwitchResponse, entity_category)}}, + {9, 8, {.offset = PROTO_FIELD_OFFSET(ListEntitiesSwitchResponse, device_class)}}, + {10, 2, {.offset = PROTO_FIELD_OFFSET(ListEntitiesSwitchResponse, device_id)}}}; +const FieldMetaV3 SwitchStateResponse::FIELDS_V3[3] = { + {1, 12, {.offset = PROTO_FIELD_OFFSET(SwitchStateResponse, key)}}, + {2, 0, {.offset = PROTO_FIELD_OFFSET(SwitchStateResponse, state)}}, + {3, 2, {.offset = PROTO_FIELD_OFFSET(SwitchStateResponse, device_id)}}}; +const FieldMetaV3 SwitchCommandRequest::FIELDS_V3[2] = { + {1, 12, {.offset = PROTO_FIELD_OFFSET(SwitchCommandRequest, key)}}, + {2, 0, {.offset = PROTO_FIELD_OFFSET(SwitchCommandRequest, state)}}}; #endif #ifdef USE_TEXT_SENSOR -const FieldMetaV2 ListEntitiesTextSensorResponse::FIELDS_V2[9] = { - {1, PROTO_FIELD_OFFSET(ListEntitiesTextSensorResponse, object_id), ProtoFieldType::TYPE_STRING, false, 1, {}}, - {2, PROTO_FIELD_OFFSET(ListEntitiesTextSensorResponse, key), ProtoFieldType::TYPE_FIXED32, false, 1, {}}, - {3, PROTO_FIELD_OFFSET(ListEntitiesTextSensorResponse, name), ProtoFieldType::TYPE_STRING, false, 1, {}}, - {4, PROTO_FIELD_OFFSET(ListEntitiesTextSensorResponse, unique_id), ProtoFieldType::TYPE_STRING, false, 1, {}}, - {5, PROTO_FIELD_OFFSET(ListEntitiesTextSensorResponse, icon), ProtoFieldType::TYPE_STRING, false, 1, {}}, - {6, - PROTO_FIELD_OFFSET(ListEntitiesTextSensorResponse, disabled_by_default), - ProtoFieldType::TYPE_BOOL, - false, - 1, - {}}, - {7, PROTO_FIELD_OFFSET(ListEntitiesTextSensorResponse, entity_category), ProtoFieldType::TYPE_ENUM, false, 1, {}}, - {8, PROTO_FIELD_OFFSET(ListEntitiesTextSensorResponse, device_class), ProtoFieldType::TYPE_STRING, false, 1, {}}, - {9, PROTO_FIELD_OFFSET(ListEntitiesTextSensorResponse, device_id), ProtoFieldType::TYPE_UINT32, false, 1, {}}}; -const FieldMetaV2 TextSensorStateResponse::FIELDS_V2[4] = { - {1, PROTO_FIELD_OFFSET(TextSensorStateResponse, key), ProtoFieldType::TYPE_FIXED32, false, 1, {}}, - {2, PROTO_FIELD_OFFSET(TextSensorStateResponse, state), ProtoFieldType::TYPE_STRING, false, 1, {}}, - {3, PROTO_FIELD_OFFSET(TextSensorStateResponse, missing_state), ProtoFieldType::TYPE_BOOL, false, 1, {}}, - {4, PROTO_FIELD_OFFSET(TextSensorStateResponse, device_id), ProtoFieldType::TYPE_UINT32, false, 1, {}}}; +const FieldMetaV3 ListEntitiesTextSensorResponse::FIELDS_V3[9] = { + {1, 8, {.offset = PROTO_FIELD_OFFSET(ListEntitiesTextSensorResponse, object_id)}}, + {2, 12, {.offset = PROTO_FIELD_OFFSET(ListEntitiesTextSensorResponse, key)}}, + {3, 8, {.offset = PROTO_FIELD_OFFSET(ListEntitiesTextSensorResponse, name)}}, + {4, 8, {.offset = PROTO_FIELD_OFFSET(ListEntitiesTextSensorResponse, unique_id)}}, + {5, 8, {.offset = PROTO_FIELD_OFFSET(ListEntitiesTextSensorResponse, icon)}}, + {6, 0, {.offset = PROTO_FIELD_OFFSET(ListEntitiesTextSensorResponse, disabled_by_default)}}, + {7, 7, {.offset = PROTO_FIELD_OFFSET(ListEntitiesTextSensorResponse, entity_category)}}, + {8, 8, {.offset = PROTO_FIELD_OFFSET(ListEntitiesTextSensorResponse, device_class)}}, + {9, 2, {.offset = PROTO_FIELD_OFFSET(ListEntitiesTextSensorResponse, device_id)}}}; +const FieldMetaV3 TextSensorStateResponse::FIELDS_V3[4] = { + {1, 12, {.offset = PROTO_FIELD_OFFSET(TextSensorStateResponse, key)}}, + {2, 8, {.offset = PROTO_FIELD_OFFSET(TextSensorStateResponse, state)}}, + {3, 0, {.offset = PROTO_FIELD_OFFSET(TextSensorStateResponse, missing_state)}}, + {4, 2, {.offset = PROTO_FIELD_OFFSET(TextSensorStateResponse, device_id)}}}; #endif -const FieldMetaV2 SubscribeLogsRequest::FIELDS_V2[2] = { - {1, PROTO_FIELD_OFFSET(SubscribeLogsRequest, level), ProtoFieldType::TYPE_ENUM, false, 1, {}}, - {2, PROTO_FIELD_OFFSET(SubscribeLogsRequest, dump_config), ProtoFieldType::TYPE_BOOL, false, 1, {}}}; -const FieldMetaV2 SubscribeLogsResponse::FIELDS_V2[3] = { - {1, PROTO_FIELD_OFFSET(SubscribeLogsResponse, level), ProtoFieldType::TYPE_ENUM, false, 1, {}}, - {3, PROTO_FIELD_OFFSET(SubscribeLogsResponse, message), ProtoFieldType::TYPE_BYTES, false, 1, {}}, - {4, PROTO_FIELD_OFFSET(SubscribeLogsResponse, send_failed), ProtoFieldType::TYPE_BOOL, false, 1, {}}}; +const FieldMetaV3 SubscribeLogsRequest::FIELDS_V3[2] = { + {1, 7, {.offset = PROTO_FIELD_OFFSET(SubscribeLogsRequest, level)}}, + {2, 0, {.offset = PROTO_FIELD_OFFSET(SubscribeLogsRequest, dump_config)}}}; +const FieldMetaV3 SubscribeLogsResponse::FIELDS_V3[3] = { + {1, 7, {.offset = PROTO_FIELD_OFFSET(SubscribeLogsResponse, level)}}, + {3, 9, {.offset = PROTO_FIELD_OFFSET(SubscribeLogsResponse, message)}}, + {4, 0, {.offset = PROTO_FIELD_OFFSET(SubscribeLogsResponse, send_failed)}}}; #ifdef USE_API_NOISE -const FieldMetaV2 NoiseEncryptionSetKeyRequest::FIELDS_V2[1] = { - {1, PROTO_FIELD_OFFSET(NoiseEncryptionSetKeyRequest, key), ProtoFieldType::TYPE_BYTES, false, 1, {}}}; -const FieldMetaV2 NoiseEncryptionSetKeyResponse::FIELDS_V2[1] = { - {1, PROTO_FIELD_OFFSET(NoiseEncryptionSetKeyResponse, success), ProtoFieldType::TYPE_BOOL, false, 1, {}}}; +const FieldMetaV3 NoiseEncryptionSetKeyRequest::FIELDS_V3[1] = { + {1, 9, {.offset = PROTO_FIELD_OFFSET(NoiseEncryptionSetKeyRequest, key)}}}; +const FieldMetaV3 NoiseEncryptionSetKeyResponse::FIELDS_V3[1] = { + {1, 0, {.offset = PROTO_FIELD_OFFSET(NoiseEncryptionSetKeyResponse, success)}}}; #endif -const FieldMetaV2 HomeassistantServiceMap::FIELDS_V2[2] = { - {1, PROTO_FIELD_OFFSET(HomeassistantServiceMap, key), ProtoFieldType::TYPE_STRING, false, 1, {}}, - {2, PROTO_FIELD_OFFSET(HomeassistantServiceMap, value), ProtoFieldType::TYPE_STRING, false, 1, {}}}; -const FieldMetaV2 HomeassistantServiceResponse::FIELDS_V2[2] = { - {1, PROTO_FIELD_OFFSET(HomeassistantServiceResponse, service), ProtoFieldType::TYPE_STRING, false, 1, {}}, - {5, PROTO_FIELD_OFFSET(HomeassistantServiceResponse, is_event), ProtoFieldType::TYPE_BOOL, false, 1, {}}}; -const RepeatedFieldMetaV2 HomeassistantServiceResponse::REPEATED_FIELDS_V2[3] = { +const FieldMetaV3 HomeassistantServiceMap::FIELDS_V3[2] = { + {1, 8, {.offset = PROTO_FIELD_OFFSET(HomeassistantServiceMap, key)}}, + {2, 8, {.offset = PROTO_FIELD_OFFSET(HomeassistantServiceMap, value)}}}; +const FieldMetaV3 HomeassistantServiceResponse::FIELDS_V3[2] = { + {1, 8, {.offset = PROTO_FIELD_OFFSET(HomeassistantServiceResponse, service)}}, + {5, 0, {.offset = PROTO_FIELD_OFFSET(HomeassistantServiceResponse, is_event)}}}; +const RepeatedFieldMetaV3 HomeassistantServiceResponse::REPEATED_FIELDS_V3[3] = { {2, - PROTO_FIELD_OFFSET(HomeassistantServiceResponse, data), - ProtoFieldType::TYPE_MESSAGE, - 1, - {.message = {&encode_repeated_message_field, - &size_repeated_message_field, - &decode_repeated_message_field}}}, + 10, + {.offset_low = static_cast(PROTO_FIELD_OFFSET(HomeassistantServiceResponse, data)), + .message_type_id = 2}}, {3, - PROTO_FIELD_OFFSET(HomeassistantServiceResponse, data_template), - ProtoFieldType::TYPE_MESSAGE, - 1, - {.message = {&encode_repeated_message_field, - &size_repeated_message_field, - &decode_repeated_message_field}}}, + 10, + {.offset_low = static_cast(PROTO_FIELD_OFFSET(HomeassistantServiceResponse, data_template)), + .message_type_id = 2}}, {4, - PROTO_FIELD_OFFSET(HomeassistantServiceResponse, variables), - ProtoFieldType::TYPE_MESSAGE, - 1, - {.message = {&encode_repeated_message_field, - &size_repeated_message_field, - &decode_repeated_message_field}}}}; -const FieldMetaV2 SubscribeHomeAssistantStateResponse::FIELDS_V2[3] = { - {1, PROTO_FIELD_OFFSET(SubscribeHomeAssistantStateResponse, entity_id), ProtoFieldType::TYPE_STRING, false, 1, {}}, - {2, PROTO_FIELD_OFFSET(SubscribeHomeAssistantStateResponse, attribute), ProtoFieldType::TYPE_STRING, false, 1, {}}, - {3, PROTO_FIELD_OFFSET(SubscribeHomeAssistantStateResponse, once), ProtoFieldType::TYPE_BOOL, false, 1, {}}}; -const FieldMetaV2 HomeAssistantStateResponse::FIELDS_V2[3] = { - {1, PROTO_FIELD_OFFSET(HomeAssistantStateResponse, entity_id), ProtoFieldType::TYPE_STRING, false, 1, {}}, - {2, PROTO_FIELD_OFFSET(HomeAssistantStateResponse, state), ProtoFieldType::TYPE_STRING, false, 1, {}}, - {3, PROTO_FIELD_OFFSET(HomeAssistantStateResponse, attribute), ProtoFieldType::TYPE_STRING, false, 1, {}}}; -const FieldMetaV2 GetTimeResponse::FIELDS_V2[1] = { - {1, PROTO_FIELD_OFFSET(GetTimeResponse, epoch_seconds), ProtoFieldType::TYPE_FIXED32, false, 1, {}}}; -const FieldMetaV2 ListEntitiesServicesArgument::FIELDS_V2[2] = { - {1, PROTO_FIELD_OFFSET(ListEntitiesServicesArgument, name), ProtoFieldType::TYPE_STRING, false, 1, {}}, - {2, PROTO_FIELD_OFFSET(ListEntitiesServicesArgument, type), ProtoFieldType::TYPE_ENUM, false, 1, {}}}; -const FieldMetaV2 ListEntitiesServicesResponse::FIELDS_V2[2] = { - {1, PROTO_FIELD_OFFSET(ListEntitiesServicesResponse, name), ProtoFieldType::TYPE_STRING, false, 1, {}}, - {2, PROTO_FIELD_OFFSET(ListEntitiesServicesResponse, key), ProtoFieldType::TYPE_FIXED32, false, 1, {}}}; -const RepeatedFieldMetaV2 ListEntitiesServicesResponse::REPEATED_FIELDS_V2[1] = { + 10, + {.offset_low = static_cast(PROTO_FIELD_OFFSET(HomeassistantServiceResponse, variables)), + .message_type_id = 2}}}; +const FieldMetaV3 SubscribeHomeAssistantStateResponse::FIELDS_V3[3] = { + {1, 8, {.offset = PROTO_FIELD_OFFSET(SubscribeHomeAssistantStateResponse, entity_id)}}, + {2, 8, {.offset = PROTO_FIELD_OFFSET(SubscribeHomeAssistantStateResponse, attribute)}}, + {3, 0, {.offset = PROTO_FIELD_OFFSET(SubscribeHomeAssistantStateResponse, once)}}}; +const FieldMetaV3 HomeAssistantStateResponse::FIELDS_V3[3] = { + {1, 8, {.offset = PROTO_FIELD_OFFSET(HomeAssistantStateResponse, entity_id)}}, + {2, 8, {.offset = PROTO_FIELD_OFFSET(HomeAssistantStateResponse, state)}}, + {3, 8, {.offset = PROTO_FIELD_OFFSET(HomeAssistantStateResponse, attribute)}}}; +const FieldMetaV3 GetTimeResponse::FIELDS_V3[1] = { + {1, 12, {.offset = PROTO_FIELD_OFFSET(GetTimeResponse, epoch_seconds)}}}; +const FieldMetaV3 ListEntitiesServicesArgument::FIELDS_V3[2] = { + {1, 8, {.offset = PROTO_FIELD_OFFSET(ListEntitiesServicesArgument, name)}}, + {2, 7, {.offset = PROTO_FIELD_OFFSET(ListEntitiesServicesArgument, type)}}}; +const FieldMetaV3 ListEntitiesServicesResponse::FIELDS_V3[2] = { + {1, 8, {.offset = PROTO_FIELD_OFFSET(ListEntitiesServicesResponse, name)}}, + {2, 12, {.offset = PROTO_FIELD_OFFSET(ListEntitiesServicesResponse, key)}}}; +const RepeatedFieldMetaV3 ListEntitiesServicesResponse::REPEATED_FIELDS_V3[1] = { {3, - PROTO_FIELD_OFFSET(ListEntitiesServicesResponse, args), - ProtoFieldType::TYPE_MESSAGE, - 1, - {.message = {&encode_repeated_message_field, - &size_repeated_message_field, - &decode_repeated_message_field}}}}; -const FieldMetaV2 ExecuteServiceArgument::FIELDS_V2[5] = { - {1, PROTO_FIELD_OFFSET(ExecuteServiceArgument, bool_), ProtoFieldType::TYPE_BOOL, false, 1, {}}, - {2, PROTO_FIELD_OFFSET(ExecuteServiceArgument, legacy_int), ProtoFieldType::TYPE_INT32, false, 1, {}}, - {3, PROTO_FIELD_OFFSET(ExecuteServiceArgument, float_), ProtoFieldType::TYPE_FLOAT, false, 1, {}}, - {4, PROTO_FIELD_OFFSET(ExecuteServiceArgument, string_), ProtoFieldType::TYPE_STRING, false, 1, {}}, - {5, PROTO_FIELD_OFFSET(ExecuteServiceArgument, int_), ProtoFieldType::TYPE_SINT32, false, 1, {}}}; -const RepeatedFieldMetaV2 ExecuteServiceArgument::REPEATED_FIELDS_V2[4] = { - {6, PROTO_FIELD_OFFSET(ExecuteServiceArgument, bool_array), ProtoFieldType::TYPE_BOOL, 1, {}}, - {7, PROTO_FIELD_OFFSET(ExecuteServiceArgument, int_array), ProtoFieldType::TYPE_SINT32, 1, {}}, - {8, PROTO_FIELD_OFFSET(ExecuteServiceArgument, float_array), ProtoFieldType::TYPE_FLOAT, 1, {}}, - {9, PROTO_FIELD_OFFSET(ExecuteServiceArgument, string_array), ProtoFieldType::TYPE_STRING, 1, {}}}; -const FieldMetaV2 ExecuteServiceRequest::FIELDS_V2[1] = { - {1, PROTO_FIELD_OFFSET(ExecuteServiceRequest, key), ProtoFieldType::TYPE_FIXED32, false, 1, {}}}; -const RepeatedFieldMetaV2 ExecuteServiceRequest::REPEATED_FIELDS_V2[1] = { + 10, + {.offset_low = static_cast(PROTO_FIELD_OFFSET(ListEntitiesServicesResponse, args)), + .message_type_id = 3}}}; +const FieldMetaV3 ExecuteServiceArgument::FIELDS_V3[5] = { + {1, 0, {.offset = PROTO_FIELD_OFFSET(ExecuteServiceArgument, bool_)}}, + {2, 1, {.offset = PROTO_FIELD_OFFSET(ExecuteServiceArgument, legacy_int)}}, + {3, 11, {.offset = PROTO_FIELD_OFFSET(ExecuteServiceArgument, float_)}}, + {4, 8, {.offset = PROTO_FIELD_OFFSET(ExecuteServiceArgument, string_)}}, + {5, 5, {.offset = PROTO_FIELD_OFFSET(ExecuteServiceArgument, int_)}}}; +const RepeatedFieldMetaV3 ExecuteServiceArgument::REPEATED_FIELDS_V3[4] = { + {6, 0, {.offset = PROTO_FIELD_OFFSET(ExecuteServiceArgument, bool_array)}}, + {7, 5, {.offset = PROTO_FIELD_OFFSET(ExecuteServiceArgument, int_array)}}, + {8, 11, {.offset = PROTO_FIELD_OFFSET(ExecuteServiceArgument, float_array)}}, + {9, 8, {.offset = PROTO_FIELD_OFFSET(ExecuteServiceArgument, string_array)}}}; +const FieldMetaV3 ExecuteServiceRequest::FIELDS_V3[1] = { + {1, 12, {.offset = PROTO_FIELD_OFFSET(ExecuteServiceRequest, key)}}}; +const RepeatedFieldMetaV3 ExecuteServiceRequest::REPEATED_FIELDS_V3[1] = { {2, - PROTO_FIELD_OFFSET(ExecuteServiceRequest, args), - ProtoFieldType::TYPE_MESSAGE, - 1, - {.message = {&encode_repeated_message_field, - &size_repeated_message_field, - &decode_repeated_message_field}}}}; + 10, + {.offset_low = static_cast(PROTO_FIELD_OFFSET(ExecuteServiceRequest, args)), .message_type_id = 4}}}; #ifdef USE_CAMERA -const FieldMetaV2 ListEntitiesCameraResponse::FIELDS_V2[8] = { - {1, PROTO_FIELD_OFFSET(ListEntitiesCameraResponse, object_id), ProtoFieldType::TYPE_STRING, false, 1, {}}, - {2, PROTO_FIELD_OFFSET(ListEntitiesCameraResponse, key), ProtoFieldType::TYPE_FIXED32, false, 1, {}}, - {3, PROTO_FIELD_OFFSET(ListEntitiesCameraResponse, name), ProtoFieldType::TYPE_STRING, false, 1, {}}, - {4, PROTO_FIELD_OFFSET(ListEntitiesCameraResponse, unique_id), ProtoFieldType::TYPE_STRING, false, 1, {}}, - {5, PROTO_FIELD_OFFSET(ListEntitiesCameraResponse, disabled_by_default), ProtoFieldType::TYPE_BOOL, false, 1, {}}, - {6, PROTO_FIELD_OFFSET(ListEntitiesCameraResponse, icon), ProtoFieldType::TYPE_STRING, false, 1, {}}, - {7, PROTO_FIELD_OFFSET(ListEntitiesCameraResponse, entity_category), ProtoFieldType::TYPE_ENUM, false, 1, {}}, - {8, PROTO_FIELD_OFFSET(ListEntitiesCameraResponse, device_id), ProtoFieldType::TYPE_UINT32, false, 1, {}}}; -const FieldMetaV2 CameraImageResponse::FIELDS_V2[3] = { - {1, PROTO_FIELD_OFFSET(CameraImageResponse, key), ProtoFieldType::TYPE_FIXED32, false, 1, {}}, - {2, PROTO_FIELD_OFFSET(CameraImageResponse, data), ProtoFieldType::TYPE_BYTES, false, 1, {}}, - {3, PROTO_FIELD_OFFSET(CameraImageResponse, done), ProtoFieldType::TYPE_BOOL, false, 1, {}}}; -const FieldMetaV2 CameraImageRequest::FIELDS_V2[2] = { - {1, PROTO_FIELD_OFFSET(CameraImageRequest, single), ProtoFieldType::TYPE_BOOL, false, 1, {}}, - {2, PROTO_FIELD_OFFSET(CameraImageRequest, stream), ProtoFieldType::TYPE_BOOL, false, 1, {}}}; +const FieldMetaV3 ListEntitiesCameraResponse::FIELDS_V3[8] = { + {1, 8, {.offset = PROTO_FIELD_OFFSET(ListEntitiesCameraResponse, object_id)}}, + {2, 12, {.offset = PROTO_FIELD_OFFSET(ListEntitiesCameraResponse, key)}}, + {3, 8, {.offset = PROTO_FIELD_OFFSET(ListEntitiesCameraResponse, name)}}, + {4, 8, {.offset = PROTO_FIELD_OFFSET(ListEntitiesCameraResponse, unique_id)}}, + {5, 0, {.offset = PROTO_FIELD_OFFSET(ListEntitiesCameraResponse, disabled_by_default)}}, + {6, 8, {.offset = PROTO_FIELD_OFFSET(ListEntitiesCameraResponse, icon)}}, + {7, 7, {.offset = PROTO_FIELD_OFFSET(ListEntitiesCameraResponse, entity_category)}}, + {8, 2, {.offset = PROTO_FIELD_OFFSET(ListEntitiesCameraResponse, device_id)}}}; +const FieldMetaV3 CameraImageResponse::FIELDS_V3[3] = { + {1, 12, {.offset = PROTO_FIELD_OFFSET(CameraImageResponse, key)}}, + {2, 9, {.offset = PROTO_FIELD_OFFSET(CameraImageResponse, data)}}, + {3, 0, {.offset = PROTO_FIELD_OFFSET(CameraImageResponse, done)}}}; +const FieldMetaV3 CameraImageRequest::FIELDS_V3[2] = { + {1, 0, {.offset = PROTO_FIELD_OFFSET(CameraImageRequest, single)}}, + {2, 0, {.offset = PROTO_FIELD_OFFSET(CameraImageRequest, stream)}}}; #endif #ifdef USE_CLIMATE -const FieldMetaV2 ListEntitiesClimateResponse::FIELDS_V2[20] = { - {1, PROTO_FIELD_OFFSET(ListEntitiesClimateResponse, object_id), ProtoFieldType::TYPE_STRING, false, 1, {}}, - {2, PROTO_FIELD_OFFSET(ListEntitiesClimateResponse, key), ProtoFieldType::TYPE_FIXED32, false, 1, {}}, - {3, PROTO_FIELD_OFFSET(ListEntitiesClimateResponse, name), ProtoFieldType::TYPE_STRING, false, 1, {}}, - {4, PROTO_FIELD_OFFSET(ListEntitiesClimateResponse, unique_id), ProtoFieldType::TYPE_STRING, false, 1, {}}, - {5, - PROTO_FIELD_OFFSET(ListEntitiesClimateResponse, supports_current_temperature), - ProtoFieldType::TYPE_BOOL, - false, - 1, - {}}, - {6, - PROTO_FIELD_OFFSET(ListEntitiesClimateResponse, supports_two_point_target_temperature), - ProtoFieldType::TYPE_BOOL, - false, - 1, - {}}, - {8, - PROTO_FIELD_OFFSET(ListEntitiesClimateResponse, visual_min_temperature), - ProtoFieldType::TYPE_FLOAT, - false, - 1, - {}}, - {9, - PROTO_FIELD_OFFSET(ListEntitiesClimateResponse, visual_max_temperature), - ProtoFieldType::TYPE_FLOAT, - false, - 1, - {}}, - {10, - PROTO_FIELD_OFFSET(ListEntitiesClimateResponse, visual_target_temperature_step), - ProtoFieldType::TYPE_FLOAT, - false, - 1, - {}}, - {11, - PROTO_FIELD_OFFSET(ListEntitiesClimateResponse, legacy_supports_away), - ProtoFieldType::TYPE_BOOL, - false, - 1, - {}}, - {12, PROTO_FIELD_OFFSET(ListEntitiesClimateResponse, supports_action), ProtoFieldType::TYPE_BOOL, false, 1, {}}, - {18, PROTO_FIELD_OFFSET(ListEntitiesClimateResponse, disabled_by_default), ProtoFieldType::TYPE_BOOL, false, 2, {}}, - {19, PROTO_FIELD_OFFSET(ListEntitiesClimateResponse, icon), ProtoFieldType::TYPE_STRING, false, 2, {}}, - {20, PROTO_FIELD_OFFSET(ListEntitiesClimateResponse, entity_category), ProtoFieldType::TYPE_ENUM, false, 2, {}}, - {21, - PROTO_FIELD_OFFSET(ListEntitiesClimateResponse, visual_current_temperature_step), - ProtoFieldType::TYPE_FLOAT, - false, - 2, - {}}, - {22, - PROTO_FIELD_OFFSET(ListEntitiesClimateResponse, supports_current_humidity), - ProtoFieldType::TYPE_BOOL, - false, - 2, - {}}, - {23, - PROTO_FIELD_OFFSET(ListEntitiesClimateResponse, supports_target_humidity), - ProtoFieldType::TYPE_BOOL, - false, - 2, - {}}, - {24, - PROTO_FIELD_OFFSET(ListEntitiesClimateResponse, visual_min_humidity), - ProtoFieldType::TYPE_FLOAT, - false, - 2, - {}}, - {25, - PROTO_FIELD_OFFSET(ListEntitiesClimateResponse, visual_max_humidity), - ProtoFieldType::TYPE_FLOAT, - false, - 2, - {}}, - {26, PROTO_FIELD_OFFSET(ListEntitiesClimateResponse, device_id), ProtoFieldType::TYPE_UINT32, false, 2, {}}}; -const RepeatedFieldMetaV2 ListEntitiesClimateResponse::REPEATED_FIELDS_V2[6] = { - {7, PROTO_FIELD_OFFSET(ListEntitiesClimateResponse, supported_modes), ProtoFieldType::TYPE_ENUM, 1, {}}, - {13, PROTO_FIELD_OFFSET(ListEntitiesClimateResponse, supported_fan_modes), ProtoFieldType::TYPE_ENUM, 1, {}}, - {14, PROTO_FIELD_OFFSET(ListEntitiesClimateResponse, supported_swing_modes), ProtoFieldType::TYPE_ENUM, 1, {}}, - {15, - PROTO_FIELD_OFFSET(ListEntitiesClimateResponse, supported_custom_fan_modes), - ProtoFieldType::TYPE_STRING, - 1, - {}}, - {16, PROTO_FIELD_OFFSET(ListEntitiesClimateResponse, supported_presets), ProtoFieldType::TYPE_ENUM, 2, {}}, - {17, - PROTO_FIELD_OFFSET(ListEntitiesClimateResponse, supported_custom_presets), - ProtoFieldType::TYPE_STRING, - 2, - {}}}; -const FieldMetaV2 ClimateStateResponse::FIELDS_V2[16] = { - {1, PROTO_FIELD_OFFSET(ClimateStateResponse, key), ProtoFieldType::TYPE_FIXED32, false, 1, {}}, - {2, PROTO_FIELD_OFFSET(ClimateStateResponse, mode), ProtoFieldType::TYPE_ENUM, false, 1, {}}, - {3, PROTO_FIELD_OFFSET(ClimateStateResponse, current_temperature), ProtoFieldType::TYPE_FLOAT, false, 1, {}}, - {4, PROTO_FIELD_OFFSET(ClimateStateResponse, target_temperature), ProtoFieldType::TYPE_FLOAT, false, 1, {}}, - {5, PROTO_FIELD_OFFSET(ClimateStateResponse, target_temperature_low), ProtoFieldType::TYPE_FLOAT, false, 1, {}}, - {6, PROTO_FIELD_OFFSET(ClimateStateResponse, target_temperature_high), ProtoFieldType::TYPE_FLOAT, false, 1, {}}, - {7, PROTO_FIELD_OFFSET(ClimateStateResponse, unused_legacy_away), ProtoFieldType::TYPE_BOOL, false, 1, {}}, - {8, PROTO_FIELD_OFFSET(ClimateStateResponse, action), ProtoFieldType::TYPE_ENUM, false, 1, {}}, - {9, PROTO_FIELD_OFFSET(ClimateStateResponse, fan_mode), ProtoFieldType::TYPE_ENUM, false, 1, {}}, - {10, PROTO_FIELD_OFFSET(ClimateStateResponse, swing_mode), ProtoFieldType::TYPE_ENUM, false, 1, {}}, - {11, PROTO_FIELD_OFFSET(ClimateStateResponse, custom_fan_mode), ProtoFieldType::TYPE_STRING, false, 1, {}}, - {12, PROTO_FIELD_OFFSET(ClimateStateResponse, preset), ProtoFieldType::TYPE_ENUM, false, 1, {}}, - {13, PROTO_FIELD_OFFSET(ClimateStateResponse, custom_preset), ProtoFieldType::TYPE_STRING, false, 1, {}}, - {14, PROTO_FIELD_OFFSET(ClimateStateResponse, current_humidity), ProtoFieldType::TYPE_FLOAT, false, 1, {}}, - {15, PROTO_FIELD_OFFSET(ClimateStateResponse, target_humidity), ProtoFieldType::TYPE_FLOAT, false, 1, {}}, - {16, PROTO_FIELD_OFFSET(ClimateStateResponse, device_id), ProtoFieldType::TYPE_UINT32, false, 2, {}}}; -const FieldMetaV2 ClimateCommandRequest::FIELDS_V2[23] = { - {1, PROTO_FIELD_OFFSET(ClimateCommandRequest, key), ProtoFieldType::TYPE_FIXED32, false, 1, {}}, - {2, PROTO_FIELD_OFFSET(ClimateCommandRequest, has_mode), ProtoFieldType::TYPE_BOOL, false, 1, {}}, - {3, PROTO_FIELD_OFFSET(ClimateCommandRequest, mode), ProtoFieldType::TYPE_ENUM, false, 1, {}}, - {4, PROTO_FIELD_OFFSET(ClimateCommandRequest, has_target_temperature), ProtoFieldType::TYPE_BOOL, false, 1, {}}, - {5, PROTO_FIELD_OFFSET(ClimateCommandRequest, target_temperature), ProtoFieldType::TYPE_FLOAT, false, 1, {}}, - {6, PROTO_FIELD_OFFSET(ClimateCommandRequest, has_target_temperature_low), ProtoFieldType::TYPE_BOOL, false, 1, {}}, - {7, PROTO_FIELD_OFFSET(ClimateCommandRequest, target_temperature_low), ProtoFieldType::TYPE_FLOAT, false, 1, {}}, - {8, - PROTO_FIELD_OFFSET(ClimateCommandRequest, has_target_temperature_high), - ProtoFieldType::TYPE_BOOL, - false, - 1, - {}}, - {9, PROTO_FIELD_OFFSET(ClimateCommandRequest, target_temperature_high), ProtoFieldType::TYPE_FLOAT, false, 1, {}}, - {10, PROTO_FIELD_OFFSET(ClimateCommandRequest, unused_has_legacy_away), ProtoFieldType::TYPE_BOOL, false, 1, {}}, - {11, PROTO_FIELD_OFFSET(ClimateCommandRequest, unused_legacy_away), ProtoFieldType::TYPE_BOOL, false, 1, {}}, - {12, PROTO_FIELD_OFFSET(ClimateCommandRequest, has_fan_mode), ProtoFieldType::TYPE_BOOL, false, 1, {}}, - {13, PROTO_FIELD_OFFSET(ClimateCommandRequest, fan_mode), ProtoFieldType::TYPE_ENUM, false, 1, {}}, - {14, PROTO_FIELD_OFFSET(ClimateCommandRequest, has_swing_mode), ProtoFieldType::TYPE_BOOL, false, 1, {}}, - {15, PROTO_FIELD_OFFSET(ClimateCommandRequest, swing_mode), ProtoFieldType::TYPE_ENUM, false, 1, {}}, - {16, PROTO_FIELD_OFFSET(ClimateCommandRequest, has_custom_fan_mode), ProtoFieldType::TYPE_BOOL, false, 2, {}}, - {17, PROTO_FIELD_OFFSET(ClimateCommandRequest, custom_fan_mode), ProtoFieldType::TYPE_STRING, false, 2, {}}, - {18, PROTO_FIELD_OFFSET(ClimateCommandRequest, has_preset), ProtoFieldType::TYPE_BOOL, false, 2, {}}, - {19, PROTO_FIELD_OFFSET(ClimateCommandRequest, preset), ProtoFieldType::TYPE_ENUM, false, 2, {}}, - {20, PROTO_FIELD_OFFSET(ClimateCommandRequest, has_custom_preset), ProtoFieldType::TYPE_BOOL, false, 2, {}}, - {21, PROTO_FIELD_OFFSET(ClimateCommandRequest, custom_preset), ProtoFieldType::TYPE_STRING, false, 2, {}}, - {22, PROTO_FIELD_OFFSET(ClimateCommandRequest, has_target_humidity), ProtoFieldType::TYPE_BOOL, false, 2, {}}, - {23, PROTO_FIELD_OFFSET(ClimateCommandRequest, target_humidity), ProtoFieldType::TYPE_FLOAT, false, 2, {}}}; +const FieldMetaV3 ListEntitiesClimateResponse::FIELDS_V3[20] = { + {1, 8, {.offset = PROTO_FIELD_OFFSET(ListEntitiesClimateResponse, object_id)}}, + {2, 12, {.offset = PROTO_FIELD_OFFSET(ListEntitiesClimateResponse, key)}}, + {3, 8, {.offset = PROTO_FIELD_OFFSET(ListEntitiesClimateResponse, name)}}, + {4, 8, {.offset = PROTO_FIELD_OFFSET(ListEntitiesClimateResponse, unique_id)}}, + {5, 0, {.offset = PROTO_FIELD_OFFSET(ListEntitiesClimateResponse, supports_current_temperature)}}, + {6, 0, {.offset = PROTO_FIELD_OFFSET(ListEntitiesClimateResponse, supports_two_point_target_temperature)}}, + {8, 11, {.offset = PROTO_FIELD_OFFSET(ListEntitiesClimateResponse, visual_min_temperature)}}, + {9, 11, {.offset = PROTO_FIELD_OFFSET(ListEntitiesClimateResponse, visual_max_temperature)}}, + {10, 11, {.offset = PROTO_FIELD_OFFSET(ListEntitiesClimateResponse, visual_target_temperature_step)}}, + {11, 0, {.offset = PROTO_FIELD_OFFSET(ListEntitiesClimateResponse, legacy_supports_away)}}, + {12, 0, {.offset = PROTO_FIELD_OFFSET(ListEntitiesClimateResponse, supports_action)}}, + {18, 32, {.offset = PROTO_FIELD_OFFSET(ListEntitiesClimateResponse, disabled_by_default)}}, + {19, 40, {.offset = PROTO_FIELD_OFFSET(ListEntitiesClimateResponse, icon)}}, + {20, 39, {.offset = PROTO_FIELD_OFFSET(ListEntitiesClimateResponse, entity_category)}}, + {21, 43, {.offset = PROTO_FIELD_OFFSET(ListEntitiesClimateResponse, visual_current_temperature_step)}}, + {22, 32, {.offset = PROTO_FIELD_OFFSET(ListEntitiesClimateResponse, supports_current_humidity)}}, + {23, 32, {.offset = PROTO_FIELD_OFFSET(ListEntitiesClimateResponse, supports_target_humidity)}}, + {24, 43, {.offset = PROTO_FIELD_OFFSET(ListEntitiesClimateResponse, visual_min_humidity)}}, + {25, 43, {.offset = PROTO_FIELD_OFFSET(ListEntitiesClimateResponse, visual_max_humidity)}}, + {26, 34, {.offset = PROTO_FIELD_OFFSET(ListEntitiesClimateResponse, device_id)}}}; +const RepeatedFieldMetaV3 ListEntitiesClimateResponse::REPEATED_FIELDS_V3[6] = { + {7, 7, {.offset = PROTO_FIELD_OFFSET(ListEntitiesClimateResponse, supported_modes)}}, + {13, 7, {.offset = PROTO_FIELD_OFFSET(ListEntitiesClimateResponse, supported_fan_modes)}}, + {14, 7, {.offset = PROTO_FIELD_OFFSET(ListEntitiesClimateResponse, supported_swing_modes)}}, + {15, 8, {.offset = PROTO_FIELD_OFFSET(ListEntitiesClimateResponse, supported_custom_fan_modes)}}, + {16, 39, {.offset = PROTO_FIELD_OFFSET(ListEntitiesClimateResponse, supported_presets)}}, + {17, 40, {.offset = PROTO_FIELD_OFFSET(ListEntitiesClimateResponse, supported_custom_presets)}}}; +const FieldMetaV3 ClimateStateResponse::FIELDS_V3[16] = { + {1, 12, {.offset = PROTO_FIELD_OFFSET(ClimateStateResponse, key)}}, + {2, 7, {.offset = PROTO_FIELD_OFFSET(ClimateStateResponse, mode)}}, + {3, 11, {.offset = PROTO_FIELD_OFFSET(ClimateStateResponse, current_temperature)}}, + {4, 11, {.offset = PROTO_FIELD_OFFSET(ClimateStateResponse, target_temperature)}}, + {5, 11, {.offset = PROTO_FIELD_OFFSET(ClimateStateResponse, target_temperature_low)}}, + {6, 11, {.offset = PROTO_FIELD_OFFSET(ClimateStateResponse, target_temperature_high)}}, + {7, 0, {.offset = PROTO_FIELD_OFFSET(ClimateStateResponse, unused_legacy_away)}}, + {8, 7, {.offset = PROTO_FIELD_OFFSET(ClimateStateResponse, action)}}, + {9, 7, {.offset = PROTO_FIELD_OFFSET(ClimateStateResponse, fan_mode)}}, + {10, 7, {.offset = PROTO_FIELD_OFFSET(ClimateStateResponse, swing_mode)}}, + {11, 8, {.offset = PROTO_FIELD_OFFSET(ClimateStateResponse, custom_fan_mode)}}, + {12, 7, {.offset = PROTO_FIELD_OFFSET(ClimateStateResponse, preset)}}, + {13, 8, {.offset = PROTO_FIELD_OFFSET(ClimateStateResponse, custom_preset)}}, + {14, 11, {.offset = PROTO_FIELD_OFFSET(ClimateStateResponse, current_humidity)}}, + {15, 11, {.offset = PROTO_FIELD_OFFSET(ClimateStateResponse, target_humidity)}}, + {16, 34, {.offset = PROTO_FIELD_OFFSET(ClimateStateResponse, device_id)}}}; +const FieldMetaV3 ClimateCommandRequest::FIELDS_V3[23] = { + {1, 12, {.offset = PROTO_FIELD_OFFSET(ClimateCommandRequest, key)}}, + {2, 0, {.offset = PROTO_FIELD_OFFSET(ClimateCommandRequest, has_mode)}}, + {3, 7, {.offset = PROTO_FIELD_OFFSET(ClimateCommandRequest, mode)}}, + {4, 0, {.offset = PROTO_FIELD_OFFSET(ClimateCommandRequest, has_target_temperature)}}, + {5, 11, {.offset = PROTO_FIELD_OFFSET(ClimateCommandRequest, target_temperature)}}, + {6, 0, {.offset = PROTO_FIELD_OFFSET(ClimateCommandRequest, has_target_temperature_low)}}, + {7, 11, {.offset = PROTO_FIELD_OFFSET(ClimateCommandRequest, target_temperature_low)}}, + {8, 0, {.offset = PROTO_FIELD_OFFSET(ClimateCommandRequest, has_target_temperature_high)}}, + {9, 11, {.offset = PROTO_FIELD_OFFSET(ClimateCommandRequest, target_temperature_high)}}, + {10, 0, {.offset = PROTO_FIELD_OFFSET(ClimateCommandRequest, unused_has_legacy_away)}}, + {11, 0, {.offset = PROTO_FIELD_OFFSET(ClimateCommandRequest, unused_legacy_away)}}, + {12, 0, {.offset = PROTO_FIELD_OFFSET(ClimateCommandRequest, has_fan_mode)}}, + {13, 7, {.offset = PROTO_FIELD_OFFSET(ClimateCommandRequest, fan_mode)}}, + {14, 0, {.offset = PROTO_FIELD_OFFSET(ClimateCommandRequest, has_swing_mode)}}, + {15, 7, {.offset = PROTO_FIELD_OFFSET(ClimateCommandRequest, swing_mode)}}, + {16, 32, {.offset = PROTO_FIELD_OFFSET(ClimateCommandRequest, has_custom_fan_mode)}}, + {17, 40, {.offset = PROTO_FIELD_OFFSET(ClimateCommandRequest, custom_fan_mode)}}, + {18, 32, {.offset = PROTO_FIELD_OFFSET(ClimateCommandRequest, has_preset)}}, + {19, 39, {.offset = PROTO_FIELD_OFFSET(ClimateCommandRequest, preset)}}, + {20, 32, {.offset = PROTO_FIELD_OFFSET(ClimateCommandRequest, has_custom_preset)}}, + {21, 40, {.offset = PROTO_FIELD_OFFSET(ClimateCommandRequest, custom_preset)}}, + {22, 32, {.offset = PROTO_FIELD_OFFSET(ClimateCommandRequest, has_target_humidity)}}, + {23, 43, {.offset = PROTO_FIELD_OFFSET(ClimateCommandRequest, target_humidity)}}}; #endif #ifdef USE_NUMBER -const FieldMetaV2 ListEntitiesNumberResponse::FIELDS_V2[14] = { - {1, PROTO_FIELD_OFFSET(ListEntitiesNumberResponse, object_id), ProtoFieldType::TYPE_STRING, false, 1, {}}, - {2, PROTO_FIELD_OFFSET(ListEntitiesNumberResponse, key), ProtoFieldType::TYPE_FIXED32, false, 1, {}}, - {3, PROTO_FIELD_OFFSET(ListEntitiesNumberResponse, name), ProtoFieldType::TYPE_STRING, false, 1, {}}, - {4, PROTO_FIELD_OFFSET(ListEntitiesNumberResponse, unique_id), ProtoFieldType::TYPE_STRING, false, 1, {}}, - {5, PROTO_FIELD_OFFSET(ListEntitiesNumberResponse, icon), ProtoFieldType::TYPE_STRING, false, 1, {}}, - {6, PROTO_FIELD_OFFSET(ListEntitiesNumberResponse, min_value), ProtoFieldType::TYPE_FLOAT, false, 1, {}}, - {7, PROTO_FIELD_OFFSET(ListEntitiesNumberResponse, max_value), ProtoFieldType::TYPE_FLOAT, false, 1, {}}, - {8, PROTO_FIELD_OFFSET(ListEntitiesNumberResponse, step), ProtoFieldType::TYPE_FLOAT, false, 1, {}}, - {9, PROTO_FIELD_OFFSET(ListEntitiesNumberResponse, disabled_by_default), ProtoFieldType::TYPE_BOOL, false, 1, {}}, - {10, PROTO_FIELD_OFFSET(ListEntitiesNumberResponse, entity_category), ProtoFieldType::TYPE_ENUM, false, 1, {}}, - {11, - PROTO_FIELD_OFFSET(ListEntitiesNumberResponse, unit_of_measurement), - ProtoFieldType::TYPE_STRING, - false, - 1, - {}}, - {12, PROTO_FIELD_OFFSET(ListEntitiesNumberResponse, mode), ProtoFieldType::TYPE_ENUM, false, 1, {}}, - {13, PROTO_FIELD_OFFSET(ListEntitiesNumberResponse, device_class), ProtoFieldType::TYPE_STRING, false, 1, {}}, - {14, PROTO_FIELD_OFFSET(ListEntitiesNumberResponse, device_id), ProtoFieldType::TYPE_UINT32, false, 1, {}}}; -const FieldMetaV2 NumberStateResponse::FIELDS_V2[4] = { - {1, PROTO_FIELD_OFFSET(NumberStateResponse, key), ProtoFieldType::TYPE_FIXED32, false, 1, {}}, - {2, PROTO_FIELD_OFFSET(NumberStateResponse, state), ProtoFieldType::TYPE_FLOAT, false, 1, {}}, - {3, PROTO_FIELD_OFFSET(NumberStateResponse, missing_state), ProtoFieldType::TYPE_BOOL, false, 1, {}}, - {4, PROTO_FIELD_OFFSET(NumberStateResponse, device_id), ProtoFieldType::TYPE_UINT32, false, 1, {}}}; -const FieldMetaV2 NumberCommandRequest::FIELDS_V2[2] = { - {1, PROTO_FIELD_OFFSET(NumberCommandRequest, key), ProtoFieldType::TYPE_FIXED32, false, 1, {}}, - {2, PROTO_FIELD_OFFSET(NumberCommandRequest, state), ProtoFieldType::TYPE_FLOAT, false, 1, {}}}; +const FieldMetaV3 ListEntitiesNumberResponse::FIELDS_V3[14] = { + {1, 8, {.offset = PROTO_FIELD_OFFSET(ListEntitiesNumberResponse, object_id)}}, + {2, 12, {.offset = PROTO_FIELD_OFFSET(ListEntitiesNumberResponse, key)}}, + {3, 8, {.offset = PROTO_FIELD_OFFSET(ListEntitiesNumberResponse, name)}}, + {4, 8, {.offset = PROTO_FIELD_OFFSET(ListEntitiesNumberResponse, unique_id)}}, + {5, 8, {.offset = PROTO_FIELD_OFFSET(ListEntitiesNumberResponse, icon)}}, + {6, 11, {.offset = PROTO_FIELD_OFFSET(ListEntitiesNumberResponse, min_value)}}, + {7, 11, {.offset = PROTO_FIELD_OFFSET(ListEntitiesNumberResponse, max_value)}}, + {8, 11, {.offset = PROTO_FIELD_OFFSET(ListEntitiesNumberResponse, step)}}, + {9, 0, {.offset = PROTO_FIELD_OFFSET(ListEntitiesNumberResponse, disabled_by_default)}}, + {10, 7, {.offset = PROTO_FIELD_OFFSET(ListEntitiesNumberResponse, entity_category)}}, + {11, 8, {.offset = PROTO_FIELD_OFFSET(ListEntitiesNumberResponse, unit_of_measurement)}}, + {12, 7, {.offset = PROTO_FIELD_OFFSET(ListEntitiesNumberResponse, mode)}}, + {13, 8, {.offset = PROTO_FIELD_OFFSET(ListEntitiesNumberResponse, device_class)}}, + {14, 2, {.offset = PROTO_FIELD_OFFSET(ListEntitiesNumberResponse, device_id)}}}; +const FieldMetaV3 NumberStateResponse::FIELDS_V3[4] = { + {1, 12, {.offset = PROTO_FIELD_OFFSET(NumberStateResponse, key)}}, + {2, 11, {.offset = PROTO_FIELD_OFFSET(NumberStateResponse, state)}}, + {3, 0, {.offset = PROTO_FIELD_OFFSET(NumberStateResponse, missing_state)}}, + {4, 2, {.offset = PROTO_FIELD_OFFSET(NumberStateResponse, device_id)}}}; +const FieldMetaV3 NumberCommandRequest::FIELDS_V3[2] = { + {1, 12, {.offset = PROTO_FIELD_OFFSET(NumberCommandRequest, key)}}, + {2, 11, {.offset = PROTO_FIELD_OFFSET(NumberCommandRequest, state)}}}; #endif #ifdef USE_SELECT -const FieldMetaV2 ListEntitiesSelectResponse::FIELDS_V2[8] = { - {1, PROTO_FIELD_OFFSET(ListEntitiesSelectResponse, object_id), ProtoFieldType::TYPE_STRING, false, 1, {}}, - {2, PROTO_FIELD_OFFSET(ListEntitiesSelectResponse, key), ProtoFieldType::TYPE_FIXED32, false, 1, {}}, - {3, PROTO_FIELD_OFFSET(ListEntitiesSelectResponse, name), ProtoFieldType::TYPE_STRING, false, 1, {}}, - {4, PROTO_FIELD_OFFSET(ListEntitiesSelectResponse, unique_id), ProtoFieldType::TYPE_STRING, false, 1, {}}, - {5, PROTO_FIELD_OFFSET(ListEntitiesSelectResponse, icon), ProtoFieldType::TYPE_STRING, false, 1, {}}, - {7, PROTO_FIELD_OFFSET(ListEntitiesSelectResponse, disabled_by_default), ProtoFieldType::TYPE_BOOL, false, 1, {}}, - {8, PROTO_FIELD_OFFSET(ListEntitiesSelectResponse, entity_category), ProtoFieldType::TYPE_ENUM, false, 1, {}}, - {9, PROTO_FIELD_OFFSET(ListEntitiesSelectResponse, device_id), ProtoFieldType::TYPE_UINT32, false, 1, {}}}; -const RepeatedFieldMetaV2 ListEntitiesSelectResponse::REPEATED_FIELDS_V2[1] = { - {6, PROTO_FIELD_OFFSET(ListEntitiesSelectResponse, options), ProtoFieldType::TYPE_STRING, 1, {}}}; -const FieldMetaV2 SelectStateResponse::FIELDS_V2[4] = { - {1, PROTO_FIELD_OFFSET(SelectStateResponse, key), ProtoFieldType::TYPE_FIXED32, false, 1, {}}, - {2, PROTO_FIELD_OFFSET(SelectStateResponse, state), ProtoFieldType::TYPE_STRING, false, 1, {}}, - {3, PROTO_FIELD_OFFSET(SelectStateResponse, missing_state), ProtoFieldType::TYPE_BOOL, false, 1, {}}, - {4, PROTO_FIELD_OFFSET(SelectStateResponse, device_id), ProtoFieldType::TYPE_UINT32, false, 1, {}}}; -const FieldMetaV2 SelectCommandRequest::FIELDS_V2[2] = { - {1, PROTO_FIELD_OFFSET(SelectCommandRequest, key), ProtoFieldType::TYPE_FIXED32, false, 1, {}}, - {2, PROTO_FIELD_OFFSET(SelectCommandRequest, state), ProtoFieldType::TYPE_STRING, false, 1, {}}}; +const FieldMetaV3 ListEntitiesSelectResponse::FIELDS_V3[8] = { + {1, 8, {.offset = PROTO_FIELD_OFFSET(ListEntitiesSelectResponse, object_id)}}, + {2, 12, {.offset = PROTO_FIELD_OFFSET(ListEntitiesSelectResponse, key)}}, + {3, 8, {.offset = PROTO_FIELD_OFFSET(ListEntitiesSelectResponse, name)}}, + {4, 8, {.offset = PROTO_FIELD_OFFSET(ListEntitiesSelectResponse, unique_id)}}, + {5, 8, {.offset = PROTO_FIELD_OFFSET(ListEntitiesSelectResponse, icon)}}, + {7, 0, {.offset = PROTO_FIELD_OFFSET(ListEntitiesSelectResponse, disabled_by_default)}}, + {8, 7, {.offset = PROTO_FIELD_OFFSET(ListEntitiesSelectResponse, entity_category)}}, + {9, 2, {.offset = PROTO_FIELD_OFFSET(ListEntitiesSelectResponse, device_id)}}}; +const RepeatedFieldMetaV3 ListEntitiesSelectResponse::REPEATED_FIELDS_V3[1] = { + {6, 8, {.offset = PROTO_FIELD_OFFSET(ListEntitiesSelectResponse, options)}}}; +const FieldMetaV3 SelectStateResponse::FIELDS_V3[4] = { + {1, 12, {.offset = PROTO_FIELD_OFFSET(SelectStateResponse, key)}}, + {2, 8, {.offset = PROTO_FIELD_OFFSET(SelectStateResponse, state)}}, + {3, 0, {.offset = PROTO_FIELD_OFFSET(SelectStateResponse, missing_state)}}, + {4, 2, {.offset = PROTO_FIELD_OFFSET(SelectStateResponse, device_id)}}}; +const FieldMetaV3 SelectCommandRequest::FIELDS_V3[2] = { + {1, 12, {.offset = PROTO_FIELD_OFFSET(SelectCommandRequest, key)}}, + {2, 8, {.offset = PROTO_FIELD_OFFSET(SelectCommandRequest, state)}}}; #endif #ifdef USE_SIREN -const FieldMetaV2 ListEntitiesSirenResponse::FIELDS_V2[10] = { - {1, PROTO_FIELD_OFFSET(ListEntitiesSirenResponse, object_id), ProtoFieldType::TYPE_STRING, false, 1, {}}, - {2, PROTO_FIELD_OFFSET(ListEntitiesSirenResponse, key), ProtoFieldType::TYPE_FIXED32, false, 1, {}}, - {3, PROTO_FIELD_OFFSET(ListEntitiesSirenResponse, name), ProtoFieldType::TYPE_STRING, false, 1, {}}, - {4, PROTO_FIELD_OFFSET(ListEntitiesSirenResponse, unique_id), ProtoFieldType::TYPE_STRING, false, 1, {}}, - {5, PROTO_FIELD_OFFSET(ListEntitiesSirenResponse, icon), ProtoFieldType::TYPE_STRING, false, 1, {}}, - {6, PROTO_FIELD_OFFSET(ListEntitiesSirenResponse, disabled_by_default), ProtoFieldType::TYPE_BOOL, false, 1, {}}, - {8, PROTO_FIELD_OFFSET(ListEntitiesSirenResponse, supports_duration), ProtoFieldType::TYPE_BOOL, false, 1, {}}, - {9, PROTO_FIELD_OFFSET(ListEntitiesSirenResponse, supports_volume), ProtoFieldType::TYPE_BOOL, false, 1, {}}, - {10, PROTO_FIELD_OFFSET(ListEntitiesSirenResponse, entity_category), ProtoFieldType::TYPE_ENUM, false, 1, {}}, - {11, PROTO_FIELD_OFFSET(ListEntitiesSirenResponse, device_id), ProtoFieldType::TYPE_UINT32, false, 1, {}}}; -const RepeatedFieldMetaV2 ListEntitiesSirenResponse::REPEATED_FIELDS_V2[1] = { - {7, PROTO_FIELD_OFFSET(ListEntitiesSirenResponse, tones), ProtoFieldType::TYPE_STRING, 1, {}}}; -const FieldMetaV2 SirenStateResponse::FIELDS_V2[3] = { - {1, PROTO_FIELD_OFFSET(SirenStateResponse, key), ProtoFieldType::TYPE_FIXED32, false, 1, {}}, - {2, PROTO_FIELD_OFFSET(SirenStateResponse, state), ProtoFieldType::TYPE_BOOL, false, 1, {}}, - {3, PROTO_FIELD_OFFSET(SirenStateResponse, device_id), ProtoFieldType::TYPE_UINT32, false, 1, {}}}; -const FieldMetaV2 SirenCommandRequest::FIELDS_V2[9] = { - {1, PROTO_FIELD_OFFSET(SirenCommandRequest, key), ProtoFieldType::TYPE_FIXED32, false, 1, {}}, - {2, PROTO_FIELD_OFFSET(SirenCommandRequest, has_state), ProtoFieldType::TYPE_BOOL, false, 1, {}}, - {3, PROTO_FIELD_OFFSET(SirenCommandRequest, state), ProtoFieldType::TYPE_BOOL, false, 1, {}}, - {4, PROTO_FIELD_OFFSET(SirenCommandRequest, has_tone), ProtoFieldType::TYPE_BOOL, false, 1, {}}, - {5, PROTO_FIELD_OFFSET(SirenCommandRequest, tone), ProtoFieldType::TYPE_STRING, false, 1, {}}, - {6, PROTO_FIELD_OFFSET(SirenCommandRequest, has_duration), ProtoFieldType::TYPE_BOOL, false, 1, {}}, - {7, PROTO_FIELD_OFFSET(SirenCommandRequest, duration), ProtoFieldType::TYPE_UINT32, false, 1, {}}, - {8, PROTO_FIELD_OFFSET(SirenCommandRequest, has_volume), ProtoFieldType::TYPE_BOOL, false, 1, {}}, - {9, PROTO_FIELD_OFFSET(SirenCommandRequest, volume), ProtoFieldType::TYPE_FLOAT, false, 1, {}}}; +const FieldMetaV3 ListEntitiesSirenResponse::FIELDS_V3[10] = { + {1, 8, {.offset = PROTO_FIELD_OFFSET(ListEntitiesSirenResponse, object_id)}}, + {2, 12, {.offset = PROTO_FIELD_OFFSET(ListEntitiesSirenResponse, key)}}, + {3, 8, {.offset = PROTO_FIELD_OFFSET(ListEntitiesSirenResponse, name)}}, + {4, 8, {.offset = PROTO_FIELD_OFFSET(ListEntitiesSirenResponse, unique_id)}}, + {5, 8, {.offset = PROTO_FIELD_OFFSET(ListEntitiesSirenResponse, icon)}}, + {6, 0, {.offset = PROTO_FIELD_OFFSET(ListEntitiesSirenResponse, disabled_by_default)}}, + {8, 0, {.offset = PROTO_FIELD_OFFSET(ListEntitiesSirenResponse, supports_duration)}}, + {9, 0, {.offset = PROTO_FIELD_OFFSET(ListEntitiesSirenResponse, supports_volume)}}, + {10, 7, {.offset = PROTO_FIELD_OFFSET(ListEntitiesSirenResponse, entity_category)}}, + {11, 2, {.offset = PROTO_FIELD_OFFSET(ListEntitiesSirenResponse, device_id)}}}; +const RepeatedFieldMetaV3 ListEntitiesSirenResponse::REPEATED_FIELDS_V3[1] = { + {7, 8, {.offset = PROTO_FIELD_OFFSET(ListEntitiesSirenResponse, tones)}}}; +const FieldMetaV3 SirenStateResponse::FIELDS_V3[3] = { + {1, 12, {.offset = PROTO_FIELD_OFFSET(SirenStateResponse, key)}}, + {2, 0, {.offset = PROTO_FIELD_OFFSET(SirenStateResponse, state)}}, + {3, 2, {.offset = PROTO_FIELD_OFFSET(SirenStateResponse, device_id)}}}; +const FieldMetaV3 SirenCommandRequest::FIELDS_V3[9] = { + {1, 12, {.offset = PROTO_FIELD_OFFSET(SirenCommandRequest, key)}}, + {2, 0, {.offset = PROTO_FIELD_OFFSET(SirenCommandRequest, has_state)}}, + {3, 0, {.offset = PROTO_FIELD_OFFSET(SirenCommandRequest, state)}}, + {4, 0, {.offset = PROTO_FIELD_OFFSET(SirenCommandRequest, has_tone)}}, + {5, 8, {.offset = PROTO_FIELD_OFFSET(SirenCommandRequest, tone)}}, + {6, 0, {.offset = PROTO_FIELD_OFFSET(SirenCommandRequest, has_duration)}}, + {7, 2, {.offset = PROTO_FIELD_OFFSET(SirenCommandRequest, duration)}}, + {8, 0, {.offset = PROTO_FIELD_OFFSET(SirenCommandRequest, has_volume)}}, + {9, 11, {.offset = PROTO_FIELD_OFFSET(SirenCommandRequest, volume)}}}; #endif #ifdef USE_LOCK -const FieldMetaV2 ListEntitiesLockResponse::FIELDS_V2[12] = { - {1, PROTO_FIELD_OFFSET(ListEntitiesLockResponse, object_id), ProtoFieldType::TYPE_STRING, false, 1, {}}, - {2, PROTO_FIELD_OFFSET(ListEntitiesLockResponse, key), ProtoFieldType::TYPE_FIXED32, false, 1, {}}, - {3, PROTO_FIELD_OFFSET(ListEntitiesLockResponse, name), ProtoFieldType::TYPE_STRING, false, 1, {}}, - {4, PROTO_FIELD_OFFSET(ListEntitiesLockResponse, unique_id), ProtoFieldType::TYPE_STRING, false, 1, {}}, - {5, PROTO_FIELD_OFFSET(ListEntitiesLockResponse, icon), ProtoFieldType::TYPE_STRING, false, 1, {}}, - {6, PROTO_FIELD_OFFSET(ListEntitiesLockResponse, disabled_by_default), ProtoFieldType::TYPE_BOOL, false, 1, {}}, - {7, PROTO_FIELD_OFFSET(ListEntitiesLockResponse, entity_category), ProtoFieldType::TYPE_ENUM, false, 1, {}}, - {8, PROTO_FIELD_OFFSET(ListEntitiesLockResponse, assumed_state), ProtoFieldType::TYPE_BOOL, false, 1, {}}, - {9, PROTO_FIELD_OFFSET(ListEntitiesLockResponse, supports_open), ProtoFieldType::TYPE_BOOL, false, 1, {}}, - {10, PROTO_FIELD_OFFSET(ListEntitiesLockResponse, requires_code), ProtoFieldType::TYPE_BOOL, false, 1, {}}, - {11, PROTO_FIELD_OFFSET(ListEntitiesLockResponse, code_format), ProtoFieldType::TYPE_STRING, false, 1, {}}, - {12, PROTO_FIELD_OFFSET(ListEntitiesLockResponse, device_id), ProtoFieldType::TYPE_UINT32, false, 1, {}}}; -const FieldMetaV2 LockStateResponse::FIELDS_V2[3] = { - {1, PROTO_FIELD_OFFSET(LockStateResponse, key), ProtoFieldType::TYPE_FIXED32, false, 1, {}}, - {2, PROTO_FIELD_OFFSET(LockStateResponse, state), ProtoFieldType::TYPE_ENUM, false, 1, {}}, - {3, PROTO_FIELD_OFFSET(LockStateResponse, device_id), ProtoFieldType::TYPE_UINT32, false, 1, {}}}; -const FieldMetaV2 LockCommandRequest::FIELDS_V2[4] = { - {1, PROTO_FIELD_OFFSET(LockCommandRequest, key), ProtoFieldType::TYPE_FIXED32, false, 1, {}}, - {2, PROTO_FIELD_OFFSET(LockCommandRequest, command), ProtoFieldType::TYPE_ENUM, false, 1, {}}, - {3, PROTO_FIELD_OFFSET(LockCommandRequest, has_code), ProtoFieldType::TYPE_BOOL, false, 1, {}}, - {4, PROTO_FIELD_OFFSET(LockCommandRequest, code), ProtoFieldType::TYPE_STRING, false, 1, {}}}; +const FieldMetaV3 ListEntitiesLockResponse::FIELDS_V3[12] = { + {1, 8, {.offset = PROTO_FIELD_OFFSET(ListEntitiesLockResponse, object_id)}}, + {2, 12, {.offset = PROTO_FIELD_OFFSET(ListEntitiesLockResponse, key)}}, + {3, 8, {.offset = PROTO_FIELD_OFFSET(ListEntitiesLockResponse, name)}}, + {4, 8, {.offset = PROTO_FIELD_OFFSET(ListEntitiesLockResponse, unique_id)}}, + {5, 8, {.offset = PROTO_FIELD_OFFSET(ListEntitiesLockResponse, icon)}}, + {6, 0, {.offset = PROTO_FIELD_OFFSET(ListEntitiesLockResponse, disabled_by_default)}}, + {7, 7, {.offset = PROTO_FIELD_OFFSET(ListEntitiesLockResponse, entity_category)}}, + {8, 0, {.offset = PROTO_FIELD_OFFSET(ListEntitiesLockResponse, assumed_state)}}, + {9, 0, {.offset = PROTO_FIELD_OFFSET(ListEntitiesLockResponse, supports_open)}}, + {10, 0, {.offset = PROTO_FIELD_OFFSET(ListEntitiesLockResponse, requires_code)}}, + {11, 8, {.offset = PROTO_FIELD_OFFSET(ListEntitiesLockResponse, code_format)}}, + {12, 2, {.offset = PROTO_FIELD_OFFSET(ListEntitiesLockResponse, device_id)}}}; +const FieldMetaV3 LockStateResponse::FIELDS_V3[3] = { + {1, 12, {.offset = PROTO_FIELD_OFFSET(LockStateResponse, key)}}, + {2, 7, {.offset = PROTO_FIELD_OFFSET(LockStateResponse, state)}}, + {3, 2, {.offset = PROTO_FIELD_OFFSET(LockStateResponse, device_id)}}}; +const FieldMetaV3 LockCommandRequest::FIELDS_V3[4] = { + {1, 12, {.offset = PROTO_FIELD_OFFSET(LockCommandRequest, key)}}, + {2, 7, {.offset = PROTO_FIELD_OFFSET(LockCommandRequest, command)}}, + {3, 0, {.offset = PROTO_FIELD_OFFSET(LockCommandRequest, has_code)}}, + {4, 8, {.offset = PROTO_FIELD_OFFSET(LockCommandRequest, code)}}}; #endif #ifdef USE_BUTTON -const FieldMetaV2 ListEntitiesButtonResponse::FIELDS_V2[9] = { - {1, PROTO_FIELD_OFFSET(ListEntitiesButtonResponse, object_id), ProtoFieldType::TYPE_STRING, false, 1, {}}, - {2, PROTO_FIELD_OFFSET(ListEntitiesButtonResponse, key), ProtoFieldType::TYPE_FIXED32, false, 1, {}}, - {3, PROTO_FIELD_OFFSET(ListEntitiesButtonResponse, name), ProtoFieldType::TYPE_STRING, false, 1, {}}, - {4, PROTO_FIELD_OFFSET(ListEntitiesButtonResponse, unique_id), ProtoFieldType::TYPE_STRING, false, 1, {}}, - {5, PROTO_FIELD_OFFSET(ListEntitiesButtonResponse, icon), ProtoFieldType::TYPE_STRING, false, 1, {}}, - {6, PROTO_FIELD_OFFSET(ListEntitiesButtonResponse, disabled_by_default), ProtoFieldType::TYPE_BOOL, false, 1, {}}, - {7, PROTO_FIELD_OFFSET(ListEntitiesButtonResponse, entity_category), ProtoFieldType::TYPE_ENUM, false, 1, {}}, - {8, PROTO_FIELD_OFFSET(ListEntitiesButtonResponse, device_class), ProtoFieldType::TYPE_STRING, false, 1, {}}, - {9, PROTO_FIELD_OFFSET(ListEntitiesButtonResponse, device_id), ProtoFieldType::TYPE_UINT32, false, 1, {}}}; -const FieldMetaV2 ButtonCommandRequest::FIELDS_V2[1] = { - {1, PROTO_FIELD_OFFSET(ButtonCommandRequest, key), ProtoFieldType::TYPE_FIXED32, false, 1, {}}}; +const FieldMetaV3 ListEntitiesButtonResponse::FIELDS_V3[9] = { + {1, 8, {.offset = PROTO_FIELD_OFFSET(ListEntitiesButtonResponse, object_id)}}, + {2, 12, {.offset = PROTO_FIELD_OFFSET(ListEntitiesButtonResponse, key)}}, + {3, 8, {.offset = PROTO_FIELD_OFFSET(ListEntitiesButtonResponse, name)}}, + {4, 8, {.offset = PROTO_FIELD_OFFSET(ListEntitiesButtonResponse, unique_id)}}, + {5, 8, {.offset = PROTO_FIELD_OFFSET(ListEntitiesButtonResponse, icon)}}, + {6, 0, {.offset = PROTO_FIELD_OFFSET(ListEntitiesButtonResponse, disabled_by_default)}}, + {7, 7, {.offset = PROTO_FIELD_OFFSET(ListEntitiesButtonResponse, entity_category)}}, + {8, 8, {.offset = PROTO_FIELD_OFFSET(ListEntitiesButtonResponse, device_class)}}, + {9, 2, {.offset = PROTO_FIELD_OFFSET(ListEntitiesButtonResponse, device_id)}}}; +const FieldMetaV3 ButtonCommandRequest::FIELDS_V3[1] = { + {1, 12, {.offset = PROTO_FIELD_OFFSET(ButtonCommandRequest, key)}}}; #endif #ifdef USE_MEDIA_PLAYER -const FieldMetaV2 MediaPlayerSupportedFormat::FIELDS_V2[5] = { - {1, PROTO_FIELD_OFFSET(MediaPlayerSupportedFormat, format), ProtoFieldType::TYPE_STRING, false, 1, {}}, - {2, PROTO_FIELD_OFFSET(MediaPlayerSupportedFormat, sample_rate), ProtoFieldType::TYPE_UINT32, false, 1, {}}, - {3, PROTO_FIELD_OFFSET(MediaPlayerSupportedFormat, num_channels), ProtoFieldType::TYPE_UINT32, false, 1, {}}, - {4, PROTO_FIELD_OFFSET(MediaPlayerSupportedFormat, purpose), ProtoFieldType::TYPE_ENUM, false, 1, {}}, - {5, PROTO_FIELD_OFFSET(MediaPlayerSupportedFormat, sample_bytes), ProtoFieldType::TYPE_UINT32, false, 1, {}}}; -const FieldMetaV2 ListEntitiesMediaPlayerResponse::FIELDS_V2[9] = { - {1, PROTO_FIELD_OFFSET(ListEntitiesMediaPlayerResponse, object_id), ProtoFieldType::TYPE_STRING, false, 1, {}}, - {2, PROTO_FIELD_OFFSET(ListEntitiesMediaPlayerResponse, key), ProtoFieldType::TYPE_FIXED32, false, 1, {}}, - {3, PROTO_FIELD_OFFSET(ListEntitiesMediaPlayerResponse, name), ProtoFieldType::TYPE_STRING, false, 1, {}}, - {4, PROTO_FIELD_OFFSET(ListEntitiesMediaPlayerResponse, unique_id), ProtoFieldType::TYPE_STRING, false, 1, {}}, - {5, PROTO_FIELD_OFFSET(ListEntitiesMediaPlayerResponse, icon), ProtoFieldType::TYPE_STRING, false, 1, {}}, - {6, - PROTO_FIELD_OFFSET(ListEntitiesMediaPlayerResponse, disabled_by_default), - ProtoFieldType::TYPE_BOOL, - false, - 1, - {}}, - {7, PROTO_FIELD_OFFSET(ListEntitiesMediaPlayerResponse, entity_category), ProtoFieldType::TYPE_ENUM, false, 1, {}}, - {8, PROTO_FIELD_OFFSET(ListEntitiesMediaPlayerResponse, supports_pause), ProtoFieldType::TYPE_BOOL, false, 1, {}}, - {10, PROTO_FIELD_OFFSET(ListEntitiesMediaPlayerResponse, device_id), ProtoFieldType::TYPE_UINT32, false, 1, {}}}; -const RepeatedFieldMetaV2 ListEntitiesMediaPlayerResponse::REPEATED_FIELDS_V2[1] = { +const FieldMetaV3 MediaPlayerSupportedFormat::FIELDS_V3[5] = { + {1, 8, {.offset = PROTO_FIELD_OFFSET(MediaPlayerSupportedFormat, format)}}, + {2, 2, {.offset = PROTO_FIELD_OFFSET(MediaPlayerSupportedFormat, sample_rate)}}, + {3, 2, {.offset = PROTO_FIELD_OFFSET(MediaPlayerSupportedFormat, num_channels)}}, + {4, 7, {.offset = PROTO_FIELD_OFFSET(MediaPlayerSupportedFormat, purpose)}}, + {5, 2, {.offset = PROTO_FIELD_OFFSET(MediaPlayerSupportedFormat, sample_bytes)}}}; +const FieldMetaV3 ListEntitiesMediaPlayerResponse::FIELDS_V3[9] = { + {1, 8, {.offset = PROTO_FIELD_OFFSET(ListEntitiesMediaPlayerResponse, object_id)}}, + {2, 12, {.offset = PROTO_FIELD_OFFSET(ListEntitiesMediaPlayerResponse, key)}}, + {3, 8, {.offset = PROTO_FIELD_OFFSET(ListEntitiesMediaPlayerResponse, name)}}, + {4, 8, {.offset = PROTO_FIELD_OFFSET(ListEntitiesMediaPlayerResponse, unique_id)}}, + {5, 8, {.offset = PROTO_FIELD_OFFSET(ListEntitiesMediaPlayerResponse, icon)}}, + {6, 0, {.offset = PROTO_FIELD_OFFSET(ListEntitiesMediaPlayerResponse, disabled_by_default)}}, + {7, 7, {.offset = PROTO_FIELD_OFFSET(ListEntitiesMediaPlayerResponse, entity_category)}}, + {8, 0, {.offset = PROTO_FIELD_OFFSET(ListEntitiesMediaPlayerResponse, supports_pause)}}, + {10, 2, {.offset = PROTO_FIELD_OFFSET(ListEntitiesMediaPlayerResponse, device_id)}}}; +const RepeatedFieldMetaV3 ListEntitiesMediaPlayerResponse::REPEATED_FIELDS_V3[1] = { {9, - PROTO_FIELD_OFFSET(ListEntitiesMediaPlayerResponse, supported_formats), - ProtoFieldType::TYPE_MESSAGE, - 1, - {.message = {&encode_repeated_message_field, - &size_repeated_message_field, - &decode_repeated_message_field}}}}; -const FieldMetaV2 MediaPlayerStateResponse::FIELDS_V2[5] = { - {1, PROTO_FIELD_OFFSET(MediaPlayerStateResponse, key), ProtoFieldType::TYPE_FIXED32, false, 1, {}}, - {2, PROTO_FIELD_OFFSET(MediaPlayerStateResponse, state), ProtoFieldType::TYPE_ENUM, false, 1, {}}, - {3, PROTO_FIELD_OFFSET(MediaPlayerStateResponse, volume), ProtoFieldType::TYPE_FLOAT, false, 1, {}}, - {4, PROTO_FIELD_OFFSET(MediaPlayerStateResponse, muted), ProtoFieldType::TYPE_BOOL, false, 1, {}}, - {5, PROTO_FIELD_OFFSET(MediaPlayerStateResponse, device_id), ProtoFieldType::TYPE_UINT32, false, 1, {}}}; -const FieldMetaV2 MediaPlayerCommandRequest::FIELDS_V2[9] = { - {1, PROTO_FIELD_OFFSET(MediaPlayerCommandRequest, key), ProtoFieldType::TYPE_FIXED32, false, 1, {}}, - {2, PROTO_FIELD_OFFSET(MediaPlayerCommandRequest, has_command), ProtoFieldType::TYPE_BOOL, false, 1, {}}, - {3, PROTO_FIELD_OFFSET(MediaPlayerCommandRequest, command), ProtoFieldType::TYPE_ENUM, false, 1, {}}, - {4, PROTO_FIELD_OFFSET(MediaPlayerCommandRequest, has_volume), ProtoFieldType::TYPE_BOOL, false, 1, {}}, - {5, PROTO_FIELD_OFFSET(MediaPlayerCommandRequest, volume), ProtoFieldType::TYPE_FLOAT, false, 1, {}}, - {6, PROTO_FIELD_OFFSET(MediaPlayerCommandRequest, has_media_url), ProtoFieldType::TYPE_BOOL, false, 1, {}}, - {7, PROTO_FIELD_OFFSET(MediaPlayerCommandRequest, media_url), ProtoFieldType::TYPE_STRING, false, 1, {}}, - {8, PROTO_FIELD_OFFSET(MediaPlayerCommandRequest, has_announcement), ProtoFieldType::TYPE_BOOL, false, 1, {}}, - {9, PROTO_FIELD_OFFSET(MediaPlayerCommandRequest, announcement), ProtoFieldType::TYPE_BOOL, false, 1, {}}}; + 10, + {.offset_low = static_cast(PROTO_FIELD_OFFSET(ListEntitiesMediaPlayerResponse, supported_formats)), + .message_type_id = 5}}}; +const FieldMetaV3 MediaPlayerStateResponse::FIELDS_V3[5] = { + {1, 12, {.offset = PROTO_FIELD_OFFSET(MediaPlayerStateResponse, key)}}, + {2, 7, {.offset = PROTO_FIELD_OFFSET(MediaPlayerStateResponse, state)}}, + {3, 11, {.offset = PROTO_FIELD_OFFSET(MediaPlayerStateResponse, volume)}}, + {4, 0, {.offset = PROTO_FIELD_OFFSET(MediaPlayerStateResponse, muted)}}, + {5, 2, {.offset = PROTO_FIELD_OFFSET(MediaPlayerStateResponse, device_id)}}}; +const FieldMetaV3 MediaPlayerCommandRequest::FIELDS_V3[9] = { + {1, 12, {.offset = PROTO_FIELD_OFFSET(MediaPlayerCommandRequest, key)}}, + {2, 0, {.offset = PROTO_FIELD_OFFSET(MediaPlayerCommandRequest, has_command)}}, + {3, 7, {.offset = PROTO_FIELD_OFFSET(MediaPlayerCommandRequest, command)}}, + {4, 0, {.offset = PROTO_FIELD_OFFSET(MediaPlayerCommandRequest, has_volume)}}, + {5, 11, {.offset = PROTO_FIELD_OFFSET(MediaPlayerCommandRequest, volume)}}, + {6, 0, {.offset = PROTO_FIELD_OFFSET(MediaPlayerCommandRequest, has_media_url)}}, + {7, 8, {.offset = PROTO_FIELD_OFFSET(MediaPlayerCommandRequest, media_url)}}, + {8, 0, {.offset = PROTO_FIELD_OFFSET(MediaPlayerCommandRequest, has_announcement)}}, + {9, 0, {.offset = PROTO_FIELD_OFFSET(MediaPlayerCommandRequest, announcement)}}}; #endif #ifdef USE_BLUETOOTH_PROXY -const FieldMetaV2 SubscribeBluetoothLEAdvertisementsRequest::FIELDS_V2[1] = { - {1, - PROTO_FIELD_OFFSET(SubscribeBluetoothLEAdvertisementsRequest, flags), - ProtoFieldType::TYPE_UINT32, - false, - 1, - {}}}; -const FieldMetaV2 BluetoothServiceData::FIELDS_V2[2] = { - {1, PROTO_FIELD_OFFSET(BluetoothServiceData, uuid), ProtoFieldType::TYPE_STRING, false, 1, {}}, - {3, PROTO_FIELD_OFFSET(BluetoothServiceData, data), ProtoFieldType::TYPE_BYTES, false, 1, {}}}; -const RepeatedFieldMetaV2 BluetoothServiceData::REPEATED_FIELDS_V2[1] = { - {2, PROTO_FIELD_OFFSET(BluetoothServiceData, legacy_data), ProtoFieldType::TYPE_UINT32, 1, {}}}; -const FieldMetaV2 BluetoothLEAdvertisementResponse::FIELDS_V2[4] = { - {1, PROTO_FIELD_OFFSET(BluetoothLEAdvertisementResponse, address), ProtoFieldType::TYPE_UINT64, false, 1, {}}, - {2, PROTO_FIELD_OFFSET(BluetoothLEAdvertisementResponse, name), ProtoFieldType::TYPE_BYTES, false, 1, {}}, - {3, PROTO_FIELD_OFFSET(BluetoothLEAdvertisementResponse, rssi), ProtoFieldType::TYPE_SINT32, false, 1, {}}, - {7, PROTO_FIELD_OFFSET(BluetoothLEAdvertisementResponse, address_type), ProtoFieldType::TYPE_UINT32, false, 1, {}}}; -const RepeatedFieldMetaV2 BluetoothLEAdvertisementResponse::REPEATED_FIELDS_V2[3] = { - {4, PROTO_FIELD_OFFSET(BluetoothLEAdvertisementResponse, service_uuids), ProtoFieldType::TYPE_STRING, 1, {}}, +const FieldMetaV3 SubscribeBluetoothLEAdvertisementsRequest::FIELDS_V3[1] = { + {1, 2, {.offset = PROTO_FIELD_OFFSET(SubscribeBluetoothLEAdvertisementsRequest, flags)}}}; +const FieldMetaV3 BluetoothServiceData::FIELDS_V3[2] = { + {1, 8, {.offset = PROTO_FIELD_OFFSET(BluetoothServiceData, uuid)}}, + {3, 9, {.offset = PROTO_FIELD_OFFSET(BluetoothServiceData, data)}}}; +const RepeatedFieldMetaV3 BluetoothServiceData::REPEATED_FIELDS_V3[1] = { + {2, 2, {.offset = PROTO_FIELD_OFFSET(BluetoothServiceData, legacy_data)}}}; +const FieldMetaV3 BluetoothLEAdvertisementResponse::FIELDS_V3[4] = { + {1, 4, {.offset = PROTO_FIELD_OFFSET(BluetoothLEAdvertisementResponse, address)}}, + {2, 9, {.offset = PROTO_FIELD_OFFSET(BluetoothLEAdvertisementResponse, name)}}, + {3, 5, {.offset = PROTO_FIELD_OFFSET(BluetoothLEAdvertisementResponse, rssi)}}, + {7, 2, {.offset = PROTO_FIELD_OFFSET(BluetoothLEAdvertisementResponse, address_type)}}}; +const RepeatedFieldMetaV3 BluetoothLEAdvertisementResponse::REPEATED_FIELDS_V3[3] = { + {4, 8, {.offset = PROTO_FIELD_OFFSET(BluetoothLEAdvertisementResponse, service_uuids)}}, {5, - PROTO_FIELD_OFFSET(BluetoothLEAdvertisementResponse, service_data), - ProtoFieldType::TYPE_MESSAGE, - 1, - {.message = {&encode_repeated_message_field, - &size_repeated_message_field, - &decode_repeated_message_field}}}, + 10, + {.offset_low = static_cast(PROTO_FIELD_OFFSET(BluetoothLEAdvertisementResponse, service_data)), + .message_type_id = 6}}, {6, - PROTO_FIELD_OFFSET(BluetoothLEAdvertisementResponse, manufacturer_data), - ProtoFieldType::TYPE_MESSAGE, - 1, - {.message = {&encode_repeated_message_field, - &size_repeated_message_field, - &decode_repeated_message_field}}}}; -const FieldMetaV2 BluetoothLERawAdvertisement::FIELDS_V2[4] = { - {1, PROTO_FIELD_OFFSET(BluetoothLERawAdvertisement, address), ProtoFieldType::TYPE_UINT64, false, 1, {}}, - {2, PROTO_FIELD_OFFSET(BluetoothLERawAdvertisement, rssi), ProtoFieldType::TYPE_SINT32, false, 1, {}}, - {3, PROTO_FIELD_OFFSET(BluetoothLERawAdvertisement, address_type), ProtoFieldType::TYPE_UINT32, false, 1, {}}, - {4, PROTO_FIELD_OFFSET(BluetoothLERawAdvertisement, data), ProtoFieldType::TYPE_BYTES, false, 1, {}}}; -const RepeatedFieldMetaV2 BluetoothLERawAdvertisementsResponse::REPEATED_FIELDS_V2[1] = { + 10, + {.offset_low = static_cast(PROTO_FIELD_OFFSET(BluetoothLEAdvertisementResponse, manufacturer_data)), + .message_type_id = 6}}}; +const FieldMetaV3 BluetoothLERawAdvertisement::FIELDS_V3[4] = { + {1, 4, {.offset = PROTO_FIELD_OFFSET(BluetoothLERawAdvertisement, address)}}, + {2, 5, {.offset = PROTO_FIELD_OFFSET(BluetoothLERawAdvertisement, rssi)}}, + {3, 2, {.offset = PROTO_FIELD_OFFSET(BluetoothLERawAdvertisement, address_type)}}, + {4, 9, {.offset = PROTO_FIELD_OFFSET(BluetoothLERawAdvertisement, data)}}}; +const RepeatedFieldMetaV3 BluetoothLERawAdvertisementsResponse::REPEATED_FIELDS_V3[1] = { {1, - PROTO_FIELD_OFFSET(BluetoothLERawAdvertisementsResponse, advertisements), - ProtoFieldType::TYPE_MESSAGE, - 1, - {.message = {&encode_repeated_message_field, - &size_repeated_message_field, - &decode_repeated_message_field}}}}; -const FieldMetaV2 BluetoothDeviceRequest::FIELDS_V2[4] = { - {1, PROTO_FIELD_OFFSET(BluetoothDeviceRequest, address), ProtoFieldType::TYPE_UINT64, false, 1, {}}, - {2, PROTO_FIELD_OFFSET(BluetoothDeviceRequest, request_type), ProtoFieldType::TYPE_ENUM, false, 1, {}}, - {3, PROTO_FIELD_OFFSET(BluetoothDeviceRequest, has_address_type), ProtoFieldType::TYPE_BOOL, false, 1, {}}, - {4, PROTO_FIELD_OFFSET(BluetoothDeviceRequest, address_type), ProtoFieldType::TYPE_UINT32, false, 1, {}}}; -const FieldMetaV2 BluetoothDeviceConnectionResponse::FIELDS_V2[4] = { - {1, PROTO_FIELD_OFFSET(BluetoothDeviceConnectionResponse, address), ProtoFieldType::TYPE_UINT64, false, 1, {}}, - {2, PROTO_FIELD_OFFSET(BluetoothDeviceConnectionResponse, connected), ProtoFieldType::TYPE_BOOL, false, 1, {}}, - {3, PROTO_FIELD_OFFSET(BluetoothDeviceConnectionResponse, mtu), ProtoFieldType::TYPE_UINT32, false, 1, {}}, - {4, PROTO_FIELD_OFFSET(BluetoothDeviceConnectionResponse, error), ProtoFieldType::TYPE_INT32, false, 1, {}}}; -const FieldMetaV2 BluetoothGATTGetServicesRequest::FIELDS_V2[1] = { - {1, PROTO_FIELD_OFFSET(BluetoothGATTGetServicesRequest, address), ProtoFieldType::TYPE_UINT64, false, 1, {}}}; -const FieldMetaV2 BluetoothGATTDescriptor::FIELDS_V2[1] = { - {2, PROTO_FIELD_OFFSET(BluetoothGATTDescriptor, handle), ProtoFieldType::TYPE_UINT32, false, 1, {}}}; -const RepeatedFieldMetaV2 BluetoothGATTDescriptor::REPEATED_FIELDS_V2[1] = { - {1, PROTO_FIELD_OFFSET(BluetoothGATTDescriptor, uuid), ProtoFieldType::TYPE_UINT64, 1, {}}}; -const FieldMetaV2 BluetoothGATTCharacteristic::FIELDS_V2[2] = { - {2, PROTO_FIELD_OFFSET(BluetoothGATTCharacteristic, handle), ProtoFieldType::TYPE_UINT32, false, 1, {}}, - {3, PROTO_FIELD_OFFSET(BluetoothGATTCharacteristic, properties), ProtoFieldType::TYPE_UINT32, false, 1, {}}}; -const RepeatedFieldMetaV2 BluetoothGATTCharacteristic::REPEATED_FIELDS_V2[2] = { - {1, PROTO_FIELD_OFFSET(BluetoothGATTCharacteristic, uuid), ProtoFieldType::TYPE_UINT64, 1, {}}, + 10, + {.offset_low = static_cast(PROTO_FIELD_OFFSET(BluetoothLERawAdvertisementsResponse, advertisements)), + .message_type_id = 7}}}; +const FieldMetaV3 BluetoothDeviceRequest::FIELDS_V3[4] = { + {1, 4, {.offset = PROTO_FIELD_OFFSET(BluetoothDeviceRequest, address)}}, + {2, 7, {.offset = PROTO_FIELD_OFFSET(BluetoothDeviceRequest, request_type)}}, + {3, 0, {.offset = PROTO_FIELD_OFFSET(BluetoothDeviceRequest, has_address_type)}}, + {4, 2, {.offset = PROTO_FIELD_OFFSET(BluetoothDeviceRequest, address_type)}}}; +const FieldMetaV3 BluetoothDeviceConnectionResponse::FIELDS_V3[4] = { + {1, 4, {.offset = PROTO_FIELD_OFFSET(BluetoothDeviceConnectionResponse, address)}}, + {2, 0, {.offset = PROTO_FIELD_OFFSET(BluetoothDeviceConnectionResponse, connected)}}, + {3, 2, {.offset = PROTO_FIELD_OFFSET(BluetoothDeviceConnectionResponse, mtu)}}, + {4, 1, {.offset = PROTO_FIELD_OFFSET(BluetoothDeviceConnectionResponse, error)}}}; +const FieldMetaV3 BluetoothGATTGetServicesRequest::FIELDS_V3[1] = { + {1, 4, {.offset = PROTO_FIELD_OFFSET(BluetoothGATTGetServicesRequest, address)}}}; +const FieldMetaV3 BluetoothGATTDescriptor::FIELDS_V3[1] = { + {2, 2, {.offset = PROTO_FIELD_OFFSET(BluetoothGATTDescriptor, handle)}}}; +const RepeatedFieldMetaV3 BluetoothGATTDescriptor::REPEATED_FIELDS_V3[1] = { + {1, 4, {.offset = PROTO_FIELD_OFFSET(BluetoothGATTDescriptor, uuid)}}}; +const FieldMetaV3 BluetoothGATTCharacteristic::FIELDS_V3[2] = { + {2, 2, {.offset = PROTO_FIELD_OFFSET(BluetoothGATTCharacteristic, handle)}}, + {3, 2, {.offset = PROTO_FIELD_OFFSET(BluetoothGATTCharacteristic, properties)}}}; +const RepeatedFieldMetaV3 BluetoothGATTCharacteristic::REPEATED_FIELDS_V3[2] = { + {1, 4, {.offset = PROTO_FIELD_OFFSET(BluetoothGATTCharacteristic, uuid)}}, {4, - PROTO_FIELD_OFFSET(BluetoothGATTCharacteristic, descriptors), - ProtoFieldType::TYPE_MESSAGE, - 1, - {.message = {&encode_repeated_message_field, - &size_repeated_message_field, - &decode_repeated_message_field}}}}; -const FieldMetaV2 BluetoothGATTService::FIELDS_V2[1] = { - {2, PROTO_FIELD_OFFSET(BluetoothGATTService, handle), ProtoFieldType::TYPE_UINT32, false, 1, {}}}; -const RepeatedFieldMetaV2 BluetoothGATTService::REPEATED_FIELDS_V2[2] = { - {1, PROTO_FIELD_OFFSET(BluetoothGATTService, uuid), ProtoFieldType::TYPE_UINT64, 1, {}}, + 10, + {.offset_low = static_cast(PROTO_FIELD_OFFSET(BluetoothGATTCharacteristic, descriptors)), + .message_type_id = 8}}}; +const FieldMetaV3 BluetoothGATTService::FIELDS_V3[1] = { + {2, 2, {.offset = PROTO_FIELD_OFFSET(BluetoothGATTService, handle)}}}; +const RepeatedFieldMetaV3 BluetoothGATTService::REPEATED_FIELDS_V3[2] = { + {1, 4, {.offset = PROTO_FIELD_OFFSET(BluetoothGATTService, uuid)}}, {3, - PROTO_FIELD_OFFSET(BluetoothGATTService, characteristics), - ProtoFieldType::TYPE_MESSAGE, - 1, - {.message = {&encode_repeated_message_field, - &size_repeated_message_field, - &decode_repeated_message_field}}}}; -const FieldMetaV2 BluetoothGATTGetServicesResponse::FIELDS_V2[1] = { - {1, PROTO_FIELD_OFFSET(BluetoothGATTGetServicesResponse, address), ProtoFieldType::TYPE_UINT64, false, 1, {}}}; -const RepeatedFieldMetaV2 BluetoothGATTGetServicesResponse::REPEATED_FIELDS_V2[1] = { + 10, + {.offset_low = static_cast(PROTO_FIELD_OFFSET(BluetoothGATTService, characteristics)), + .message_type_id = 9}}}; +const FieldMetaV3 BluetoothGATTGetServicesResponse::FIELDS_V3[1] = { + {1, 4, {.offset = PROTO_FIELD_OFFSET(BluetoothGATTGetServicesResponse, address)}}}; +const RepeatedFieldMetaV3 BluetoothGATTGetServicesResponse::REPEATED_FIELDS_V3[1] = { {2, - PROTO_FIELD_OFFSET(BluetoothGATTGetServicesResponse, services), - ProtoFieldType::TYPE_MESSAGE, - 1, - {.message = {&encode_repeated_message_field, - &size_repeated_message_field, - &decode_repeated_message_field}}}}; -const FieldMetaV2 BluetoothGATTGetServicesDoneResponse::FIELDS_V2[1] = { - {1, PROTO_FIELD_OFFSET(BluetoothGATTGetServicesDoneResponse, address), ProtoFieldType::TYPE_UINT64, false, 1, {}}}; -const FieldMetaV2 BluetoothGATTReadRequest::FIELDS_V2[2] = { - {1, PROTO_FIELD_OFFSET(BluetoothGATTReadRequest, address), ProtoFieldType::TYPE_UINT64, false, 1, {}}, - {2, PROTO_FIELD_OFFSET(BluetoothGATTReadRequest, handle), ProtoFieldType::TYPE_UINT32, false, 1, {}}}; -const FieldMetaV2 BluetoothGATTReadResponse::FIELDS_V2[3] = { - {1, PROTO_FIELD_OFFSET(BluetoothGATTReadResponse, address), ProtoFieldType::TYPE_UINT64, false, 1, {}}, - {2, PROTO_FIELD_OFFSET(BluetoothGATTReadResponse, handle), ProtoFieldType::TYPE_UINT32, false, 1, {}}, - {3, PROTO_FIELD_OFFSET(BluetoothGATTReadResponse, data), ProtoFieldType::TYPE_BYTES, false, 1, {}}}; -const FieldMetaV2 BluetoothGATTWriteRequest::FIELDS_V2[4] = { - {1, PROTO_FIELD_OFFSET(BluetoothGATTWriteRequest, address), ProtoFieldType::TYPE_UINT64, false, 1, {}}, - {2, PROTO_FIELD_OFFSET(BluetoothGATTWriteRequest, handle), ProtoFieldType::TYPE_UINT32, false, 1, {}}, - {3, PROTO_FIELD_OFFSET(BluetoothGATTWriteRequest, response), ProtoFieldType::TYPE_BOOL, false, 1, {}}, - {4, PROTO_FIELD_OFFSET(BluetoothGATTWriteRequest, data), ProtoFieldType::TYPE_BYTES, false, 1, {}}}; -const FieldMetaV2 BluetoothGATTReadDescriptorRequest::FIELDS_V2[2] = { - {1, PROTO_FIELD_OFFSET(BluetoothGATTReadDescriptorRequest, address), ProtoFieldType::TYPE_UINT64, false, 1, {}}, - {2, PROTO_FIELD_OFFSET(BluetoothGATTReadDescriptorRequest, handle), ProtoFieldType::TYPE_UINT32, false, 1, {}}}; -const FieldMetaV2 BluetoothGATTWriteDescriptorRequest::FIELDS_V2[3] = { - {1, PROTO_FIELD_OFFSET(BluetoothGATTWriteDescriptorRequest, address), ProtoFieldType::TYPE_UINT64, false, 1, {}}, - {2, PROTO_FIELD_OFFSET(BluetoothGATTWriteDescriptorRequest, handle), ProtoFieldType::TYPE_UINT32, false, 1, {}}, - {3, PROTO_FIELD_OFFSET(BluetoothGATTWriteDescriptorRequest, data), ProtoFieldType::TYPE_BYTES, false, 1, {}}}; -const FieldMetaV2 BluetoothGATTNotifyRequest::FIELDS_V2[3] = { - {1, PROTO_FIELD_OFFSET(BluetoothGATTNotifyRequest, address), ProtoFieldType::TYPE_UINT64, false, 1, {}}, - {2, PROTO_FIELD_OFFSET(BluetoothGATTNotifyRequest, handle), ProtoFieldType::TYPE_UINT32, false, 1, {}}, - {3, PROTO_FIELD_OFFSET(BluetoothGATTNotifyRequest, enable), ProtoFieldType::TYPE_BOOL, false, 1, {}}}; -const FieldMetaV2 BluetoothGATTNotifyDataResponse::FIELDS_V2[3] = { - {1, PROTO_FIELD_OFFSET(BluetoothGATTNotifyDataResponse, address), ProtoFieldType::TYPE_UINT64, false, 1, {}}, - {2, PROTO_FIELD_OFFSET(BluetoothGATTNotifyDataResponse, handle), ProtoFieldType::TYPE_UINT32, false, 1, {}}, - {3, PROTO_FIELD_OFFSET(BluetoothGATTNotifyDataResponse, data), ProtoFieldType::TYPE_BYTES, false, 1, {}}}; -const FieldMetaV2 BluetoothConnectionsFreeResponse::FIELDS_V2[2] = { - {1, PROTO_FIELD_OFFSET(BluetoothConnectionsFreeResponse, free), ProtoFieldType::TYPE_UINT32, false, 1, {}}, - {2, PROTO_FIELD_OFFSET(BluetoothConnectionsFreeResponse, limit), ProtoFieldType::TYPE_UINT32, false, 1, {}}}; -const RepeatedFieldMetaV2 BluetoothConnectionsFreeResponse::REPEATED_FIELDS_V2[1] = { - {3, PROTO_FIELD_OFFSET(BluetoothConnectionsFreeResponse, allocated), ProtoFieldType::TYPE_UINT64, 1, {}}}; -const FieldMetaV2 BluetoothGATTErrorResponse::FIELDS_V2[3] = { - {1, PROTO_FIELD_OFFSET(BluetoothGATTErrorResponse, address), ProtoFieldType::TYPE_UINT64, false, 1, {}}, - {2, PROTO_FIELD_OFFSET(BluetoothGATTErrorResponse, handle), ProtoFieldType::TYPE_UINT32, false, 1, {}}, - {3, PROTO_FIELD_OFFSET(BluetoothGATTErrorResponse, error), ProtoFieldType::TYPE_INT32, false, 1, {}}}; -const FieldMetaV2 BluetoothGATTWriteResponse::FIELDS_V2[2] = { - {1, PROTO_FIELD_OFFSET(BluetoothGATTWriteResponse, address), ProtoFieldType::TYPE_UINT64, false, 1, {}}, - {2, PROTO_FIELD_OFFSET(BluetoothGATTWriteResponse, handle), ProtoFieldType::TYPE_UINT32, false, 1, {}}}; -const FieldMetaV2 BluetoothGATTNotifyResponse::FIELDS_V2[2] = { - {1, PROTO_FIELD_OFFSET(BluetoothGATTNotifyResponse, address), ProtoFieldType::TYPE_UINT64, false, 1, {}}, - {2, PROTO_FIELD_OFFSET(BluetoothGATTNotifyResponse, handle), ProtoFieldType::TYPE_UINT32, false, 1, {}}}; -const FieldMetaV2 BluetoothDevicePairingResponse::FIELDS_V2[3] = { - {1, PROTO_FIELD_OFFSET(BluetoothDevicePairingResponse, address), ProtoFieldType::TYPE_UINT64, false, 1, {}}, - {2, PROTO_FIELD_OFFSET(BluetoothDevicePairingResponse, paired), ProtoFieldType::TYPE_BOOL, false, 1, {}}, - {3, PROTO_FIELD_OFFSET(BluetoothDevicePairingResponse, error), ProtoFieldType::TYPE_INT32, false, 1, {}}}; -const FieldMetaV2 BluetoothDeviceUnpairingResponse::FIELDS_V2[3] = { - {1, PROTO_FIELD_OFFSET(BluetoothDeviceUnpairingResponse, address), ProtoFieldType::TYPE_UINT64, false, 1, {}}, - {2, PROTO_FIELD_OFFSET(BluetoothDeviceUnpairingResponse, success), ProtoFieldType::TYPE_BOOL, false, 1, {}}, - {3, PROTO_FIELD_OFFSET(BluetoothDeviceUnpairingResponse, error), ProtoFieldType::TYPE_INT32, false, 1, {}}}; -const FieldMetaV2 BluetoothDeviceClearCacheResponse::FIELDS_V2[3] = { - {1, PROTO_FIELD_OFFSET(BluetoothDeviceClearCacheResponse, address), ProtoFieldType::TYPE_UINT64, false, 1, {}}, - {2, PROTO_FIELD_OFFSET(BluetoothDeviceClearCacheResponse, success), ProtoFieldType::TYPE_BOOL, false, 1, {}}, - {3, PROTO_FIELD_OFFSET(BluetoothDeviceClearCacheResponse, error), ProtoFieldType::TYPE_INT32, false, 1, {}}}; -const FieldMetaV2 BluetoothScannerStateResponse::FIELDS_V2[2] = { - {1, PROTO_FIELD_OFFSET(BluetoothScannerStateResponse, state), ProtoFieldType::TYPE_ENUM, false, 1, {}}, - {2, PROTO_FIELD_OFFSET(BluetoothScannerStateResponse, mode), ProtoFieldType::TYPE_ENUM, false, 1, {}}}; -const FieldMetaV2 BluetoothScannerSetModeRequest::FIELDS_V2[1] = { - {1, PROTO_FIELD_OFFSET(BluetoothScannerSetModeRequest, mode), ProtoFieldType::TYPE_ENUM, false, 1, {}}}; + 10, + {.offset_low = static_cast(PROTO_FIELD_OFFSET(BluetoothGATTGetServicesResponse, services)), + .message_type_id = 10}}}; +const FieldMetaV3 BluetoothGATTGetServicesDoneResponse::FIELDS_V3[1] = { + {1, 4, {.offset = PROTO_FIELD_OFFSET(BluetoothGATTGetServicesDoneResponse, address)}}}; +const FieldMetaV3 BluetoothGATTReadRequest::FIELDS_V3[2] = { + {1, 4, {.offset = PROTO_FIELD_OFFSET(BluetoothGATTReadRequest, address)}}, + {2, 2, {.offset = PROTO_FIELD_OFFSET(BluetoothGATTReadRequest, handle)}}}; +const FieldMetaV3 BluetoothGATTReadResponse::FIELDS_V3[3] = { + {1, 4, {.offset = PROTO_FIELD_OFFSET(BluetoothGATTReadResponse, address)}}, + {2, 2, {.offset = PROTO_FIELD_OFFSET(BluetoothGATTReadResponse, handle)}}, + {3, 9, {.offset = PROTO_FIELD_OFFSET(BluetoothGATTReadResponse, data)}}}; +const FieldMetaV3 BluetoothGATTWriteRequest::FIELDS_V3[4] = { + {1, 4, {.offset = PROTO_FIELD_OFFSET(BluetoothGATTWriteRequest, address)}}, + {2, 2, {.offset = PROTO_FIELD_OFFSET(BluetoothGATTWriteRequest, handle)}}, + {3, 0, {.offset = PROTO_FIELD_OFFSET(BluetoothGATTWriteRequest, response)}}, + {4, 9, {.offset = PROTO_FIELD_OFFSET(BluetoothGATTWriteRequest, data)}}}; +const FieldMetaV3 BluetoothGATTReadDescriptorRequest::FIELDS_V3[2] = { + {1, 4, {.offset = PROTO_FIELD_OFFSET(BluetoothGATTReadDescriptorRequest, address)}}, + {2, 2, {.offset = PROTO_FIELD_OFFSET(BluetoothGATTReadDescriptorRequest, handle)}}}; +const FieldMetaV3 BluetoothGATTWriteDescriptorRequest::FIELDS_V3[3] = { + {1, 4, {.offset = PROTO_FIELD_OFFSET(BluetoothGATTWriteDescriptorRequest, address)}}, + {2, 2, {.offset = PROTO_FIELD_OFFSET(BluetoothGATTWriteDescriptorRequest, handle)}}, + {3, 9, {.offset = PROTO_FIELD_OFFSET(BluetoothGATTWriteDescriptorRequest, data)}}}; +const FieldMetaV3 BluetoothGATTNotifyRequest::FIELDS_V3[3] = { + {1, 4, {.offset = PROTO_FIELD_OFFSET(BluetoothGATTNotifyRequest, address)}}, + {2, 2, {.offset = PROTO_FIELD_OFFSET(BluetoothGATTNotifyRequest, handle)}}, + {3, 0, {.offset = PROTO_FIELD_OFFSET(BluetoothGATTNotifyRequest, enable)}}}; +const FieldMetaV3 BluetoothGATTNotifyDataResponse::FIELDS_V3[3] = { + {1, 4, {.offset = PROTO_FIELD_OFFSET(BluetoothGATTNotifyDataResponse, address)}}, + {2, 2, {.offset = PROTO_FIELD_OFFSET(BluetoothGATTNotifyDataResponse, handle)}}, + {3, 9, {.offset = PROTO_FIELD_OFFSET(BluetoothGATTNotifyDataResponse, data)}}}; +const FieldMetaV3 BluetoothConnectionsFreeResponse::FIELDS_V3[2] = { + {1, 2, {.offset = PROTO_FIELD_OFFSET(BluetoothConnectionsFreeResponse, free)}}, + {2, 2, {.offset = PROTO_FIELD_OFFSET(BluetoothConnectionsFreeResponse, limit)}}}; +const RepeatedFieldMetaV3 BluetoothConnectionsFreeResponse::REPEATED_FIELDS_V3[1] = { + {3, 4, {.offset = PROTO_FIELD_OFFSET(BluetoothConnectionsFreeResponse, allocated)}}}; +const FieldMetaV3 BluetoothGATTErrorResponse::FIELDS_V3[3] = { + {1, 4, {.offset = PROTO_FIELD_OFFSET(BluetoothGATTErrorResponse, address)}}, + {2, 2, {.offset = PROTO_FIELD_OFFSET(BluetoothGATTErrorResponse, handle)}}, + {3, 1, {.offset = PROTO_FIELD_OFFSET(BluetoothGATTErrorResponse, error)}}}; +const FieldMetaV3 BluetoothGATTWriteResponse::FIELDS_V3[2] = { + {1, 4, {.offset = PROTO_FIELD_OFFSET(BluetoothGATTWriteResponse, address)}}, + {2, 2, {.offset = PROTO_FIELD_OFFSET(BluetoothGATTWriteResponse, handle)}}}; +const FieldMetaV3 BluetoothGATTNotifyResponse::FIELDS_V3[2] = { + {1, 4, {.offset = PROTO_FIELD_OFFSET(BluetoothGATTNotifyResponse, address)}}, + {2, 2, {.offset = PROTO_FIELD_OFFSET(BluetoothGATTNotifyResponse, handle)}}}; +const FieldMetaV3 BluetoothDevicePairingResponse::FIELDS_V3[3] = { + {1, 4, {.offset = PROTO_FIELD_OFFSET(BluetoothDevicePairingResponse, address)}}, + {2, 0, {.offset = PROTO_FIELD_OFFSET(BluetoothDevicePairingResponse, paired)}}, + {3, 1, {.offset = PROTO_FIELD_OFFSET(BluetoothDevicePairingResponse, error)}}}; +const FieldMetaV3 BluetoothDeviceUnpairingResponse::FIELDS_V3[3] = { + {1, 4, {.offset = PROTO_FIELD_OFFSET(BluetoothDeviceUnpairingResponse, address)}}, + {2, 0, {.offset = PROTO_FIELD_OFFSET(BluetoothDeviceUnpairingResponse, success)}}, + {3, 1, {.offset = PROTO_FIELD_OFFSET(BluetoothDeviceUnpairingResponse, error)}}}; +const FieldMetaV3 BluetoothDeviceClearCacheResponse::FIELDS_V3[3] = { + {1, 4, {.offset = PROTO_FIELD_OFFSET(BluetoothDeviceClearCacheResponse, address)}}, + {2, 0, {.offset = PROTO_FIELD_OFFSET(BluetoothDeviceClearCacheResponse, success)}}, + {3, 1, {.offset = PROTO_FIELD_OFFSET(BluetoothDeviceClearCacheResponse, error)}}}; +const FieldMetaV3 BluetoothScannerStateResponse::FIELDS_V3[2] = { + {1, 7, {.offset = PROTO_FIELD_OFFSET(BluetoothScannerStateResponse, state)}}, + {2, 7, {.offset = PROTO_FIELD_OFFSET(BluetoothScannerStateResponse, mode)}}}; +const FieldMetaV3 BluetoothScannerSetModeRequest::FIELDS_V3[1] = { + {1, 7, {.offset = PROTO_FIELD_OFFSET(BluetoothScannerSetModeRequest, mode)}}}; #endif #ifdef USE_VOICE_ASSISTANT -const FieldMetaV2 SubscribeVoiceAssistantRequest::FIELDS_V2[2] = { - {1, PROTO_FIELD_OFFSET(SubscribeVoiceAssistantRequest, subscribe), ProtoFieldType::TYPE_BOOL, false, 1, {}}, - {2, PROTO_FIELD_OFFSET(SubscribeVoiceAssistantRequest, flags), ProtoFieldType::TYPE_UINT32, false, 1, {}}}; -const FieldMetaV2 VoiceAssistantAudioSettings::FIELDS_V2[3] = { - {1, - PROTO_FIELD_OFFSET(VoiceAssistantAudioSettings, noise_suppression_level), - ProtoFieldType::TYPE_UINT32, - false, - 1, - {}}, - {2, PROTO_FIELD_OFFSET(VoiceAssistantAudioSettings, auto_gain), ProtoFieldType::TYPE_UINT32, false, 1, {}}, - {3, PROTO_FIELD_OFFSET(VoiceAssistantAudioSettings, volume_multiplier), ProtoFieldType::TYPE_FLOAT, false, 1, {}}}; -const FieldMetaV2 VoiceAssistantRequest::FIELDS_V2[5] = { - {1, PROTO_FIELD_OFFSET(VoiceAssistantRequest, start), ProtoFieldType::TYPE_BOOL, false, 1, {}}, - {2, PROTO_FIELD_OFFSET(VoiceAssistantRequest, conversation_id), ProtoFieldType::TYPE_STRING, false, 1, {}}, - {3, PROTO_FIELD_OFFSET(VoiceAssistantRequest, flags), ProtoFieldType::TYPE_UINT32, false, 1, {}}, +const FieldMetaV3 SubscribeVoiceAssistantRequest::FIELDS_V3[2] = { + {1, 0, {.offset = PROTO_FIELD_OFFSET(SubscribeVoiceAssistantRequest, subscribe)}}, + {2, 2, {.offset = PROTO_FIELD_OFFSET(SubscribeVoiceAssistantRequest, flags)}}}; +const FieldMetaV3 VoiceAssistantAudioSettings::FIELDS_V3[3] = { + {1, 2, {.offset = PROTO_FIELD_OFFSET(VoiceAssistantAudioSettings, noise_suppression_level)}}, + {2, 2, {.offset = PROTO_FIELD_OFFSET(VoiceAssistantAudioSettings, auto_gain)}}, + {3, 11, {.offset = PROTO_FIELD_OFFSET(VoiceAssistantAudioSettings, volume_multiplier)}}}; +const FieldMetaV3 VoiceAssistantRequest::FIELDS_V3[5] = { + {1, 0, {.offset = PROTO_FIELD_OFFSET(VoiceAssistantRequest, start)}}, + {2, 8, {.offset = PROTO_FIELD_OFFSET(VoiceAssistantRequest, conversation_id)}}, + {3, 2, {.offset = PROTO_FIELD_OFFSET(VoiceAssistantRequest, flags)}}, {4, - PROTO_FIELD_OFFSET(VoiceAssistantRequest, audio_settings), - ProtoFieldType::TYPE_MESSAGE, - false, - 1, - {.message = {&encode_message_field, &size_message_field, - &decode_message_field}}}, - {5, PROTO_FIELD_OFFSET(VoiceAssistantRequest, wake_word_phrase), ProtoFieldType::TYPE_STRING, false, 1, {}}}; -const FieldMetaV2 VoiceAssistantResponse::FIELDS_V2[2] = { - {1, PROTO_FIELD_OFFSET(VoiceAssistantResponse, port), ProtoFieldType::TYPE_UINT32, false, 1, {}}, - {2, PROTO_FIELD_OFFSET(VoiceAssistantResponse, error), ProtoFieldType::TYPE_BOOL, false, 1, {}}}; -const FieldMetaV2 VoiceAssistantEventData::FIELDS_V2[2] = { - {1, PROTO_FIELD_OFFSET(VoiceAssistantEventData, name), ProtoFieldType::TYPE_STRING, false, 1, {}}, - {2, PROTO_FIELD_OFFSET(VoiceAssistantEventData, value), ProtoFieldType::TYPE_STRING, false, 1, {}}}; -const FieldMetaV2 VoiceAssistantEventResponse::FIELDS_V2[1] = { - {1, PROTO_FIELD_OFFSET(VoiceAssistantEventResponse, event_type), ProtoFieldType::TYPE_ENUM, false, 1, {}}}; -const RepeatedFieldMetaV2 VoiceAssistantEventResponse::REPEATED_FIELDS_V2[1] = { + 10, + {.offset_low = static_cast(PROTO_FIELD_OFFSET(VoiceAssistantRequest, audio_settings)), + .message_type_id = 105}}, + {5, 8, {.offset = PROTO_FIELD_OFFSET(VoiceAssistantRequest, wake_word_phrase)}}}; +const FieldMetaV3 VoiceAssistantResponse::FIELDS_V3[2] = { + {1, 2, {.offset = PROTO_FIELD_OFFSET(VoiceAssistantResponse, port)}}, + {2, 0, {.offset = PROTO_FIELD_OFFSET(VoiceAssistantResponse, error)}}}; +const FieldMetaV3 VoiceAssistantEventData::FIELDS_V3[2] = { + {1, 8, {.offset = PROTO_FIELD_OFFSET(VoiceAssistantEventData, name)}}, + {2, 8, {.offset = PROTO_FIELD_OFFSET(VoiceAssistantEventData, value)}}}; +const FieldMetaV3 VoiceAssistantEventResponse::FIELDS_V3[1] = { + {1, 7, {.offset = PROTO_FIELD_OFFSET(VoiceAssistantEventResponse, event_type)}}}; +const RepeatedFieldMetaV3 VoiceAssistantEventResponse::REPEATED_FIELDS_V3[1] = { {2, - PROTO_FIELD_OFFSET(VoiceAssistantEventResponse, data), - ProtoFieldType::TYPE_MESSAGE, - 1, - {.message = {&encode_repeated_message_field, - &size_repeated_message_field, - &decode_repeated_message_field}}}}; -const FieldMetaV2 VoiceAssistantAudio::FIELDS_V2[2] = { - {1, PROTO_FIELD_OFFSET(VoiceAssistantAudio, data), ProtoFieldType::TYPE_BYTES, false, 1, {}}, - {2, PROTO_FIELD_OFFSET(VoiceAssistantAudio, end), ProtoFieldType::TYPE_BOOL, false, 1, {}}}; -const FieldMetaV2 VoiceAssistantTimerEventResponse::FIELDS_V2[6] = { - {1, PROTO_FIELD_OFFSET(VoiceAssistantTimerEventResponse, event_type), ProtoFieldType::TYPE_ENUM, false, 1, {}}, - {2, PROTO_FIELD_OFFSET(VoiceAssistantTimerEventResponse, timer_id), ProtoFieldType::TYPE_STRING, false, 1, {}}, - {3, PROTO_FIELD_OFFSET(VoiceAssistantTimerEventResponse, name), ProtoFieldType::TYPE_STRING, false, 1, {}}, - {4, PROTO_FIELD_OFFSET(VoiceAssistantTimerEventResponse, total_seconds), ProtoFieldType::TYPE_UINT32, false, 1, {}}, - {5, PROTO_FIELD_OFFSET(VoiceAssistantTimerEventResponse, seconds_left), ProtoFieldType::TYPE_UINT32, false, 1, {}}, - {6, PROTO_FIELD_OFFSET(VoiceAssistantTimerEventResponse, is_active), ProtoFieldType::TYPE_BOOL, false, 1, {}}}; -const FieldMetaV2 VoiceAssistantAnnounceRequest::FIELDS_V2[4] = { - {1, PROTO_FIELD_OFFSET(VoiceAssistantAnnounceRequest, media_id), ProtoFieldType::TYPE_STRING, false, 1, {}}, - {2, PROTO_FIELD_OFFSET(VoiceAssistantAnnounceRequest, text), ProtoFieldType::TYPE_STRING, false, 1, {}}, - {3, - PROTO_FIELD_OFFSET(VoiceAssistantAnnounceRequest, preannounce_media_id), - ProtoFieldType::TYPE_STRING, - false, - 1, - {}}, - {4, - PROTO_FIELD_OFFSET(VoiceAssistantAnnounceRequest, start_conversation), - ProtoFieldType::TYPE_BOOL, - false, - 1, - {}}}; -const FieldMetaV2 VoiceAssistantAnnounceFinished::FIELDS_V2[1] = { - {1, PROTO_FIELD_OFFSET(VoiceAssistantAnnounceFinished, success), ProtoFieldType::TYPE_BOOL, false, 1, {}}}; -const FieldMetaV2 VoiceAssistantWakeWord::FIELDS_V2[2] = { - {1, PROTO_FIELD_OFFSET(VoiceAssistantWakeWord, id), ProtoFieldType::TYPE_STRING, false, 1, {}}, - {2, PROTO_FIELD_OFFSET(VoiceAssistantWakeWord, wake_word), ProtoFieldType::TYPE_STRING, false, 1, {}}}; -const RepeatedFieldMetaV2 VoiceAssistantWakeWord::REPEATED_FIELDS_V2[1] = { - {3, PROTO_FIELD_OFFSET(VoiceAssistantWakeWord, trained_languages), ProtoFieldType::TYPE_STRING, 1, {}}}; -const FieldMetaV2 VoiceAssistantConfigurationResponse::FIELDS_V2[1] = { - {3, - PROTO_FIELD_OFFSET(VoiceAssistantConfigurationResponse, max_active_wake_words), - ProtoFieldType::TYPE_UINT32, - false, - 1, - {}}}; -const RepeatedFieldMetaV2 VoiceAssistantConfigurationResponse::REPEATED_FIELDS_V2[2] = { + 10, + {.offset_low = static_cast(PROTO_FIELD_OFFSET(VoiceAssistantEventResponse, data)), + .message_type_id = 11}}}; +const FieldMetaV3 VoiceAssistantAudio::FIELDS_V3[2] = { + {1, 9, {.offset = PROTO_FIELD_OFFSET(VoiceAssistantAudio, data)}}, + {2, 0, {.offset = PROTO_FIELD_OFFSET(VoiceAssistantAudio, end)}}}; +const FieldMetaV3 VoiceAssistantTimerEventResponse::FIELDS_V3[6] = { + {1, 7, {.offset = PROTO_FIELD_OFFSET(VoiceAssistantTimerEventResponse, event_type)}}, + {2, 8, {.offset = PROTO_FIELD_OFFSET(VoiceAssistantTimerEventResponse, timer_id)}}, + {3, 8, {.offset = PROTO_FIELD_OFFSET(VoiceAssistantTimerEventResponse, name)}}, + {4, 2, {.offset = PROTO_FIELD_OFFSET(VoiceAssistantTimerEventResponse, total_seconds)}}, + {5, 2, {.offset = PROTO_FIELD_OFFSET(VoiceAssistantTimerEventResponse, seconds_left)}}, + {6, 0, {.offset = PROTO_FIELD_OFFSET(VoiceAssistantTimerEventResponse, is_active)}}}; +const FieldMetaV3 VoiceAssistantAnnounceRequest::FIELDS_V3[4] = { + {1, 8, {.offset = PROTO_FIELD_OFFSET(VoiceAssistantAnnounceRequest, media_id)}}, + {2, 8, {.offset = PROTO_FIELD_OFFSET(VoiceAssistantAnnounceRequest, text)}}, + {3, 8, {.offset = PROTO_FIELD_OFFSET(VoiceAssistantAnnounceRequest, preannounce_media_id)}}, + {4, 0, {.offset = PROTO_FIELD_OFFSET(VoiceAssistantAnnounceRequest, start_conversation)}}}; +const FieldMetaV3 VoiceAssistantAnnounceFinished::FIELDS_V3[1] = { + {1, 0, {.offset = PROTO_FIELD_OFFSET(VoiceAssistantAnnounceFinished, success)}}}; +const FieldMetaV3 VoiceAssistantWakeWord::FIELDS_V3[2] = { + {1, 8, {.offset = PROTO_FIELD_OFFSET(VoiceAssistantWakeWord, id)}}, + {2, 8, {.offset = PROTO_FIELD_OFFSET(VoiceAssistantWakeWord, wake_word)}}}; +const RepeatedFieldMetaV3 VoiceAssistantWakeWord::REPEATED_FIELDS_V3[1] = { + {3, 8, {.offset = PROTO_FIELD_OFFSET(VoiceAssistantWakeWord, trained_languages)}}}; +const FieldMetaV3 VoiceAssistantConfigurationResponse::FIELDS_V3[1] = { + {3, 2, {.offset = PROTO_FIELD_OFFSET(VoiceAssistantConfigurationResponse, max_active_wake_words)}}}; +const RepeatedFieldMetaV3 VoiceAssistantConfigurationResponse::REPEATED_FIELDS_V3[2] = { {1, - PROTO_FIELD_OFFSET(VoiceAssistantConfigurationResponse, available_wake_words), - ProtoFieldType::TYPE_MESSAGE, - 1, - {.message = {&encode_repeated_message_field, - &size_repeated_message_field, - &decode_repeated_message_field}}}, - {2, - PROTO_FIELD_OFFSET(VoiceAssistantConfigurationResponse, active_wake_words), - ProtoFieldType::TYPE_STRING, - 1, - {}}}; -const RepeatedFieldMetaV2 VoiceAssistantSetConfiguration::REPEATED_FIELDS_V2[1] = { - {1, PROTO_FIELD_OFFSET(VoiceAssistantSetConfiguration, active_wake_words), ProtoFieldType::TYPE_STRING, 1, {}}}; + 10, + {.offset_low = static_cast(PROTO_FIELD_OFFSET(VoiceAssistantConfigurationResponse, available_wake_words)), + .message_type_id = 12}}, + {2, 8, {.offset = PROTO_FIELD_OFFSET(VoiceAssistantConfigurationResponse, active_wake_words)}}}; +const RepeatedFieldMetaV3 VoiceAssistantSetConfiguration::REPEATED_FIELDS_V3[1] = { + {1, 8, {.offset = PROTO_FIELD_OFFSET(VoiceAssistantSetConfiguration, active_wake_words)}}}; #endif #ifdef USE_ALARM_CONTROL_PANEL -const FieldMetaV2 ListEntitiesAlarmControlPanelResponse::FIELDS_V2[11] = { - {1, - PROTO_FIELD_OFFSET(ListEntitiesAlarmControlPanelResponse, object_id), - ProtoFieldType::TYPE_STRING, - false, - 1, - {}}, - {2, PROTO_FIELD_OFFSET(ListEntitiesAlarmControlPanelResponse, key), ProtoFieldType::TYPE_FIXED32, false, 1, {}}, - {3, PROTO_FIELD_OFFSET(ListEntitiesAlarmControlPanelResponse, name), ProtoFieldType::TYPE_STRING, false, 1, {}}, - {4, - PROTO_FIELD_OFFSET(ListEntitiesAlarmControlPanelResponse, unique_id), - ProtoFieldType::TYPE_STRING, - false, - 1, - {}}, - {5, PROTO_FIELD_OFFSET(ListEntitiesAlarmControlPanelResponse, icon), ProtoFieldType::TYPE_STRING, false, 1, {}}, - {6, - PROTO_FIELD_OFFSET(ListEntitiesAlarmControlPanelResponse, disabled_by_default), - ProtoFieldType::TYPE_BOOL, - false, - 1, - {}}, - {7, - PROTO_FIELD_OFFSET(ListEntitiesAlarmControlPanelResponse, entity_category), - ProtoFieldType::TYPE_ENUM, - false, - 1, - {}}, - {8, - PROTO_FIELD_OFFSET(ListEntitiesAlarmControlPanelResponse, supported_features), - ProtoFieldType::TYPE_UINT32, - false, - 1, - {}}, - {9, - PROTO_FIELD_OFFSET(ListEntitiesAlarmControlPanelResponse, requires_code), - ProtoFieldType::TYPE_BOOL, - false, - 1, - {}}, - {10, - PROTO_FIELD_OFFSET(ListEntitiesAlarmControlPanelResponse, requires_code_to_arm), - ProtoFieldType::TYPE_BOOL, - false, - 1, - {}}, - {11, - PROTO_FIELD_OFFSET(ListEntitiesAlarmControlPanelResponse, device_id), - ProtoFieldType::TYPE_UINT32, - false, - 1, - {}}}; -const FieldMetaV2 AlarmControlPanelStateResponse::FIELDS_V2[3] = { - {1, PROTO_FIELD_OFFSET(AlarmControlPanelStateResponse, key), ProtoFieldType::TYPE_FIXED32, false, 1, {}}, - {2, PROTO_FIELD_OFFSET(AlarmControlPanelStateResponse, state), ProtoFieldType::TYPE_ENUM, false, 1, {}}, - {3, PROTO_FIELD_OFFSET(AlarmControlPanelStateResponse, device_id), ProtoFieldType::TYPE_UINT32, false, 1, {}}}; -const FieldMetaV2 AlarmControlPanelCommandRequest::FIELDS_V2[3] = { - {1, PROTO_FIELD_OFFSET(AlarmControlPanelCommandRequest, key), ProtoFieldType::TYPE_FIXED32, false, 1, {}}, - {2, PROTO_FIELD_OFFSET(AlarmControlPanelCommandRequest, command), ProtoFieldType::TYPE_ENUM, false, 1, {}}, - {3, PROTO_FIELD_OFFSET(AlarmControlPanelCommandRequest, code), ProtoFieldType::TYPE_STRING, false, 1, {}}}; +const FieldMetaV3 ListEntitiesAlarmControlPanelResponse::FIELDS_V3[11] = { + {1, 8, {.offset = PROTO_FIELD_OFFSET(ListEntitiesAlarmControlPanelResponse, object_id)}}, + {2, 12, {.offset = PROTO_FIELD_OFFSET(ListEntitiesAlarmControlPanelResponse, key)}}, + {3, 8, {.offset = PROTO_FIELD_OFFSET(ListEntitiesAlarmControlPanelResponse, name)}}, + {4, 8, {.offset = PROTO_FIELD_OFFSET(ListEntitiesAlarmControlPanelResponse, unique_id)}}, + {5, 8, {.offset = PROTO_FIELD_OFFSET(ListEntitiesAlarmControlPanelResponse, icon)}}, + {6, 0, {.offset = PROTO_FIELD_OFFSET(ListEntitiesAlarmControlPanelResponse, disabled_by_default)}}, + {7, 7, {.offset = PROTO_FIELD_OFFSET(ListEntitiesAlarmControlPanelResponse, entity_category)}}, + {8, 2, {.offset = PROTO_FIELD_OFFSET(ListEntitiesAlarmControlPanelResponse, supported_features)}}, + {9, 0, {.offset = PROTO_FIELD_OFFSET(ListEntitiesAlarmControlPanelResponse, requires_code)}}, + {10, 0, {.offset = PROTO_FIELD_OFFSET(ListEntitiesAlarmControlPanelResponse, requires_code_to_arm)}}, + {11, 2, {.offset = PROTO_FIELD_OFFSET(ListEntitiesAlarmControlPanelResponse, device_id)}}}; +const FieldMetaV3 AlarmControlPanelStateResponse::FIELDS_V3[3] = { + {1, 12, {.offset = PROTO_FIELD_OFFSET(AlarmControlPanelStateResponse, key)}}, + {2, 7, {.offset = PROTO_FIELD_OFFSET(AlarmControlPanelStateResponse, state)}}, + {3, 2, {.offset = PROTO_FIELD_OFFSET(AlarmControlPanelStateResponse, device_id)}}}; +const FieldMetaV3 AlarmControlPanelCommandRequest::FIELDS_V3[3] = { + {1, 12, {.offset = PROTO_FIELD_OFFSET(AlarmControlPanelCommandRequest, key)}}, + {2, 7, {.offset = PROTO_FIELD_OFFSET(AlarmControlPanelCommandRequest, command)}}, + {3, 8, {.offset = PROTO_FIELD_OFFSET(AlarmControlPanelCommandRequest, code)}}}; #endif #ifdef USE_TEXT -const FieldMetaV2 ListEntitiesTextResponse::FIELDS_V2[12] = { - {1, PROTO_FIELD_OFFSET(ListEntitiesTextResponse, object_id), ProtoFieldType::TYPE_STRING, false, 1, {}}, - {2, PROTO_FIELD_OFFSET(ListEntitiesTextResponse, key), ProtoFieldType::TYPE_FIXED32, false, 1, {}}, - {3, PROTO_FIELD_OFFSET(ListEntitiesTextResponse, name), ProtoFieldType::TYPE_STRING, false, 1, {}}, - {4, PROTO_FIELD_OFFSET(ListEntitiesTextResponse, unique_id), ProtoFieldType::TYPE_STRING, false, 1, {}}, - {5, PROTO_FIELD_OFFSET(ListEntitiesTextResponse, icon), ProtoFieldType::TYPE_STRING, false, 1, {}}, - {6, PROTO_FIELD_OFFSET(ListEntitiesTextResponse, disabled_by_default), ProtoFieldType::TYPE_BOOL, false, 1, {}}, - {7, PROTO_FIELD_OFFSET(ListEntitiesTextResponse, entity_category), ProtoFieldType::TYPE_ENUM, false, 1, {}}, - {8, PROTO_FIELD_OFFSET(ListEntitiesTextResponse, min_length), ProtoFieldType::TYPE_UINT32, false, 1, {}}, - {9, PROTO_FIELD_OFFSET(ListEntitiesTextResponse, max_length), ProtoFieldType::TYPE_UINT32, false, 1, {}}, - {10, PROTO_FIELD_OFFSET(ListEntitiesTextResponse, pattern), ProtoFieldType::TYPE_STRING, false, 1, {}}, - {11, PROTO_FIELD_OFFSET(ListEntitiesTextResponse, mode), ProtoFieldType::TYPE_ENUM, false, 1, {}}, - {12, PROTO_FIELD_OFFSET(ListEntitiesTextResponse, device_id), ProtoFieldType::TYPE_UINT32, false, 1, {}}}; -const FieldMetaV2 TextStateResponse::FIELDS_V2[4] = { - {1, PROTO_FIELD_OFFSET(TextStateResponse, key), ProtoFieldType::TYPE_FIXED32, false, 1, {}}, - {2, PROTO_FIELD_OFFSET(TextStateResponse, state), ProtoFieldType::TYPE_STRING, false, 1, {}}, - {3, PROTO_FIELD_OFFSET(TextStateResponse, missing_state), ProtoFieldType::TYPE_BOOL, false, 1, {}}, - {4, PROTO_FIELD_OFFSET(TextStateResponse, device_id), ProtoFieldType::TYPE_UINT32, false, 1, {}}}; -const FieldMetaV2 TextCommandRequest::FIELDS_V2[2] = { - {1, PROTO_FIELD_OFFSET(TextCommandRequest, key), ProtoFieldType::TYPE_FIXED32, false, 1, {}}, - {2, PROTO_FIELD_OFFSET(TextCommandRequest, state), ProtoFieldType::TYPE_STRING, false, 1, {}}}; +const FieldMetaV3 ListEntitiesTextResponse::FIELDS_V3[12] = { + {1, 8, {.offset = PROTO_FIELD_OFFSET(ListEntitiesTextResponse, object_id)}}, + {2, 12, {.offset = PROTO_FIELD_OFFSET(ListEntitiesTextResponse, key)}}, + {3, 8, {.offset = PROTO_FIELD_OFFSET(ListEntitiesTextResponse, name)}}, + {4, 8, {.offset = PROTO_FIELD_OFFSET(ListEntitiesTextResponse, unique_id)}}, + {5, 8, {.offset = PROTO_FIELD_OFFSET(ListEntitiesTextResponse, icon)}}, + {6, 0, {.offset = PROTO_FIELD_OFFSET(ListEntitiesTextResponse, disabled_by_default)}}, + {7, 7, {.offset = PROTO_FIELD_OFFSET(ListEntitiesTextResponse, entity_category)}}, + {8, 2, {.offset = PROTO_FIELD_OFFSET(ListEntitiesTextResponse, min_length)}}, + {9, 2, {.offset = PROTO_FIELD_OFFSET(ListEntitiesTextResponse, max_length)}}, + {10, 8, {.offset = PROTO_FIELD_OFFSET(ListEntitiesTextResponse, pattern)}}, + {11, 7, {.offset = PROTO_FIELD_OFFSET(ListEntitiesTextResponse, mode)}}, + {12, 2, {.offset = PROTO_FIELD_OFFSET(ListEntitiesTextResponse, device_id)}}}; +const FieldMetaV3 TextStateResponse::FIELDS_V3[4] = { + {1, 12, {.offset = PROTO_FIELD_OFFSET(TextStateResponse, key)}}, + {2, 8, {.offset = PROTO_FIELD_OFFSET(TextStateResponse, state)}}, + {3, 0, {.offset = PROTO_FIELD_OFFSET(TextStateResponse, missing_state)}}, + {4, 2, {.offset = PROTO_FIELD_OFFSET(TextStateResponse, device_id)}}}; +const FieldMetaV3 TextCommandRequest::FIELDS_V3[2] = { + {1, 12, {.offset = PROTO_FIELD_OFFSET(TextCommandRequest, key)}}, + {2, 8, {.offset = PROTO_FIELD_OFFSET(TextCommandRequest, state)}}}; #endif #ifdef USE_DATETIME_DATE -const FieldMetaV2 ListEntitiesDateResponse::FIELDS_V2[8] = { - {1, PROTO_FIELD_OFFSET(ListEntitiesDateResponse, object_id), ProtoFieldType::TYPE_STRING, false, 1, {}}, - {2, PROTO_FIELD_OFFSET(ListEntitiesDateResponse, key), ProtoFieldType::TYPE_FIXED32, false, 1, {}}, - {3, PROTO_FIELD_OFFSET(ListEntitiesDateResponse, name), ProtoFieldType::TYPE_STRING, false, 1, {}}, - {4, PROTO_FIELD_OFFSET(ListEntitiesDateResponse, unique_id), ProtoFieldType::TYPE_STRING, false, 1, {}}, - {5, PROTO_FIELD_OFFSET(ListEntitiesDateResponse, icon), ProtoFieldType::TYPE_STRING, false, 1, {}}, - {6, PROTO_FIELD_OFFSET(ListEntitiesDateResponse, disabled_by_default), ProtoFieldType::TYPE_BOOL, false, 1, {}}, - {7, PROTO_FIELD_OFFSET(ListEntitiesDateResponse, entity_category), ProtoFieldType::TYPE_ENUM, false, 1, {}}, - {8, PROTO_FIELD_OFFSET(ListEntitiesDateResponse, device_id), ProtoFieldType::TYPE_UINT32, false, 1, {}}}; -const FieldMetaV2 DateStateResponse::FIELDS_V2[6] = { - {1, PROTO_FIELD_OFFSET(DateStateResponse, key), ProtoFieldType::TYPE_FIXED32, false, 1, {}}, - {2, PROTO_FIELD_OFFSET(DateStateResponse, missing_state), ProtoFieldType::TYPE_BOOL, false, 1, {}}, - {3, PROTO_FIELD_OFFSET(DateStateResponse, year), ProtoFieldType::TYPE_UINT32, false, 1, {}}, - {4, PROTO_FIELD_OFFSET(DateStateResponse, month), ProtoFieldType::TYPE_UINT32, false, 1, {}}, - {5, PROTO_FIELD_OFFSET(DateStateResponse, day), ProtoFieldType::TYPE_UINT32, false, 1, {}}, - {6, PROTO_FIELD_OFFSET(DateStateResponse, device_id), ProtoFieldType::TYPE_UINT32, false, 1, {}}}; -const FieldMetaV2 DateCommandRequest::FIELDS_V2[4] = { - {1, PROTO_FIELD_OFFSET(DateCommandRequest, key), ProtoFieldType::TYPE_FIXED32, false, 1, {}}, - {2, PROTO_FIELD_OFFSET(DateCommandRequest, year), ProtoFieldType::TYPE_UINT32, false, 1, {}}, - {3, PROTO_FIELD_OFFSET(DateCommandRequest, month), ProtoFieldType::TYPE_UINT32, false, 1, {}}, - {4, PROTO_FIELD_OFFSET(DateCommandRequest, day), ProtoFieldType::TYPE_UINT32, false, 1, {}}}; +const FieldMetaV3 ListEntitiesDateResponse::FIELDS_V3[8] = { + {1, 8, {.offset = PROTO_FIELD_OFFSET(ListEntitiesDateResponse, object_id)}}, + {2, 12, {.offset = PROTO_FIELD_OFFSET(ListEntitiesDateResponse, key)}}, + {3, 8, {.offset = PROTO_FIELD_OFFSET(ListEntitiesDateResponse, name)}}, + {4, 8, {.offset = PROTO_FIELD_OFFSET(ListEntitiesDateResponse, unique_id)}}, + {5, 8, {.offset = PROTO_FIELD_OFFSET(ListEntitiesDateResponse, icon)}}, + {6, 0, {.offset = PROTO_FIELD_OFFSET(ListEntitiesDateResponse, disabled_by_default)}}, + {7, 7, {.offset = PROTO_FIELD_OFFSET(ListEntitiesDateResponse, entity_category)}}, + {8, 2, {.offset = PROTO_FIELD_OFFSET(ListEntitiesDateResponse, device_id)}}}; +const FieldMetaV3 DateStateResponse::FIELDS_V3[6] = { + {1, 12, {.offset = PROTO_FIELD_OFFSET(DateStateResponse, key)}}, + {2, 0, {.offset = PROTO_FIELD_OFFSET(DateStateResponse, missing_state)}}, + {3, 2, {.offset = PROTO_FIELD_OFFSET(DateStateResponse, year)}}, + {4, 2, {.offset = PROTO_FIELD_OFFSET(DateStateResponse, month)}}, + {5, 2, {.offset = PROTO_FIELD_OFFSET(DateStateResponse, day)}}, + {6, 2, {.offset = PROTO_FIELD_OFFSET(DateStateResponse, device_id)}}}; +const FieldMetaV3 DateCommandRequest::FIELDS_V3[4] = {{1, 12, {.offset = PROTO_FIELD_OFFSET(DateCommandRequest, key)}}, + {2, 2, {.offset = PROTO_FIELD_OFFSET(DateCommandRequest, year)}}, + {3, 2, {.offset = PROTO_FIELD_OFFSET(DateCommandRequest, month)}}, + {4, 2, {.offset = PROTO_FIELD_OFFSET(DateCommandRequest, day)}}}; #endif #ifdef USE_DATETIME_TIME -const FieldMetaV2 ListEntitiesTimeResponse::FIELDS_V2[8] = { - {1, PROTO_FIELD_OFFSET(ListEntitiesTimeResponse, object_id), ProtoFieldType::TYPE_STRING, false, 1, {}}, - {2, PROTO_FIELD_OFFSET(ListEntitiesTimeResponse, key), ProtoFieldType::TYPE_FIXED32, false, 1, {}}, - {3, PROTO_FIELD_OFFSET(ListEntitiesTimeResponse, name), ProtoFieldType::TYPE_STRING, false, 1, {}}, - {4, PROTO_FIELD_OFFSET(ListEntitiesTimeResponse, unique_id), ProtoFieldType::TYPE_STRING, false, 1, {}}, - {5, PROTO_FIELD_OFFSET(ListEntitiesTimeResponse, icon), ProtoFieldType::TYPE_STRING, false, 1, {}}, - {6, PROTO_FIELD_OFFSET(ListEntitiesTimeResponse, disabled_by_default), ProtoFieldType::TYPE_BOOL, false, 1, {}}, - {7, PROTO_FIELD_OFFSET(ListEntitiesTimeResponse, entity_category), ProtoFieldType::TYPE_ENUM, false, 1, {}}, - {8, PROTO_FIELD_OFFSET(ListEntitiesTimeResponse, device_id), ProtoFieldType::TYPE_UINT32, false, 1, {}}}; -const FieldMetaV2 TimeStateResponse::FIELDS_V2[6] = { - {1, PROTO_FIELD_OFFSET(TimeStateResponse, key), ProtoFieldType::TYPE_FIXED32, false, 1, {}}, - {2, PROTO_FIELD_OFFSET(TimeStateResponse, missing_state), ProtoFieldType::TYPE_BOOL, false, 1, {}}, - {3, PROTO_FIELD_OFFSET(TimeStateResponse, hour), ProtoFieldType::TYPE_UINT32, false, 1, {}}, - {4, PROTO_FIELD_OFFSET(TimeStateResponse, minute), ProtoFieldType::TYPE_UINT32, false, 1, {}}, - {5, PROTO_FIELD_OFFSET(TimeStateResponse, second), ProtoFieldType::TYPE_UINT32, false, 1, {}}, - {6, PROTO_FIELD_OFFSET(TimeStateResponse, device_id), ProtoFieldType::TYPE_UINT32, false, 1, {}}}; -const FieldMetaV2 TimeCommandRequest::FIELDS_V2[4] = { - {1, PROTO_FIELD_OFFSET(TimeCommandRequest, key), ProtoFieldType::TYPE_FIXED32, false, 1, {}}, - {2, PROTO_FIELD_OFFSET(TimeCommandRequest, hour), ProtoFieldType::TYPE_UINT32, false, 1, {}}, - {3, PROTO_FIELD_OFFSET(TimeCommandRequest, minute), ProtoFieldType::TYPE_UINT32, false, 1, {}}, - {4, PROTO_FIELD_OFFSET(TimeCommandRequest, second), ProtoFieldType::TYPE_UINT32, false, 1, {}}}; +const FieldMetaV3 ListEntitiesTimeResponse::FIELDS_V3[8] = { + {1, 8, {.offset = PROTO_FIELD_OFFSET(ListEntitiesTimeResponse, object_id)}}, + {2, 12, {.offset = PROTO_FIELD_OFFSET(ListEntitiesTimeResponse, key)}}, + {3, 8, {.offset = PROTO_FIELD_OFFSET(ListEntitiesTimeResponse, name)}}, + {4, 8, {.offset = PROTO_FIELD_OFFSET(ListEntitiesTimeResponse, unique_id)}}, + {5, 8, {.offset = PROTO_FIELD_OFFSET(ListEntitiesTimeResponse, icon)}}, + {6, 0, {.offset = PROTO_FIELD_OFFSET(ListEntitiesTimeResponse, disabled_by_default)}}, + {7, 7, {.offset = PROTO_FIELD_OFFSET(ListEntitiesTimeResponse, entity_category)}}, + {8, 2, {.offset = PROTO_FIELD_OFFSET(ListEntitiesTimeResponse, device_id)}}}; +const FieldMetaV3 TimeStateResponse::FIELDS_V3[6] = { + {1, 12, {.offset = PROTO_FIELD_OFFSET(TimeStateResponse, key)}}, + {2, 0, {.offset = PROTO_FIELD_OFFSET(TimeStateResponse, missing_state)}}, + {3, 2, {.offset = PROTO_FIELD_OFFSET(TimeStateResponse, hour)}}, + {4, 2, {.offset = PROTO_FIELD_OFFSET(TimeStateResponse, minute)}}, + {5, 2, {.offset = PROTO_FIELD_OFFSET(TimeStateResponse, second)}}, + {6, 2, {.offset = PROTO_FIELD_OFFSET(TimeStateResponse, device_id)}}}; +const FieldMetaV3 TimeCommandRequest::FIELDS_V3[4] = { + {1, 12, {.offset = PROTO_FIELD_OFFSET(TimeCommandRequest, key)}}, + {2, 2, {.offset = PROTO_FIELD_OFFSET(TimeCommandRequest, hour)}}, + {3, 2, {.offset = PROTO_FIELD_OFFSET(TimeCommandRequest, minute)}}, + {4, 2, {.offset = PROTO_FIELD_OFFSET(TimeCommandRequest, second)}}}; #endif #ifdef USE_EVENT -const FieldMetaV2 ListEntitiesEventResponse::FIELDS_V2[9] = { - {1, PROTO_FIELD_OFFSET(ListEntitiesEventResponse, object_id), ProtoFieldType::TYPE_STRING, false, 1, {}}, - {2, PROTO_FIELD_OFFSET(ListEntitiesEventResponse, key), ProtoFieldType::TYPE_FIXED32, false, 1, {}}, - {3, PROTO_FIELD_OFFSET(ListEntitiesEventResponse, name), ProtoFieldType::TYPE_STRING, false, 1, {}}, - {4, PROTO_FIELD_OFFSET(ListEntitiesEventResponse, unique_id), ProtoFieldType::TYPE_STRING, false, 1, {}}, - {5, PROTO_FIELD_OFFSET(ListEntitiesEventResponse, icon), ProtoFieldType::TYPE_STRING, false, 1, {}}, - {6, PROTO_FIELD_OFFSET(ListEntitiesEventResponse, disabled_by_default), ProtoFieldType::TYPE_BOOL, false, 1, {}}, - {7, PROTO_FIELD_OFFSET(ListEntitiesEventResponse, entity_category), ProtoFieldType::TYPE_ENUM, false, 1, {}}, - {8, PROTO_FIELD_OFFSET(ListEntitiesEventResponse, device_class), ProtoFieldType::TYPE_STRING, false, 1, {}}, - {10, PROTO_FIELD_OFFSET(ListEntitiesEventResponse, device_id), ProtoFieldType::TYPE_UINT32, false, 1, {}}}; -const RepeatedFieldMetaV2 ListEntitiesEventResponse::REPEATED_FIELDS_V2[1] = { - {9, PROTO_FIELD_OFFSET(ListEntitiesEventResponse, event_types), ProtoFieldType::TYPE_STRING, 1, {}}}; -const FieldMetaV2 EventResponse::FIELDS_V2[3] = { - {1, PROTO_FIELD_OFFSET(EventResponse, key), ProtoFieldType::TYPE_FIXED32, false, 1, {}}, - {2, PROTO_FIELD_OFFSET(EventResponse, event_type), ProtoFieldType::TYPE_STRING, false, 1, {}}, - {3, PROTO_FIELD_OFFSET(EventResponse, device_id), ProtoFieldType::TYPE_UINT32, false, 1, {}}}; +const FieldMetaV3 ListEntitiesEventResponse::FIELDS_V3[9] = { + {1, 8, {.offset = PROTO_FIELD_OFFSET(ListEntitiesEventResponse, object_id)}}, + {2, 12, {.offset = PROTO_FIELD_OFFSET(ListEntitiesEventResponse, key)}}, + {3, 8, {.offset = PROTO_FIELD_OFFSET(ListEntitiesEventResponse, name)}}, + {4, 8, {.offset = PROTO_FIELD_OFFSET(ListEntitiesEventResponse, unique_id)}}, + {5, 8, {.offset = PROTO_FIELD_OFFSET(ListEntitiesEventResponse, icon)}}, + {6, 0, {.offset = PROTO_FIELD_OFFSET(ListEntitiesEventResponse, disabled_by_default)}}, + {7, 7, {.offset = PROTO_FIELD_OFFSET(ListEntitiesEventResponse, entity_category)}}, + {8, 8, {.offset = PROTO_FIELD_OFFSET(ListEntitiesEventResponse, device_class)}}, + {10, 2, {.offset = PROTO_FIELD_OFFSET(ListEntitiesEventResponse, device_id)}}}; +const RepeatedFieldMetaV3 ListEntitiesEventResponse::REPEATED_FIELDS_V3[1] = { + {9, 8, {.offset = PROTO_FIELD_OFFSET(ListEntitiesEventResponse, event_types)}}}; +const FieldMetaV3 EventResponse::FIELDS_V3[3] = {{1, 12, {.offset = PROTO_FIELD_OFFSET(EventResponse, key)}}, + {2, 8, {.offset = PROTO_FIELD_OFFSET(EventResponse, event_type)}}, + {3, 2, {.offset = PROTO_FIELD_OFFSET(EventResponse, device_id)}}}; #endif #ifdef USE_VALVE -const FieldMetaV2 ListEntitiesValveResponse::FIELDS_V2[12] = { - {1, PROTO_FIELD_OFFSET(ListEntitiesValveResponse, object_id), ProtoFieldType::TYPE_STRING, false, 1, {}}, - {2, PROTO_FIELD_OFFSET(ListEntitiesValveResponse, key), ProtoFieldType::TYPE_FIXED32, false, 1, {}}, - {3, PROTO_FIELD_OFFSET(ListEntitiesValveResponse, name), ProtoFieldType::TYPE_STRING, false, 1, {}}, - {4, PROTO_FIELD_OFFSET(ListEntitiesValveResponse, unique_id), ProtoFieldType::TYPE_STRING, false, 1, {}}, - {5, PROTO_FIELD_OFFSET(ListEntitiesValveResponse, icon), ProtoFieldType::TYPE_STRING, false, 1, {}}, - {6, PROTO_FIELD_OFFSET(ListEntitiesValveResponse, disabled_by_default), ProtoFieldType::TYPE_BOOL, false, 1, {}}, - {7, PROTO_FIELD_OFFSET(ListEntitiesValveResponse, entity_category), ProtoFieldType::TYPE_ENUM, false, 1, {}}, - {8, PROTO_FIELD_OFFSET(ListEntitiesValveResponse, device_class), ProtoFieldType::TYPE_STRING, false, 1, {}}, - {9, PROTO_FIELD_OFFSET(ListEntitiesValveResponse, assumed_state), ProtoFieldType::TYPE_BOOL, false, 1, {}}, - {10, PROTO_FIELD_OFFSET(ListEntitiesValveResponse, supports_position), ProtoFieldType::TYPE_BOOL, false, 1, {}}, - {11, PROTO_FIELD_OFFSET(ListEntitiesValveResponse, supports_stop), ProtoFieldType::TYPE_BOOL, false, 1, {}}, - {12, PROTO_FIELD_OFFSET(ListEntitiesValveResponse, device_id), ProtoFieldType::TYPE_UINT32, false, 1, {}}}; -const FieldMetaV2 ValveStateResponse::FIELDS_V2[4] = { - {1, PROTO_FIELD_OFFSET(ValveStateResponse, key), ProtoFieldType::TYPE_FIXED32, false, 1, {}}, - {2, PROTO_FIELD_OFFSET(ValveStateResponse, position), ProtoFieldType::TYPE_FLOAT, false, 1, {}}, - {3, PROTO_FIELD_OFFSET(ValveStateResponse, current_operation), ProtoFieldType::TYPE_ENUM, false, 1, {}}, - {4, PROTO_FIELD_OFFSET(ValveStateResponse, device_id), ProtoFieldType::TYPE_UINT32, false, 1, {}}}; -const FieldMetaV2 ValveCommandRequest::FIELDS_V2[4] = { - {1, PROTO_FIELD_OFFSET(ValveCommandRequest, key), ProtoFieldType::TYPE_FIXED32, false, 1, {}}, - {2, PROTO_FIELD_OFFSET(ValveCommandRequest, has_position), ProtoFieldType::TYPE_BOOL, false, 1, {}}, - {3, PROTO_FIELD_OFFSET(ValveCommandRequest, position), ProtoFieldType::TYPE_FLOAT, false, 1, {}}, - {4, PROTO_FIELD_OFFSET(ValveCommandRequest, stop), ProtoFieldType::TYPE_BOOL, false, 1, {}}}; +const FieldMetaV3 ListEntitiesValveResponse::FIELDS_V3[12] = { + {1, 8, {.offset = PROTO_FIELD_OFFSET(ListEntitiesValveResponse, object_id)}}, + {2, 12, {.offset = PROTO_FIELD_OFFSET(ListEntitiesValveResponse, key)}}, + {3, 8, {.offset = PROTO_FIELD_OFFSET(ListEntitiesValveResponse, name)}}, + {4, 8, {.offset = PROTO_FIELD_OFFSET(ListEntitiesValveResponse, unique_id)}}, + {5, 8, {.offset = PROTO_FIELD_OFFSET(ListEntitiesValveResponse, icon)}}, + {6, 0, {.offset = PROTO_FIELD_OFFSET(ListEntitiesValveResponse, disabled_by_default)}}, + {7, 7, {.offset = PROTO_FIELD_OFFSET(ListEntitiesValveResponse, entity_category)}}, + {8, 8, {.offset = PROTO_FIELD_OFFSET(ListEntitiesValveResponse, device_class)}}, + {9, 0, {.offset = PROTO_FIELD_OFFSET(ListEntitiesValveResponse, assumed_state)}}, + {10, 0, {.offset = PROTO_FIELD_OFFSET(ListEntitiesValveResponse, supports_position)}}, + {11, 0, {.offset = PROTO_FIELD_OFFSET(ListEntitiesValveResponse, supports_stop)}}, + {12, 2, {.offset = PROTO_FIELD_OFFSET(ListEntitiesValveResponse, device_id)}}}; +const FieldMetaV3 ValveStateResponse::FIELDS_V3[4] = { + {1, 12, {.offset = PROTO_FIELD_OFFSET(ValveStateResponse, key)}}, + {2, 11, {.offset = PROTO_FIELD_OFFSET(ValveStateResponse, position)}}, + {3, 7, {.offset = PROTO_FIELD_OFFSET(ValveStateResponse, current_operation)}}, + {4, 2, {.offset = PROTO_FIELD_OFFSET(ValveStateResponse, device_id)}}}; +const FieldMetaV3 ValveCommandRequest::FIELDS_V3[4] = { + {1, 12, {.offset = PROTO_FIELD_OFFSET(ValveCommandRequest, key)}}, + {2, 0, {.offset = PROTO_FIELD_OFFSET(ValveCommandRequest, has_position)}}, + {3, 11, {.offset = PROTO_FIELD_OFFSET(ValveCommandRequest, position)}}, + {4, 0, {.offset = PROTO_FIELD_OFFSET(ValveCommandRequest, stop)}}}; #endif #ifdef USE_DATETIME_DATETIME -const FieldMetaV2 ListEntitiesDateTimeResponse::FIELDS_V2[8] = { - {1, PROTO_FIELD_OFFSET(ListEntitiesDateTimeResponse, object_id), ProtoFieldType::TYPE_STRING, false, 1, {}}, - {2, PROTO_FIELD_OFFSET(ListEntitiesDateTimeResponse, key), ProtoFieldType::TYPE_FIXED32, false, 1, {}}, - {3, PROTO_FIELD_OFFSET(ListEntitiesDateTimeResponse, name), ProtoFieldType::TYPE_STRING, false, 1, {}}, - {4, PROTO_FIELD_OFFSET(ListEntitiesDateTimeResponse, unique_id), ProtoFieldType::TYPE_STRING, false, 1, {}}, - {5, PROTO_FIELD_OFFSET(ListEntitiesDateTimeResponse, icon), ProtoFieldType::TYPE_STRING, false, 1, {}}, - {6, PROTO_FIELD_OFFSET(ListEntitiesDateTimeResponse, disabled_by_default), ProtoFieldType::TYPE_BOOL, false, 1, {}}, - {7, PROTO_FIELD_OFFSET(ListEntitiesDateTimeResponse, entity_category), ProtoFieldType::TYPE_ENUM, false, 1, {}}, - {8, PROTO_FIELD_OFFSET(ListEntitiesDateTimeResponse, device_id), ProtoFieldType::TYPE_UINT32, false, 1, {}}}; -const FieldMetaV2 DateTimeStateResponse::FIELDS_V2[4] = { - {1, PROTO_FIELD_OFFSET(DateTimeStateResponse, key), ProtoFieldType::TYPE_FIXED32, false, 1, {}}, - {2, PROTO_FIELD_OFFSET(DateTimeStateResponse, missing_state), ProtoFieldType::TYPE_BOOL, false, 1, {}}, - {3, PROTO_FIELD_OFFSET(DateTimeStateResponse, epoch_seconds), ProtoFieldType::TYPE_FIXED32, false, 1, {}}, - {4, PROTO_FIELD_OFFSET(DateTimeStateResponse, device_id), ProtoFieldType::TYPE_UINT32, false, 1, {}}}; -const FieldMetaV2 DateTimeCommandRequest::FIELDS_V2[2] = { - {1, PROTO_FIELD_OFFSET(DateTimeCommandRequest, key), ProtoFieldType::TYPE_FIXED32, false, 1, {}}, - {2, PROTO_FIELD_OFFSET(DateTimeCommandRequest, epoch_seconds), ProtoFieldType::TYPE_FIXED32, false, 1, {}}}; +const FieldMetaV3 ListEntitiesDateTimeResponse::FIELDS_V3[8] = { + {1, 8, {.offset = PROTO_FIELD_OFFSET(ListEntitiesDateTimeResponse, object_id)}}, + {2, 12, {.offset = PROTO_FIELD_OFFSET(ListEntitiesDateTimeResponse, key)}}, + {3, 8, {.offset = PROTO_FIELD_OFFSET(ListEntitiesDateTimeResponse, name)}}, + {4, 8, {.offset = PROTO_FIELD_OFFSET(ListEntitiesDateTimeResponse, unique_id)}}, + {5, 8, {.offset = PROTO_FIELD_OFFSET(ListEntitiesDateTimeResponse, icon)}}, + {6, 0, {.offset = PROTO_FIELD_OFFSET(ListEntitiesDateTimeResponse, disabled_by_default)}}, + {7, 7, {.offset = PROTO_FIELD_OFFSET(ListEntitiesDateTimeResponse, entity_category)}}, + {8, 2, {.offset = PROTO_FIELD_OFFSET(ListEntitiesDateTimeResponse, device_id)}}}; +const FieldMetaV3 DateTimeStateResponse::FIELDS_V3[4] = { + {1, 12, {.offset = PROTO_FIELD_OFFSET(DateTimeStateResponse, key)}}, + {2, 0, {.offset = PROTO_FIELD_OFFSET(DateTimeStateResponse, missing_state)}}, + {3, 12, {.offset = PROTO_FIELD_OFFSET(DateTimeStateResponse, epoch_seconds)}}, + {4, 2, {.offset = PROTO_FIELD_OFFSET(DateTimeStateResponse, device_id)}}}; +const FieldMetaV3 DateTimeCommandRequest::FIELDS_V3[2] = { + {1, 12, {.offset = PROTO_FIELD_OFFSET(DateTimeCommandRequest, key)}}, + {2, 12, {.offset = PROTO_FIELD_OFFSET(DateTimeCommandRequest, epoch_seconds)}}}; #endif #ifdef USE_UPDATE -const FieldMetaV2 ListEntitiesUpdateResponse::FIELDS_V2[9] = { - {1, PROTO_FIELD_OFFSET(ListEntitiesUpdateResponse, object_id), ProtoFieldType::TYPE_STRING, false, 1, {}}, - {2, PROTO_FIELD_OFFSET(ListEntitiesUpdateResponse, key), ProtoFieldType::TYPE_FIXED32, false, 1, {}}, - {3, PROTO_FIELD_OFFSET(ListEntitiesUpdateResponse, name), ProtoFieldType::TYPE_STRING, false, 1, {}}, - {4, PROTO_FIELD_OFFSET(ListEntitiesUpdateResponse, unique_id), ProtoFieldType::TYPE_STRING, false, 1, {}}, - {5, PROTO_FIELD_OFFSET(ListEntitiesUpdateResponse, icon), ProtoFieldType::TYPE_STRING, false, 1, {}}, - {6, PROTO_FIELD_OFFSET(ListEntitiesUpdateResponse, disabled_by_default), ProtoFieldType::TYPE_BOOL, false, 1, {}}, - {7, PROTO_FIELD_OFFSET(ListEntitiesUpdateResponse, entity_category), ProtoFieldType::TYPE_ENUM, false, 1, {}}, - {8, PROTO_FIELD_OFFSET(ListEntitiesUpdateResponse, device_class), ProtoFieldType::TYPE_STRING, false, 1, {}}, - {9, PROTO_FIELD_OFFSET(ListEntitiesUpdateResponse, device_id), ProtoFieldType::TYPE_UINT32, false, 1, {}}}; -const FieldMetaV2 UpdateStateResponse::FIELDS_V2[11] = { - {1, PROTO_FIELD_OFFSET(UpdateStateResponse, key), ProtoFieldType::TYPE_FIXED32, false, 1, {}}, - {2, PROTO_FIELD_OFFSET(UpdateStateResponse, missing_state), ProtoFieldType::TYPE_BOOL, false, 1, {}}, - {3, PROTO_FIELD_OFFSET(UpdateStateResponse, in_progress), ProtoFieldType::TYPE_BOOL, false, 1, {}}, - {4, PROTO_FIELD_OFFSET(UpdateStateResponse, has_progress), ProtoFieldType::TYPE_BOOL, false, 1, {}}, - {5, PROTO_FIELD_OFFSET(UpdateStateResponse, progress), ProtoFieldType::TYPE_FLOAT, false, 1, {}}, - {6, PROTO_FIELD_OFFSET(UpdateStateResponse, current_version), ProtoFieldType::TYPE_STRING, false, 1, {}}, - {7, PROTO_FIELD_OFFSET(UpdateStateResponse, latest_version), ProtoFieldType::TYPE_STRING, false, 1, {}}, - {8, PROTO_FIELD_OFFSET(UpdateStateResponse, title), ProtoFieldType::TYPE_STRING, false, 1, {}}, - {9, PROTO_FIELD_OFFSET(UpdateStateResponse, release_summary), ProtoFieldType::TYPE_STRING, false, 1, {}}, - {10, PROTO_FIELD_OFFSET(UpdateStateResponse, release_url), ProtoFieldType::TYPE_STRING, false, 1, {}}, - {11, PROTO_FIELD_OFFSET(UpdateStateResponse, device_id), ProtoFieldType::TYPE_UINT32, false, 1, {}}}; -const FieldMetaV2 UpdateCommandRequest::FIELDS_V2[2] = { - {1, PROTO_FIELD_OFFSET(UpdateCommandRequest, key), ProtoFieldType::TYPE_FIXED32, false, 1, {}}, - {2, PROTO_FIELD_OFFSET(UpdateCommandRequest, command), ProtoFieldType::TYPE_ENUM, false, 1, {}}}; +const FieldMetaV3 ListEntitiesUpdateResponse::FIELDS_V3[9] = { + {1, 8, {.offset = PROTO_FIELD_OFFSET(ListEntitiesUpdateResponse, object_id)}}, + {2, 12, {.offset = PROTO_FIELD_OFFSET(ListEntitiesUpdateResponse, key)}}, + {3, 8, {.offset = PROTO_FIELD_OFFSET(ListEntitiesUpdateResponse, name)}}, + {4, 8, {.offset = PROTO_FIELD_OFFSET(ListEntitiesUpdateResponse, unique_id)}}, + {5, 8, {.offset = PROTO_FIELD_OFFSET(ListEntitiesUpdateResponse, icon)}}, + {6, 0, {.offset = PROTO_FIELD_OFFSET(ListEntitiesUpdateResponse, disabled_by_default)}}, + {7, 7, {.offset = PROTO_FIELD_OFFSET(ListEntitiesUpdateResponse, entity_category)}}, + {8, 8, {.offset = PROTO_FIELD_OFFSET(ListEntitiesUpdateResponse, device_class)}}, + {9, 2, {.offset = PROTO_FIELD_OFFSET(ListEntitiesUpdateResponse, device_id)}}}; +const FieldMetaV3 UpdateStateResponse::FIELDS_V3[11] = { + {1, 12, {.offset = PROTO_FIELD_OFFSET(UpdateStateResponse, key)}}, + {2, 0, {.offset = PROTO_FIELD_OFFSET(UpdateStateResponse, missing_state)}}, + {3, 0, {.offset = PROTO_FIELD_OFFSET(UpdateStateResponse, in_progress)}}, + {4, 0, {.offset = PROTO_FIELD_OFFSET(UpdateStateResponse, has_progress)}}, + {5, 11, {.offset = PROTO_FIELD_OFFSET(UpdateStateResponse, progress)}}, + {6, 8, {.offset = PROTO_FIELD_OFFSET(UpdateStateResponse, current_version)}}, + {7, 8, {.offset = PROTO_FIELD_OFFSET(UpdateStateResponse, latest_version)}}, + {8, 8, {.offset = PROTO_FIELD_OFFSET(UpdateStateResponse, title)}}, + {9, 8, {.offset = PROTO_FIELD_OFFSET(UpdateStateResponse, release_summary)}}, + {10, 8, {.offset = PROTO_FIELD_OFFSET(UpdateStateResponse, release_url)}}, + {11, 2, {.offset = PROTO_FIELD_OFFSET(UpdateStateResponse, device_id)}}}; +const FieldMetaV3 UpdateCommandRequest::FIELDS_V3[2] = { + {1, 12, {.offset = PROTO_FIELD_OFFSET(UpdateCommandRequest, key)}}, + {2, 7, {.offset = PROTO_FIELD_OFFSET(UpdateCommandRequest, command)}}}; #endif +// Message handler registries for V3 +const MessageHandler MESSAGE_HANDLERS[141] = { + {nullptr, nullptr, nullptr}, + {nullptr, nullptr, nullptr}, + {nullptr, nullptr, nullptr}, + {nullptr, nullptr, nullptr}, + {nullptr, nullptr, nullptr}, + {nullptr, nullptr, nullptr}, + {nullptr, nullptr, nullptr}, + {nullptr, nullptr, nullptr}, + {nullptr, nullptr, nullptr}, + {&encode_message_field, &size_message_field, &decode_message_field}, + {nullptr, nullptr, nullptr}, + {nullptr, nullptr, nullptr}, + {nullptr, nullptr, nullptr}, + {nullptr, nullptr, nullptr}, + {nullptr, nullptr, nullptr}, + {nullptr, nullptr, nullptr}, + {nullptr, nullptr, nullptr}, + {nullptr, nullptr, nullptr}, + {nullptr, nullptr, nullptr}, + {nullptr, nullptr, nullptr}, + {nullptr, nullptr, nullptr}, + {nullptr, nullptr, nullptr}, + {nullptr, nullptr, nullptr}, + {nullptr, nullptr, nullptr}, + {nullptr, nullptr, nullptr}, + {nullptr, nullptr, nullptr}, + {nullptr, nullptr, nullptr}, + {nullptr, nullptr, nullptr}, + {nullptr, nullptr, nullptr}, + {nullptr, nullptr, nullptr}, + {nullptr, nullptr, nullptr}, + {nullptr, nullptr, nullptr}, + {nullptr, nullptr, nullptr}, + {nullptr, nullptr, nullptr}, + {nullptr, nullptr, nullptr}, + {nullptr, nullptr, nullptr}, + {nullptr, nullptr, nullptr}, + {nullptr, nullptr, nullptr}, + {nullptr, nullptr, nullptr}, + {nullptr, nullptr, nullptr}, + {nullptr, nullptr, nullptr}, + {nullptr, nullptr, nullptr}, + {nullptr, nullptr, nullptr}, + {nullptr, nullptr, nullptr}, + {nullptr, nullptr, nullptr}, + {nullptr, nullptr, nullptr}, + {nullptr, nullptr, nullptr}, + {nullptr, nullptr, nullptr}, + {nullptr, nullptr, nullptr}, + {nullptr, nullptr, nullptr}, + {nullptr, nullptr, nullptr}, + {nullptr, nullptr, nullptr}, + {nullptr, nullptr, nullptr}, + {nullptr, nullptr, nullptr}, + {nullptr, nullptr, nullptr}, + {nullptr, nullptr, nullptr}, + {nullptr, nullptr, nullptr}, + {nullptr, nullptr, nullptr}, + {nullptr, nullptr, nullptr}, + {nullptr, nullptr, nullptr}, + {nullptr, nullptr, nullptr}, + {nullptr, nullptr, nullptr}, + {nullptr, nullptr, nullptr}, + {nullptr, nullptr, nullptr}, + {nullptr, nullptr, nullptr}, + {nullptr, nullptr, nullptr}, + {nullptr, nullptr, nullptr}, + {nullptr, nullptr, nullptr}, + {nullptr, nullptr, nullptr}, + {nullptr, nullptr, nullptr}, + {nullptr, nullptr, nullptr}, + {nullptr, nullptr, nullptr}, + {nullptr, nullptr, nullptr}, + {nullptr, nullptr, nullptr}, + {nullptr, nullptr, nullptr}, + {nullptr, nullptr, nullptr}, + {nullptr, nullptr, nullptr}, + {nullptr, nullptr, nullptr}, + {nullptr, nullptr, nullptr}, + {nullptr, nullptr, nullptr}, + {nullptr, nullptr, nullptr}, + {nullptr, nullptr, nullptr}, + {nullptr, nullptr, nullptr}, + {nullptr, nullptr, nullptr}, + {nullptr, nullptr, nullptr}, + {nullptr, nullptr, nullptr}, + {nullptr, nullptr, nullptr}, + {nullptr, nullptr, nullptr}, + {nullptr, nullptr, nullptr}, + {nullptr, nullptr, nullptr}, + {nullptr, nullptr, nullptr}, + {nullptr, nullptr, nullptr}, + {nullptr, nullptr, nullptr}, + {nullptr, nullptr, nullptr}, + {nullptr, nullptr, nullptr}, + {nullptr, nullptr, nullptr}, + {nullptr, nullptr, nullptr}, + {nullptr, nullptr, nullptr}, + {nullptr, nullptr, nullptr}, + {nullptr, nullptr, nullptr}, + {nullptr, nullptr, nullptr}, + {nullptr, nullptr, nullptr}, + {nullptr, nullptr, nullptr}, + {nullptr, nullptr, nullptr}, + {nullptr, nullptr, nullptr}, +#ifdef USE_VOICE_ASSISTANT + {&encode_message_field, &size_message_field, + &decode_message_field}, +#else + {nullptr, nullptr, nullptr}, +#endif + {nullptr, nullptr, nullptr}, + {nullptr, nullptr, nullptr}, + {nullptr, nullptr, nullptr}, + {nullptr, nullptr, nullptr}, + {nullptr, nullptr, nullptr}, + {nullptr, nullptr, nullptr}, + {nullptr, nullptr, nullptr}, + {nullptr, nullptr, nullptr}, + {nullptr, nullptr, nullptr}, + {nullptr, nullptr, nullptr}, + {nullptr, nullptr, nullptr}, + {nullptr, nullptr, nullptr}, + {nullptr, nullptr, nullptr}, + {nullptr, nullptr, nullptr}, + {nullptr, nullptr, nullptr}, + {nullptr, nullptr, nullptr}, + {nullptr, nullptr, nullptr}, + {nullptr, nullptr, nullptr}, + {nullptr, nullptr, nullptr}, + {nullptr, nullptr, nullptr}, + {nullptr, nullptr, nullptr}, + {nullptr, nullptr, nullptr}, + {nullptr, nullptr, nullptr}, + {nullptr, nullptr, nullptr}, + {nullptr, nullptr, nullptr}, + {nullptr, nullptr, nullptr}, + {nullptr, nullptr, nullptr}, + {nullptr, nullptr, nullptr}, + {nullptr, nullptr, nullptr}, + {nullptr, nullptr, nullptr}, + {nullptr, nullptr, nullptr}, + {nullptr, nullptr, nullptr}, + {nullptr, nullptr, nullptr}, + {nullptr, nullptr, nullptr}, + {nullptr, nullptr, nullptr}}; +const size_t MESSAGE_HANDLER_COUNT = 141; + +const RepeatedMessageHandler REPEATED_MESSAGE_HANDLERS[13] = { + {&encode_repeated_message_field, &size_repeated_message_field, + &decode_repeated_message_field}, + {&encode_repeated_message_field, &size_repeated_message_field, + &decode_repeated_message_field}, + {&encode_repeated_message_field, &size_repeated_message_field, + &decode_repeated_message_field}, + {&encode_repeated_message_field, + &size_repeated_message_field, + &decode_repeated_message_field}, + {&encode_repeated_message_field, &size_repeated_message_field, + &decode_repeated_message_field}, +#ifdef USE_MEDIA_PLAYER + {&encode_repeated_message_field, + &size_repeated_message_field, + &decode_repeated_message_field}, +#else + {nullptr, nullptr, nullptr}, +#endif +#ifdef USE_BLUETOOTH_PROXY + {&encode_repeated_message_field, &size_repeated_message_field, + &decode_repeated_message_field}, +#else + {nullptr, nullptr, nullptr}, +#endif +#ifdef USE_BLUETOOTH_PROXY + {&encode_repeated_message_field, + &size_repeated_message_field, + &decode_repeated_message_field}, +#else + {nullptr, nullptr, nullptr}, +#endif +#ifdef USE_BLUETOOTH_PROXY + {&encode_repeated_message_field, &size_repeated_message_field, + &decode_repeated_message_field}, +#else + {nullptr, nullptr, nullptr}, +#endif +#ifdef USE_BLUETOOTH_PROXY + {&encode_repeated_message_field, + &size_repeated_message_field, + &decode_repeated_message_field}, +#else + {nullptr, nullptr, nullptr}, +#endif +#ifdef USE_BLUETOOTH_PROXY + {&encode_repeated_message_field, &size_repeated_message_field, + &decode_repeated_message_field}, +#else + {nullptr, nullptr, nullptr}, +#endif +#ifdef USE_VOICE_ASSISTANT + {&encode_repeated_message_field, &size_repeated_message_field, + &decode_repeated_message_field}, +#else + {nullptr, nullptr, nullptr}, +#endif +#ifdef USE_VOICE_ASSISTANT + {&encode_repeated_message_field, &size_repeated_message_field, + &decode_repeated_message_field}, +#else + {nullptr, nullptr, nullptr}, +#endif +}; +const size_t REPEATED_MESSAGE_HANDLER_COUNT = 13; + } // namespace api } // namespace esphome diff --git a/esphome/components/api/api_pb2.h b/esphome/components/api/api_pb2.h index 199e3842aa..c6e63b7124 100644 --- a/esphome/components/api/api_pb2.h +++ b/esphome/components/api/api_pb2.h @@ -318,14 +318,14 @@ class HelloRequest : public ProtoMessage { std::string client_info{}; uint32_t api_version_major{0}; uint32_t api_version_minor{0}; - static const FieldMetaV2 FIELDS_V2[3]; - static constexpr size_t FIELD_COUNT_V2 = 3; - static constexpr size_t REPEATED_COUNT_V2 = 0; - // Virtual metadata getters - const FieldMetaV2 *get_field_metadata_v2() const override { return FIELDS_V2; } - size_t get_field_count_v2() const override { return FIELD_COUNT_V2; } - const RepeatedFieldMetaV2 *get_repeated_field_metadata_v2() const override { return nullptr; } - size_t get_repeated_field_count_v2() const override { return REPEATED_COUNT_V2; } + static const FieldMetaV3 FIELDS_V3[3]; + static constexpr size_t FIELD_COUNT_V3 = 3; + static constexpr size_t REPEATED_COUNT_V3 = 0; + // V3 metadata getters + const FieldMetaV3 *get_field_metadata_v3() const override { return FIELDS_V3; } + size_t get_field_count_v3() const override { return FIELD_COUNT_V3; } + const RepeatedFieldMetaV3 *get_repeated_field_metadata_v3() const override { return nullptr; } + size_t get_repeated_field_count_v3() const override { return REPEATED_COUNT_V3; } #ifdef HAS_PROTO_MESSAGE_DUMP void dump_to(std::string &out) const override; #endif @@ -343,14 +343,14 @@ class HelloResponse : public ProtoMessage { uint32_t api_version_minor{0}; std::string server_info{}; std::string name{}; - static const FieldMetaV2 FIELDS_V2[4]; - static constexpr size_t FIELD_COUNT_V2 = 4; - static constexpr size_t REPEATED_COUNT_V2 = 0; - // Virtual metadata getters - const FieldMetaV2 *get_field_metadata_v2() const override { return FIELDS_V2; } - size_t get_field_count_v2() const override { return FIELD_COUNT_V2; } - const RepeatedFieldMetaV2 *get_repeated_field_metadata_v2() const override { return nullptr; } - size_t get_repeated_field_count_v2() const override { return REPEATED_COUNT_V2; } + static const FieldMetaV3 FIELDS_V3[4]; + static constexpr size_t FIELD_COUNT_V3 = 4; + static constexpr size_t REPEATED_COUNT_V3 = 0; + // V3 metadata getters + const FieldMetaV3 *get_field_metadata_v3() const override { return FIELDS_V3; } + size_t get_field_count_v3() const override { return FIELD_COUNT_V3; } + const RepeatedFieldMetaV3 *get_repeated_field_metadata_v3() const override { return nullptr; } + size_t get_repeated_field_count_v3() const override { return REPEATED_COUNT_V3; } #ifdef HAS_PROTO_MESSAGE_DUMP void dump_to(std::string &out) const override; #endif @@ -365,14 +365,14 @@ class ConnectRequest : public ProtoMessage { const char *message_name() const override { return "connect_request"; } #endif std::string password{}; - static const FieldMetaV2 FIELDS_V2[1]; - static constexpr size_t FIELD_COUNT_V2 = 1; - static constexpr size_t REPEATED_COUNT_V2 = 0; - // Virtual metadata getters - const FieldMetaV2 *get_field_metadata_v2() const override { return FIELDS_V2; } - size_t get_field_count_v2() const override { return FIELD_COUNT_V2; } - const RepeatedFieldMetaV2 *get_repeated_field_metadata_v2() const override { return nullptr; } - size_t get_repeated_field_count_v2() const override { return REPEATED_COUNT_V2; } + static const FieldMetaV3 FIELDS_V3[1]; + static constexpr size_t FIELD_COUNT_V3 = 1; + static constexpr size_t REPEATED_COUNT_V3 = 0; + // V3 metadata getters + const FieldMetaV3 *get_field_metadata_v3() const override { return FIELDS_V3; } + size_t get_field_count_v3() const override { return FIELD_COUNT_V3; } + const RepeatedFieldMetaV3 *get_repeated_field_metadata_v3() const override { return nullptr; } + size_t get_repeated_field_count_v3() const override { return REPEATED_COUNT_V3; } #ifdef HAS_PROTO_MESSAGE_DUMP void dump_to(std::string &out) const override; #endif @@ -387,14 +387,14 @@ class ConnectResponse : public ProtoMessage { const char *message_name() const override { return "connect_response"; } #endif bool invalid_password{false}; - static const FieldMetaV2 FIELDS_V2[1]; - static constexpr size_t FIELD_COUNT_V2 = 1; - static constexpr size_t REPEATED_COUNT_V2 = 0; - // Virtual metadata getters - const FieldMetaV2 *get_field_metadata_v2() const override { return FIELDS_V2; } - size_t get_field_count_v2() const override { return FIELD_COUNT_V2; } - const RepeatedFieldMetaV2 *get_repeated_field_metadata_v2() const override { return nullptr; } - size_t get_repeated_field_count_v2() const override { return REPEATED_COUNT_V2; } + static const FieldMetaV3 FIELDS_V3[1]; + static constexpr size_t FIELD_COUNT_V3 = 1; + static constexpr size_t REPEATED_COUNT_V3 = 0; + // V3 metadata getters + const FieldMetaV3 *get_field_metadata_v3() const override { return FIELDS_V3; } + size_t get_field_count_v3() const override { return FIELD_COUNT_V3; } + const RepeatedFieldMetaV3 *get_repeated_field_metadata_v3() const override { return nullptr; } + size_t get_repeated_field_count_v3() const override { return REPEATED_COUNT_V3; } #ifdef HAS_PROTO_MESSAGE_DUMP void dump_to(std::string &out) const override; #endif @@ -408,13 +408,13 @@ class DisconnectRequest : public ProtoMessage { #ifdef HAS_PROTO_MESSAGE_DUMP const char *message_name() const override { return "disconnect_request"; } #endif - static constexpr size_t FIELD_COUNT_V2 = 0; - static constexpr size_t REPEATED_COUNT_V2 = 0; - // Virtual metadata getters - const FieldMetaV2 *get_field_metadata_v2() const override { return nullptr; } - size_t get_field_count_v2() const override { return FIELD_COUNT_V2; } - const RepeatedFieldMetaV2 *get_repeated_field_metadata_v2() const override { return nullptr; } - size_t get_repeated_field_count_v2() const override { return REPEATED_COUNT_V2; } + static constexpr size_t FIELD_COUNT_V3 = 0; + static constexpr size_t REPEATED_COUNT_V3 = 0; + // V3 metadata getters + const FieldMetaV3 *get_field_metadata_v3() const override { return nullptr; } + size_t get_field_count_v3() const override { return FIELD_COUNT_V3; } + const RepeatedFieldMetaV3 *get_repeated_field_metadata_v3() const override { return nullptr; } + size_t get_repeated_field_count_v3() const override { return REPEATED_COUNT_V3; } #ifdef HAS_PROTO_MESSAGE_DUMP void dump_to(std::string &out) const override; #endif @@ -428,13 +428,13 @@ class DisconnectResponse : public ProtoMessage { #ifdef HAS_PROTO_MESSAGE_DUMP const char *message_name() const override { return "disconnect_response"; } #endif - static constexpr size_t FIELD_COUNT_V2 = 0; - static constexpr size_t REPEATED_COUNT_V2 = 0; - // Virtual metadata getters - const FieldMetaV2 *get_field_metadata_v2() const override { return nullptr; } - size_t get_field_count_v2() const override { return FIELD_COUNT_V2; } - const RepeatedFieldMetaV2 *get_repeated_field_metadata_v2() const override { return nullptr; } - size_t get_repeated_field_count_v2() const override { return REPEATED_COUNT_V2; } + static constexpr size_t FIELD_COUNT_V3 = 0; + static constexpr size_t REPEATED_COUNT_V3 = 0; + // V3 metadata getters + const FieldMetaV3 *get_field_metadata_v3() const override { return nullptr; } + size_t get_field_count_v3() const override { return FIELD_COUNT_V3; } + const RepeatedFieldMetaV3 *get_repeated_field_metadata_v3() const override { return nullptr; } + size_t get_repeated_field_count_v3() const override { return REPEATED_COUNT_V3; } #ifdef HAS_PROTO_MESSAGE_DUMP void dump_to(std::string &out) const override; #endif @@ -448,13 +448,13 @@ class PingRequest : public ProtoMessage { #ifdef HAS_PROTO_MESSAGE_DUMP const char *message_name() const override { return "ping_request"; } #endif - static constexpr size_t FIELD_COUNT_V2 = 0; - static constexpr size_t REPEATED_COUNT_V2 = 0; - // Virtual metadata getters - const FieldMetaV2 *get_field_metadata_v2() const override { return nullptr; } - size_t get_field_count_v2() const override { return FIELD_COUNT_V2; } - const RepeatedFieldMetaV2 *get_repeated_field_metadata_v2() const override { return nullptr; } - size_t get_repeated_field_count_v2() const override { return REPEATED_COUNT_V2; } + static constexpr size_t FIELD_COUNT_V3 = 0; + static constexpr size_t REPEATED_COUNT_V3 = 0; + // V3 metadata getters + const FieldMetaV3 *get_field_metadata_v3() const override { return nullptr; } + size_t get_field_count_v3() const override { return FIELD_COUNT_V3; } + const RepeatedFieldMetaV3 *get_repeated_field_metadata_v3() const override { return nullptr; } + size_t get_repeated_field_count_v3() const override { return REPEATED_COUNT_V3; } #ifdef HAS_PROTO_MESSAGE_DUMP void dump_to(std::string &out) const override; #endif @@ -468,13 +468,13 @@ class PingResponse : public ProtoMessage { #ifdef HAS_PROTO_MESSAGE_DUMP const char *message_name() const override { return "ping_response"; } #endif - static constexpr size_t FIELD_COUNT_V2 = 0; - static constexpr size_t REPEATED_COUNT_V2 = 0; - // Virtual metadata getters - const FieldMetaV2 *get_field_metadata_v2() const override { return nullptr; } - size_t get_field_count_v2() const override { return FIELD_COUNT_V2; } - const RepeatedFieldMetaV2 *get_repeated_field_metadata_v2() const override { return nullptr; } - size_t get_repeated_field_count_v2() const override { return REPEATED_COUNT_V2; } + static constexpr size_t FIELD_COUNT_V3 = 0; + static constexpr size_t REPEATED_COUNT_V3 = 0; + // V3 metadata getters + const FieldMetaV3 *get_field_metadata_v3() const override { return nullptr; } + size_t get_field_count_v3() const override { return FIELD_COUNT_V3; } + const RepeatedFieldMetaV3 *get_repeated_field_metadata_v3() const override { return nullptr; } + size_t get_repeated_field_count_v3() const override { return REPEATED_COUNT_V3; } #ifdef HAS_PROTO_MESSAGE_DUMP void dump_to(std::string &out) const override; #endif @@ -488,13 +488,13 @@ class DeviceInfoRequest : public ProtoMessage { #ifdef HAS_PROTO_MESSAGE_DUMP const char *message_name() const override { return "device_info_request"; } #endif - static constexpr size_t FIELD_COUNT_V2 = 0; - static constexpr size_t REPEATED_COUNT_V2 = 0; - // Virtual metadata getters - const FieldMetaV2 *get_field_metadata_v2() const override { return nullptr; } - size_t get_field_count_v2() const override { return FIELD_COUNT_V2; } - const RepeatedFieldMetaV2 *get_repeated_field_metadata_v2() const override { return nullptr; } - size_t get_repeated_field_count_v2() const override { return REPEATED_COUNT_V2; } + static constexpr size_t FIELD_COUNT_V3 = 0; + static constexpr size_t REPEATED_COUNT_V3 = 0; + // V3 metadata getters + const FieldMetaV3 *get_field_metadata_v3() const override { return nullptr; } + size_t get_field_count_v3() const override { return FIELD_COUNT_V3; } + const RepeatedFieldMetaV3 *get_repeated_field_metadata_v3() const override { return nullptr; } + size_t get_repeated_field_count_v3() const override { return REPEATED_COUNT_V3; } #ifdef HAS_PROTO_MESSAGE_DUMP void dump_to(std::string &out) const override; #endif @@ -505,14 +505,14 @@ class AreaInfo : public ProtoMessage { public: uint32_t area_id{0}; std::string name{}; - static const FieldMetaV2 FIELDS_V2[2]; - static constexpr size_t FIELD_COUNT_V2 = 2; - static constexpr size_t REPEATED_COUNT_V2 = 0; - // Virtual metadata getters - const FieldMetaV2 *get_field_metadata_v2() const override { return FIELDS_V2; } - size_t get_field_count_v2() const override { return FIELD_COUNT_V2; } - const RepeatedFieldMetaV2 *get_repeated_field_metadata_v2() const override { return nullptr; } - size_t get_repeated_field_count_v2() const override { return REPEATED_COUNT_V2; } + static const FieldMetaV3 FIELDS_V3[2]; + static constexpr size_t FIELD_COUNT_V3 = 2; + static constexpr size_t REPEATED_COUNT_V3 = 0; + // V3 metadata getters + const FieldMetaV3 *get_field_metadata_v3() const override { return FIELDS_V3; } + size_t get_field_count_v3() const override { return FIELD_COUNT_V3; } + const RepeatedFieldMetaV3 *get_repeated_field_metadata_v3() const override { return nullptr; } + size_t get_repeated_field_count_v3() const override { return REPEATED_COUNT_V3; } #ifdef HAS_PROTO_MESSAGE_DUMP void dump_to(std::string &out) const override; #endif @@ -524,14 +524,14 @@ class DeviceInfo : public ProtoMessage { uint32_t device_id{0}; std::string name{}; uint32_t area_id{0}; - static const FieldMetaV2 FIELDS_V2[3]; - static constexpr size_t FIELD_COUNT_V2 = 3; - static constexpr size_t REPEATED_COUNT_V2 = 0; - // Virtual metadata getters - const FieldMetaV2 *get_field_metadata_v2() const override { return FIELDS_V2; } - size_t get_field_count_v2() const override { return FIELD_COUNT_V2; } - const RepeatedFieldMetaV2 *get_repeated_field_metadata_v2() const override { return nullptr; } - size_t get_repeated_field_count_v2() const override { return REPEATED_COUNT_V2; } + static const FieldMetaV3 FIELDS_V3[3]; + static constexpr size_t FIELD_COUNT_V3 = 3; + static constexpr size_t REPEATED_COUNT_V3 = 0; + // V3 metadata getters + const FieldMetaV3 *get_field_metadata_v3() const override { return FIELDS_V3; } + size_t get_field_count_v3() const override { return FIELD_COUNT_V3; } + const RepeatedFieldMetaV3 *get_repeated_field_metadata_v3() const override { return nullptr; } + size_t get_repeated_field_count_v3() const override { return REPEATED_COUNT_V3; } #ifdef HAS_PROTO_MESSAGE_DUMP void dump_to(std::string &out) const override; #endif @@ -567,15 +567,15 @@ class DeviceInfoResponse : public ProtoMessage { std::vector devices{}; std::vector areas{}; AreaInfo area{}; - static const FieldMetaV2 FIELDS_V2[20]; - static constexpr size_t FIELD_COUNT_V2 = 20; - static const RepeatedFieldMetaV2 REPEATED_FIELDS_V2[2]; - static constexpr size_t REPEATED_COUNT_V2 = 2; - // Virtual metadata getters - const FieldMetaV2 *get_field_metadata_v2() const override { return FIELDS_V2; } - size_t get_field_count_v2() const override { return FIELD_COUNT_V2; } - const RepeatedFieldMetaV2 *get_repeated_field_metadata_v2() const override { return REPEATED_FIELDS_V2; } - size_t get_repeated_field_count_v2() const override { return REPEATED_COUNT_V2; } + static const FieldMetaV3 FIELDS_V3[20]; + static constexpr size_t FIELD_COUNT_V3 = 20; + static const RepeatedFieldMetaV3 REPEATED_FIELDS_V3[2]; + static constexpr size_t REPEATED_COUNT_V3 = 2; + // V3 metadata getters + const FieldMetaV3 *get_field_metadata_v3() const override { return FIELDS_V3; } + size_t get_field_count_v3() const override { return FIELD_COUNT_V3; } + const RepeatedFieldMetaV3 *get_repeated_field_metadata_v3() const override { return REPEATED_FIELDS_V3; } + size_t get_repeated_field_count_v3() const override { return REPEATED_COUNT_V3; } #ifdef HAS_PROTO_MESSAGE_DUMP void dump_to(std::string &out) const override; #endif @@ -589,13 +589,13 @@ class ListEntitiesRequest : public ProtoMessage { #ifdef HAS_PROTO_MESSAGE_DUMP const char *message_name() const override { return "list_entities_request"; } #endif - static constexpr size_t FIELD_COUNT_V2 = 0; - static constexpr size_t REPEATED_COUNT_V2 = 0; - // Virtual metadata getters - const FieldMetaV2 *get_field_metadata_v2() const override { return nullptr; } - size_t get_field_count_v2() const override { return FIELD_COUNT_V2; } - const RepeatedFieldMetaV2 *get_repeated_field_metadata_v2() const override { return nullptr; } - size_t get_repeated_field_count_v2() const override { return REPEATED_COUNT_V2; } + static constexpr size_t FIELD_COUNT_V3 = 0; + static constexpr size_t REPEATED_COUNT_V3 = 0; + // V3 metadata getters + const FieldMetaV3 *get_field_metadata_v3() const override { return nullptr; } + size_t get_field_count_v3() const override { return FIELD_COUNT_V3; } + const RepeatedFieldMetaV3 *get_repeated_field_metadata_v3() const override { return nullptr; } + size_t get_repeated_field_count_v3() const override { return REPEATED_COUNT_V3; } #ifdef HAS_PROTO_MESSAGE_DUMP void dump_to(std::string &out) const override; #endif @@ -609,13 +609,13 @@ class ListEntitiesDoneResponse : public ProtoMessage { #ifdef HAS_PROTO_MESSAGE_DUMP const char *message_name() const override { return "list_entities_done_response"; } #endif - static constexpr size_t FIELD_COUNT_V2 = 0; - static constexpr size_t REPEATED_COUNT_V2 = 0; - // Virtual metadata getters - const FieldMetaV2 *get_field_metadata_v2() const override { return nullptr; } - size_t get_field_count_v2() const override { return FIELD_COUNT_V2; } - const RepeatedFieldMetaV2 *get_repeated_field_metadata_v2() const override { return nullptr; } - size_t get_repeated_field_count_v2() const override { return REPEATED_COUNT_V2; } + static constexpr size_t FIELD_COUNT_V3 = 0; + static constexpr size_t REPEATED_COUNT_V3 = 0; + // V3 metadata getters + const FieldMetaV3 *get_field_metadata_v3() const override { return nullptr; } + size_t get_field_count_v3() const override { return FIELD_COUNT_V3; } + const RepeatedFieldMetaV3 *get_repeated_field_metadata_v3() const override { return nullptr; } + size_t get_repeated_field_count_v3() const override { return REPEATED_COUNT_V3; } #ifdef HAS_PROTO_MESSAGE_DUMP void dump_to(std::string &out) const override; #endif @@ -629,13 +629,13 @@ class SubscribeStatesRequest : public ProtoMessage { #ifdef HAS_PROTO_MESSAGE_DUMP const char *message_name() const override { return "subscribe_states_request"; } #endif - static constexpr size_t FIELD_COUNT_V2 = 0; - static constexpr size_t REPEATED_COUNT_V2 = 0; - // Virtual metadata getters - const FieldMetaV2 *get_field_metadata_v2() const override { return nullptr; } - size_t get_field_count_v2() const override { return FIELD_COUNT_V2; } - const RepeatedFieldMetaV2 *get_repeated_field_metadata_v2() const override { return nullptr; } - size_t get_repeated_field_count_v2() const override { return REPEATED_COUNT_V2; } + static constexpr size_t FIELD_COUNT_V3 = 0; + static constexpr size_t REPEATED_COUNT_V3 = 0; + // V3 metadata getters + const FieldMetaV3 *get_field_metadata_v3() const override { return nullptr; } + size_t get_field_count_v3() const override { return FIELD_COUNT_V3; } + const RepeatedFieldMetaV3 *get_repeated_field_metadata_v3() const override { return nullptr; } + size_t get_repeated_field_count_v3() const override { return REPEATED_COUNT_V3; } #ifdef HAS_PROTO_MESSAGE_DUMP void dump_to(std::string &out) const override; #endif @@ -652,14 +652,14 @@ class ListEntitiesBinarySensorResponse : public InfoResponseProtoMessage { #endif std::string device_class{}; bool is_status_binary_sensor{false}; - static const FieldMetaV2 FIELDS_V2[10]; - static constexpr size_t FIELD_COUNT_V2 = 10; - static constexpr size_t REPEATED_COUNT_V2 = 0; - // Virtual metadata getters - const FieldMetaV2 *get_field_metadata_v2() const override { return FIELDS_V2; } - size_t get_field_count_v2() const override { return FIELD_COUNT_V2; } - const RepeatedFieldMetaV2 *get_repeated_field_metadata_v2() const override { return nullptr; } - size_t get_repeated_field_count_v2() const override { return REPEATED_COUNT_V2; } + static const FieldMetaV3 FIELDS_V3[10]; + static constexpr size_t FIELD_COUNT_V3 = 10; + static constexpr size_t REPEATED_COUNT_V3 = 0; + // V3 metadata getters + const FieldMetaV3 *get_field_metadata_v3() const override { return FIELDS_V3; } + size_t get_field_count_v3() const override { return FIELD_COUNT_V3; } + const RepeatedFieldMetaV3 *get_repeated_field_metadata_v3() const override { return nullptr; } + size_t get_repeated_field_count_v3() const override { return REPEATED_COUNT_V3; } #ifdef HAS_PROTO_MESSAGE_DUMP void dump_to(std::string &out) const override; #endif @@ -675,14 +675,14 @@ class BinarySensorStateResponse : public StateResponseProtoMessage { #endif bool state{false}; bool missing_state{false}; - static const FieldMetaV2 FIELDS_V2[4]; - static constexpr size_t FIELD_COUNT_V2 = 4; - static constexpr size_t REPEATED_COUNT_V2 = 0; - // Virtual metadata getters - const FieldMetaV2 *get_field_metadata_v2() const override { return FIELDS_V2; } - size_t get_field_count_v2() const override { return FIELD_COUNT_V2; } - const RepeatedFieldMetaV2 *get_repeated_field_metadata_v2() const override { return nullptr; } - size_t get_repeated_field_count_v2() const override { return REPEATED_COUNT_V2; } + static const FieldMetaV3 FIELDS_V3[4]; + static constexpr size_t FIELD_COUNT_V3 = 4; + static constexpr size_t REPEATED_COUNT_V3 = 0; + // V3 metadata getters + const FieldMetaV3 *get_field_metadata_v3() const override { return FIELDS_V3; } + size_t get_field_count_v3() const override { return FIELD_COUNT_V3; } + const RepeatedFieldMetaV3 *get_repeated_field_metadata_v3() const override { return nullptr; } + size_t get_repeated_field_count_v3() const override { return REPEATED_COUNT_V3; } #ifdef HAS_PROTO_MESSAGE_DUMP void dump_to(std::string &out) const override; #endif @@ -703,14 +703,14 @@ class ListEntitiesCoverResponse : public InfoResponseProtoMessage { bool supports_tilt{false}; std::string device_class{}; bool supports_stop{false}; - static const FieldMetaV2 FIELDS_V2[13]; - static constexpr size_t FIELD_COUNT_V2 = 13; - static constexpr size_t REPEATED_COUNT_V2 = 0; - // Virtual metadata getters - const FieldMetaV2 *get_field_metadata_v2() const override { return FIELDS_V2; } - size_t get_field_count_v2() const override { return FIELD_COUNT_V2; } - const RepeatedFieldMetaV2 *get_repeated_field_metadata_v2() const override { return nullptr; } - size_t get_repeated_field_count_v2() const override { return REPEATED_COUNT_V2; } + static const FieldMetaV3 FIELDS_V3[13]; + static constexpr size_t FIELD_COUNT_V3 = 13; + static constexpr size_t REPEATED_COUNT_V3 = 0; + // V3 metadata getters + const FieldMetaV3 *get_field_metadata_v3() const override { return FIELDS_V3; } + size_t get_field_count_v3() const override { return FIELD_COUNT_V3; } + const RepeatedFieldMetaV3 *get_repeated_field_metadata_v3() const override { return nullptr; } + size_t get_repeated_field_count_v3() const override { return REPEATED_COUNT_V3; } #ifdef HAS_PROTO_MESSAGE_DUMP void dump_to(std::string &out) const override; #endif @@ -728,14 +728,14 @@ class CoverStateResponse : public StateResponseProtoMessage { float position{0.0f}; float tilt{0.0f}; enums::CoverOperation current_operation{}; - static const FieldMetaV2 FIELDS_V2[6]; - static constexpr size_t FIELD_COUNT_V2 = 6; - static constexpr size_t REPEATED_COUNT_V2 = 0; - // Virtual metadata getters - const FieldMetaV2 *get_field_metadata_v2() const override { return FIELDS_V2; } - size_t get_field_count_v2() const override { return FIELD_COUNT_V2; } - const RepeatedFieldMetaV2 *get_repeated_field_metadata_v2() const override { return nullptr; } - size_t get_repeated_field_count_v2() const override { return REPEATED_COUNT_V2; } + static const FieldMetaV3 FIELDS_V3[6]; + static constexpr size_t FIELD_COUNT_V3 = 6; + static constexpr size_t REPEATED_COUNT_V3 = 0; + // V3 metadata getters + const FieldMetaV3 *get_field_metadata_v3() const override { return FIELDS_V3; } + size_t get_field_count_v3() const override { return FIELD_COUNT_V3; } + const RepeatedFieldMetaV3 *get_repeated_field_metadata_v3() const override { return nullptr; } + size_t get_repeated_field_count_v3() const override { return REPEATED_COUNT_V3; } #ifdef HAS_PROTO_MESSAGE_DUMP void dump_to(std::string &out) const override; #endif @@ -757,14 +757,14 @@ class CoverCommandRequest : public ProtoMessage { bool has_tilt{false}; float tilt{0.0f}; bool stop{false}; - static const FieldMetaV2 FIELDS_V2[8]; - static constexpr size_t FIELD_COUNT_V2 = 8; - static constexpr size_t REPEATED_COUNT_V2 = 0; - // Virtual metadata getters - const FieldMetaV2 *get_field_metadata_v2() const override { return FIELDS_V2; } - size_t get_field_count_v2() const override { return FIELD_COUNT_V2; } - const RepeatedFieldMetaV2 *get_repeated_field_metadata_v2() const override { return nullptr; } - size_t get_repeated_field_count_v2() const override { return REPEATED_COUNT_V2; } + static const FieldMetaV3 FIELDS_V3[8]; + static constexpr size_t FIELD_COUNT_V3 = 8; + static constexpr size_t REPEATED_COUNT_V3 = 0; + // V3 metadata getters + const FieldMetaV3 *get_field_metadata_v3() const override { return FIELDS_V3; } + size_t get_field_count_v3() const override { return FIELD_COUNT_V3; } + const RepeatedFieldMetaV3 *get_repeated_field_metadata_v3() const override { return nullptr; } + size_t get_repeated_field_count_v3() const override { return REPEATED_COUNT_V3; } #ifdef HAS_PROTO_MESSAGE_DUMP void dump_to(std::string &out) const override; #endif @@ -785,15 +785,15 @@ class ListEntitiesFanResponse : public InfoResponseProtoMessage { bool supports_direction{false}; int32_t supported_speed_count{0}; std::vector supported_preset_modes{}; - static const FieldMetaV2 FIELDS_V2[12]; - static constexpr size_t FIELD_COUNT_V2 = 12; - static const RepeatedFieldMetaV2 REPEATED_FIELDS_V2[1]; - static constexpr size_t REPEATED_COUNT_V2 = 1; - // Virtual metadata getters - const FieldMetaV2 *get_field_metadata_v2() const override { return FIELDS_V2; } - size_t get_field_count_v2() const override { return FIELD_COUNT_V2; } - const RepeatedFieldMetaV2 *get_repeated_field_metadata_v2() const override { return REPEATED_FIELDS_V2; } - size_t get_repeated_field_count_v2() const override { return REPEATED_COUNT_V2; } + static const FieldMetaV3 FIELDS_V3[12]; + static constexpr size_t FIELD_COUNT_V3 = 12; + static const RepeatedFieldMetaV3 REPEATED_FIELDS_V3[1]; + static constexpr size_t REPEATED_COUNT_V3 = 1; + // V3 metadata getters + const FieldMetaV3 *get_field_metadata_v3() const override { return FIELDS_V3; } + size_t get_field_count_v3() const override { return FIELD_COUNT_V3; } + const RepeatedFieldMetaV3 *get_repeated_field_metadata_v3() const override { return REPEATED_FIELDS_V3; } + size_t get_repeated_field_count_v3() const override { return REPEATED_COUNT_V3; } #ifdef HAS_PROTO_MESSAGE_DUMP void dump_to(std::string &out) const override; #endif @@ -813,14 +813,14 @@ class FanStateResponse : public StateResponseProtoMessage { enums::FanDirection direction{}; int32_t speed_level{0}; std::string preset_mode{}; - static const FieldMetaV2 FIELDS_V2[8]; - static constexpr size_t FIELD_COUNT_V2 = 8; - static constexpr size_t REPEATED_COUNT_V2 = 0; - // Virtual metadata getters - const FieldMetaV2 *get_field_metadata_v2() const override { return FIELDS_V2; } - size_t get_field_count_v2() const override { return FIELD_COUNT_V2; } - const RepeatedFieldMetaV2 *get_repeated_field_metadata_v2() const override { return nullptr; } - size_t get_repeated_field_count_v2() const override { return REPEATED_COUNT_V2; } + static const FieldMetaV3 FIELDS_V3[8]; + static constexpr size_t FIELD_COUNT_V3 = 8; + static constexpr size_t REPEATED_COUNT_V3 = 0; + // V3 metadata getters + const FieldMetaV3 *get_field_metadata_v3() const override { return FIELDS_V3; } + size_t get_field_count_v3() const override { return FIELD_COUNT_V3; } + const RepeatedFieldMetaV3 *get_repeated_field_metadata_v3() const override { return nullptr; } + size_t get_repeated_field_count_v3() const override { return REPEATED_COUNT_V3; } #ifdef HAS_PROTO_MESSAGE_DUMP void dump_to(std::string &out) const override; #endif @@ -847,14 +847,14 @@ class FanCommandRequest : public ProtoMessage { int32_t speed_level{0}; bool has_preset_mode{false}; std::string preset_mode{}; - static const FieldMetaV2 FIELDS_V2[13]; - static constexpr size_t FIELD_COUNT_V2 = 13; - static constexpr size_t REPEATED_COUNT_V2 = 0; - // Virtual metadata getters - const FieldMetaV2 *get_field_metadata_v2() const override { return FIELDS_V2; } - size_t get_field_count_v2() const override { return FIELD_COUNT_V2; } - const RepeatedFieldMetaV2 *get_repeated_field_metadata_v2() const override { return nullptr; } - size_t get_repeated_field_count_v2() const override { return REPEATED_COUNT_V2; } + static const FieldMetaV3 FIELDS_V3[13]; + static constexpr size_t FIELD_COUNT_V3 = 13; + static constexpr size_t REPEATED_COUNT_V3 = 0; + // V3 metadata getters + const FieldMetaV3 *get_field_metadata_v3() const override { return FIELDS_V3; } + size_t get_field_count_v3() const override { return FIELD_COUNT_V3; } + const RepeatedFieldMetaV3 *get_repeated_field_metadata_v3() const override { return nullptr; } + size_t get_repeated_field_count_v3() const override { return REPEATED_COUNT_V3; } #ifdef HAS_PROTO_MESSAGE_DUMP void dump_to(std::string &out) const override; #endif @@ -878,15 +878,15 @@ class ListEntitiesLightResponse : public InfoResponseProtoMessage { float min_mireds{0.0f}; float max_mireds{0.0f}; std::vector effects{}; - static const FieldMetaV2 FIELDS_V2[14]; - static constexpr size_t FIELD_COUNT_V2 = 14; - static const RepeatedFieldMetaV2 REPEATED_FIELDS_V2[2]; - static constexpr size_t REPEATED_COUNT_V2 = 2; - // Virtual metadata getters - const FieldMetaV2 *get_field_metadata_v2() const override { return FIELDS_V2; } - size_t get_field_count_v2() const override { return FIELD_COUNT_V2; } - const RepeatedFieldMetaV2 *get_repeated_field_metadata_v2() const override { return REPEATED_FIELDS_V2; } - size_t get_repeated_field_count_v2() const override { return REPEATED_COUNT_V2; } + static const FieldMetaV3 FIELDS_V3[14]; + static constexpr size_t FIELD_COUNT_V3 = 14; + static const RepeatedFieldMetaV3 REPEATED_FIELDS_V3[2]; + static constexpr size_t REPEATED_COUNT_V3 = 2; + // V3 metadata getters + const FieldMetaV3 *get_field_metadata_v3() const override { return FIELDS_V3; } + size_t get_field_count_v3() const override { return FIELD_COUNT_V3; } + const RepeatedFieldMetaV3 *get_repeated_field_metadata_v3() const override { return REPEATED_FIELDS_V3; } + size_t get_repeated_field_count_v3() const override { return REPEATED_COUNT_V3; } #ifdef HAS_PROTO_MESSAGE_DUMP void dump_to(std::string &out) const override; #endif @@ -912,14 +912,14 @@ class LightStateResponse : public StateResponseProtoMessage { float cold_white{0.0f}; float warm_white{0.0f}; std::string effect{}; - static const FieldMetaV2 FIELDS_V2[14]; - static constexpr size_t FIELD_COUNT_V2 = 14; - static constexpr size_t REPEATED_COUNT_V2 = 0; - // Virtual metadata getters - const FieldMetaV2 *get_field_metadata_v2() const override { return FIELDS_V2; } - size_t get_field_count_v2() const override { return FIELD_COUNT_V2; } - const RepeatedFieldMetaV2 *get_repeated_field_metadata_v2() const override { return nullptr; } - size_t get_repeated_field_count_v2() const override { return REPEATED_COUNT_V2; } + static const FieldMetaV3 FIELDS_V3[14]; + static constexpr size_t FIELD_COUNT_V3 = 14; + static constexpr size_t REPEATED_COUNT_V3 = 0; + // V3 metadata getters + const FieldMetaV3 *get_field_metadata_v3() const override { return FIELDS_V3; } + size_t get_field_count_v3() const override { return FIELD_COUNT_V3; } + const RepeatedFieldMetaV3 *get_repeated_field_metadata_v3() const override { return nullptr; } + size_t get_repeated_field_count_v3() const override { return REPEATED_COUNT_V3; } #ifdef HAS_PROTO_MESSAGE_DUMP void dump_to(std::string &out) const override; #endif @@ -960,14 +960,14 @@ class LightCommandRequest : public ProtoMessage { uint32_t flash_length{0}; bool has_effect{false}; std::string effect{}; - static const FieldMetaV2 FIELDS_V2[27]; - static constexpr size_t FIELD_COUNT_V2 = 27; - static constexpr size_t REPEATED_COUNT_V2 = 0; - // Virtual metadata getters - const FieldMetaV2 *get_field_metadata_v2() const override { return FIELDS_V2; } - size_t get_field_count_v2() const override { return FIELD_COUNT_V2; } - const RepeatedFieldMetaV2 *get_repeated_field_metadata_v2() const override { return nullptr; } - size_t get_repeated_field_count_v2() const override { return REPEATED_COUNT_V2; } + static const FieldMetaV3 FIELDS_V3[27]; + static constexpr size_t FIELD_COUNT_V3 = 27; + static constexpr size_t REPEATED_COUNT_V3 = 0; + // V3 metadata getters + const FieldMetaV3 *get_field_metadata_v3() const override { return FIELDS_V3; } + size_t get_field_count_v3() const override { return FIELD_COUNT_V3; } + const RepeatedFieldMetaV3 *get_repeated_field_metadata_v3() const override { return nullptr; } + size_t get_repeated_field_count_v3() const override { return REPEATED_COUNT_V3; } #ifdef HAS_PROTO_MESSAGE_DUMP void dump_to(std::string &out) const override; #endif @@ -989,14 +989,14 @@ class ListEntitiesSensorResponse : public InfoResponseProtoMessage { std::string device_class{}; enums::SensorStateClass state_class{}; enums::SensorLastResetType legacy_last_reset_type{}; - static const FieldMetaV2 FIELDS_V2[14]; - static constexpr size_t FIELD_COUNT_V2 = 14; - static constexpr size_t REPEATED_COUNT_V2 = 0; - // Virtual metadata getters - const FieldMetaV2 *get_field_metadata_v2() const override { return FIELDS_V2; } - size_t get_field_count_v2() const override { return FIELD_COUNT_V2; } - const RepeatedFieldMetaV2 *get_repeated_field_metadata_v2() const override { return nullptr; } - size_t get_repeated_field_count_v2() const override { return REPEATED_COUNT_V2; } + static const FieldMetaV3 FIELDS_V3[14]; + static constexpr size_t FIELD_COUNT_V3 = 14; + static constexpr size_t REPEATED_COUNT_V3 = 0; + // V3 metadata getters + const FieldMetaV3 *get_field_metadata_v3() const override { return FIELDS_V3; } + size_t get_field_count_v3() const override { return FIELD_COUNT_V3; } + const RepeatedFieldMetaV3 *get_repeated_field_metadata_v3() const override { return nullptr; } + size_t get_repeated_field_count_v3() const override { return REPEATED_COUNT_V3; } #ifdef HAS_PROTO_MESSAGE_DUMP void dump_to(std::string &out) const override; #endif @@ -1012,14 +1012,14 @@ class SensorStateResponse : public StateResponseProtoMessage { #endif float state{0.0f}; bool missing_state{false}; - static const FieldMetaV2 FIELDS_V2[4]; - static constexpr size_t FIELD_COUNT_V2 = 4; - static constexpr size_t REPEATED_COUNT_V2 = 0; - // Virtual metadata getters - const FieldMetaV2 *get_field_metadata_v2() const override { return FIELDS_V2; } - size_t get_field_count_v2() const override { return FIELD_COUNT_V2; } - const RepeatedFieldMetaV2 *get_repeated_field_metadata_v2() const override { return nullptr; } - size_t get_repeated_field_count_v2() const override { return REPEATED_COUNT_V2; } + static const FieldMetaV3 FIELDS_V3[4]; + static constexpr size_t FIELD_COUNT_V3 = 4; + static constexpr size_t REPEATED_COUNT_V3 = 0; + // V3 metadata getters + const FieldMetaV3 *get_field_metadata_v3() const override { return FIELDS_V3; } + size_t get_field_count_v3() const override { return FIELD_COUNT_V3; } + const RepeatedFieldMetaV3 *get_repeated_field_metadata_v3() const override { return nullptr; } + size_t get_repeated_field_count_v3() const override { return REPEATED_COUNT_V3; } #ifdef HAS_PROTO_MESSAGE_DUMP void dump_to(std::string &out) const override; #endif @@ -1037,14 +1037,14 @@ class ListEntitiesSwitchResponse : public InfoResponseProtoMessage { #endif bool assumed_state{false}; std::string device_class{}; - static const FieldMetaV2 FIELDS_V2[10]; - static constexpr size_t FIELD_COUNT_V2 = 10; - static constexpr size_t REPEATED_COUNT_V2 = 0; - // Virtual metadata getters - const FieldMetaV2 *get_field_metadata_v2() const override { return FIELDS_V2; } - size_t get_field_count_v2() const override { return FIELD_COUNT_V2; } - const RepeatedFieldMetaV2 *get_repeated_field_metadata_v2() const override { return nullptr; } - size_t get_repeated_field_count_v2() const override { return REPEATED_COUNT_V2; } + static const FieldMetaV3 FIELDS_V3[10]; + static constexpr size_t FIELD_COUNT_V3 = 10; + static constexpr size_t REPEATED_COUNT_V3 = 0; + // V3 metadata getters + const FieldMetaV3 *get_field_metadata_v3() const override { return FIELDS_V3; } + size_t get_field_count_v3() const override { return FIELD_COUNT_V3; } + const RepeatedFieldMetaV3 *get_repeated_field_metadata_v3() const override { return nullptr; } + size_t get_repeated_field_count_v3() const override { return REPEATED_COUNT_V3; } #ifdef HAS_PROTO_MESSAGE_DUMP void dump_to(std::string &out) const override; #endif @@ -1059,14 +1059,14 @@ class SwitchStateResponse : public StateResponseProtoMessage { const char *message_name() const override { return "switch_state_response"; } #endif bool state{false}; - static const FieldMetaV2 FIELDS_V2[3]; - static constexpr size_t FIELD_COUNT_V2 = 3; - static constexpr size_t REPEATED_COUNT_V2 = 0; - // Virtual metadata getters - const FieldMetaV2 *get_field_metadata_v2() const override { return FIELDS_V2; } - size_t get_field_count_v2() const override { return FIELD_COUNT_V2; } - const RepeatedFieldMetaV2 *get_repeated_field_metadata_v2() const override { return nullptr; } - size_t get_repeated_field_count_v2() const override { return REPEATED_COUNT_V2; } + static const FieldMetaV3 FIELDS_V3[3]; + static constexpr size_t FIELD_COUNT_V3 = 3; + static constexpr size_t REPEATED_COUNT_V3 = 0; + // V3 metadata getters + const FieldMetaV3 *get_field_metadata_v3() const override { return FIELDS_V3; } + size_t get_field_count_v3() const override { return FIELD_COUNT_V3; } + const RepeatedFieldMetaV3 *get_repeated_field_metadata_v3() const override { return nullptr; } + size_t get_repeated_field_count_v3() const override { return REPEATED_COUNT_V3; } #ifdef HAS_PROTO_MESSAGE_DUMP void dump_to(std::string &out) const override; #endif @@ -1082,14 +1082,14 @@ class SwitchCommandRequest : public ProtoMessage { #endif uint32_t key{0}; bool state{false}; - static const FieldMetaV2 FIELDS_V2[2]; - static constexpr size_t FIELD_COUNT_V2 = 2; - static constexpr size_t REPEATED_COUNT_V2 = 0; - // Virtual metadata getters - const FieldMetaV2 *get_field_metadata_v2() const override { return FIELDS_V2; } - size_t get_field_count_v2() const override { return FIELD_COUNT_V2; } - const RepeatedFieldMetaV2 *get_repeated_field_metadata_v2() const override { return nullptr; } - size_t get_repeated_field_count_v2() const override { return REPEATED_COUNT_V2; } + static const FieldMetaV3 FIELDS_V3[2]; + static constexpr size_t FIELD_COUNT_V3 = 2; + static constexpr size_t REPEATED_COUNT_V3 = 0; + // V3 metadata getters + const FieldMetaV3 *get_field_metadata_v3() const override { return FIELDS_V3; } + size_t get_field_count_v3() const override { return FIELD_COUNT_V3; } + const RepeatedFieldMetaV3 *get_repeated_field_metadata_v3() const override { return nullptr; } + size_t get_repeated_field_count_v3() const override { return REPEATED_COUNT_V3; } #ifdef HAS_PROTO_MESSAGE_DUMP void dump_to(std::string &out) const override; #endif @@ -1106,14 +1106,14 @@ class ListEntitiesTextSensorResponse : public InfoResponseProtoMessage { const char *message_name() const override { return "list_entities_text_sensor_response"; } #endif std::string device_class{}; - static const FieldMetaV2 FIELDS_V2[9]; - static constexpr size_t FIELD_COUNT_V2 = 9; - static constexpr size_t REPEATED_COUNT_V2 = 0; - // Virtual metadata getters - const FieldMetaV2 *get_field_metadata_v2() const override { return FIELDS_V2; } - size_t get_field_count_v2() const override { return FIELD_COUNT_V2; } - const RepeatedFieldMetaV2 *get_repeated_field_metadata_v2() const override { return nullptr; } - size_t get_repeated_field_count_v2() const override { return REPEATED_COUNT_V2; } + static const FieldMetaV3 FIELDS_V3[9]; + static constexpr size_t FIELD_COUNT_V3 = 9; + static constexpr size_t REPEATED_COUNT_V3 = 0; + // V3 metadata getters + const FieldMetaV3 *get_field_metadata_v3() const override { return FIELDS_V3; } + size_t get_field_count_v3() const override { return FIELD_COUNT_V3; } + const RepeatedFieldMetaV3 *get_repeated_field_metadata_v3() const override { return nullptr; } + size_t get_repeated_field_count_v3() const override { return REPEATED_COUNT_V3; } #ifdef HAS_PROTO_MESSAGE_DUMP void dump_to(std::string &out) const override; #endif @@ -1129,14 +1129,14 @@ class TextSensorStateResponse : public StateResponseProtoMessage { #endif std::string state{}; bool missing_state{false}; - static const FieldMetaV2 FIELDS_V2[4]; - static constexpr size_t FIELD_COUNT_V2 = 4; - static constexpr size_t REPEATED_COUNT_V2 = 0; - // Virtual metadata getters - const FieldMetaV2 *get_field_metadata_v2() const override { return FIELDS_V2; } - size_t get_field_count_v2() const override { return FIELD_COUNT_V2; } - const RepeatedFieldMetaV2 *get_repeated_field_metadata_v2() const override { return nullptr; } - size_t get_repeated_field_count_v2() const override { return REPEATED_COUNT_V2; } + static const FieldMetaV3 FIELDS_V3[4]; + static constexpr size_t FIELD_COUNT_V3 = 4; + static constexpr size_t REPEATED_COUNT_V3 = 0; + // V3 metadata getters + const FieldMetaV3 *get_field_metadata_v3() const override { return FIELDS_V3; } + size_t get_field_count_v3() const override { return FIELD_COUNT_V3; } + const RepeatedFieldMetaV3 *get_repeated_field_metadata_v3() const override { return nullptr; } + size_t get_repeated_field_count_v3() const override { return REPEATED_COUNT_V3; } #ifdef HAS_PROTO_MESSAGE_DUMP void dump_to(std::string &out) const override; #endif @@ -1153,14 +1153,14 @@ class SubscribeLogsRequest : public ProtoMessage { #endif enums::LogLevel level{}; bool dump_config{false}; - static const FieldMetaV2 FIELDS_V2[2]; - static constexpr size_t FIELD_COUNT_V2 = 2; - static constexpr size_t REPEATED_COUNT_V2 = 0; - // Virtual metadata getters - const FieldMetaV2 *get_field_metadata_v2() const override { return FIELDS_V2; } - size_t get_field_count_v2() const override { return FIELD_COUNT_V2; } - const RepeatedFieldMetaV2 *get_repeated_field_metadata_v2() const override { return nullptr; } - size_t get_repeated_field_count_v2() const override { return REPEATED_COUNT_V2; } + static const FieldMetaV3 FIELDS_V3[2]; + static constexpr size_t FIELD_COUNT_V3 = 2; + static constexpr size_t REPEATED_COUNT_V3 = 0; + // V3 metadata getters + const FieldMetaV3 *get_field_metadata_v3() const override { return FIELDS_V3; } + size_t get_field_count_v3() const override { return FIELD_COUNT_V3; } + const RepeatedFieldMetaV3 *get_repeated_field_metadata_v3() const override { return nullptr; } + size_t get_repeated_field_count_v3() const override { return REPEATED_COUNT_V3; } #ifdef HAS_PROTO_MESSAGE_DUMP void dump_to(std::string &out) const override; #endif @@ -1177,14 +1177,14 @@ class SubscribeLogsResponse : public ProtoMessage { enums::LogLevel level{}; std::string message{}; bool send_failed{false}; - static const FieldMetaV2 FIELDS_V2[3]; - static constexpr size_t FIELD_COUNT_V2 = 3; - static constexpr size_t REPEATED_COUNT_V2 = 0; - // Virtual metadata getters - const FieldMetaV2 *get_field_metadata_v2() const override { return FIELDS_V2; } - size_t get_field_count_v2() const override { return FIELD_COUNT_V2; } - const RepeatedFieldMetaV2 *get_repeated_field_metadata_v2() const override { return nullptr; } - size_t get_repeated_field_count_v2() const override { return REPEATED_COUNT_V2; } + static const FieldMetaV3 FIELDS_V3[3]; + static constexpr size_t FIELD_COUNT_V3 = 3; + static constexpr size_t REPEATED_COUNT_V3 = 0; + // V3 metadata getters + const FieldMetaV3 *get_field_metadata_v3() const override { return FIELDS_V3; } + size_t get_field_count_v3() const override { return FIELD_COUNT_V3; } + const RepeatedFieldMetaV3 *get_repeated_field_metadata_v3() const override { return nullptr; } + size_t get_repeated_field_count_v3() const override { return REPEATED_COUNT_V3; } #ifdef HAS_PROTO_MESSAGE_DUMP void dump_to(std::string &out) const override; #endif @@ -1200,14 +1200,14 @@ class NoiseEncryptionSetKeyRequest : public ProtoMessage { const char *message_name() const override { return "noise_encryption_set_key_request"; } #endif std::string key{}; - static const FieldMetaV2 FIELDS_V2[1]; - static constexpr size_t FIELD_COUNT_V2 = 1; - static constexpr size_t REPEATED_COUNT_V2 = 0; - // Virtual metadata getters - const FieldMetaV2 *get_field_metadata_v2() const override { return FIELDS_V2; } - size_t get_field_count_v2() const override { return FIELD_COUNT_V2; } - const RepeatedFieldMetaV2 *get_repeated_field_metadata_v2() const override { return nullptr; } - size_t get_repeated_field_count_v2() const override { return REPEATED_COUNT_V2; } + static const FieldMetaV3 FIELDS_V3[1]; + static constexpr size_t FIELD_COUNT_V3 = 1; + static constexpr size_t REPEATED_COUNT_V3 = 0; + // V3 metadata getters + const FieldMetaV3 *get_field_metadata_v3() const override { return FIELDS_V3; } + size_t get_field_count_v3() const override { return FIELD_COUNT_V3; } + const RepeatedFieldMetaV3 *get_repeated_field_metadata_v3() const override { return nullptr; } + size_t get_repeated_field_count_v3() const override { return REPEATED_COUNT_V3; } #ifdef HAS_PROTO_MESSAGE_DUMP void dump_to(std::string &out) const override; #endif @@ -1222,14 +1222,14 @@ class NoiseEncryptionSetKeyResponse : public ProtoMessage { const char *message_name() const override { return "noise_encryption_set_key_response"; } #endif bool success{false}; - static const FieldMetaV2 FIELDS_V2[1]; - static constexpr size_t FIELD_COUNT_V2 = 1; - static constexpr size_t REPEATED_COUNT_V2 = 0; - // Virtual metadata getters - const FieldMetaV2 *get_field_metadata_v2() const override { return FIELDS_V2; } - size_t get_field_count_v2() const override { return FIELD_COUNT_V2; } - const RepeatedFieldMetaV2 *get_repeated_field_metadata_v2() const override { return nullptr; } - size_t get_repeated_field_count_v2() const override { return REPEATED_COUNT_V2; } + static const FieldMetaV3 FIELDS_V3[1]; + static constexpr size_t FIELD_COUNT_V3 = 1; + static constexpr size_t REPEATED_COUNT_V3 = 0; + // V3 metadata getters + const FieldMetaV3 *get_field_metadata_v3() const override { return FIELDS_V3; } + size_t get_field_count_v3() const override { return FIELD_COUNT_V3; } + const RepeatedFieldMetaV3 *get_repeated_field_metadata_v3() const override { return nullptr; } + size_t get_repeated_field_count_v3() const override { return REPEATED_COUNT_V3; } #ifdef HAS_PROTO_MESSAGE_DUMP void dump_to(std::string &out) const override; #endif @@ -1244,13 +1244,13 @@ class SubscribeHomeassistantServicesRequest : public ProtoMessage { #ifdef HAS_PROTO_MESSAGE_DUMP const char *message_name() const override { return "subscribe_homeassistant_services_request"; } #endif - static constexpr size_t FIELD_COUNT_V2 = 0; - static constexpr size_t REPEATED_COUNT_V2 = 0; - // Virtual metadata getters - const FieldMetaV2 *get_field_metadata_v2() const override { return nullptr; } - size_t get_field_count_v2() const override { return FIELD_COUNT_V2; } - const RepeatedFieldMetaV2 *get_repeated_field_metadata_v2() const override { return nullptr; } - size_t get_repeated_field_count_v2() const override { return REPEATED_COUNT_V2; } + static constexpr size_t FIELD_COUNT_V3 = 0; + static constexpr size_t REPEATED_COUNT_V3 = 0; + // V3 metadata getters + const FieldMetaV3 *get_field_metadata_v3() const override { return nullptr; } + size_t get_field_count_v3() const override { return FIELD_COUNT_V3; } + const RepeatedFieldMetaV3 *get_repeated_field_metadata_v3() const override { return nullptr; } + size_t get_repeated_field_count_v3() const override { return REPEATED_COUNT_V3; } #ifdef HAS_PROTO_MESSAGE_DUMP void dump_to(std::string &out) const override; #endif @@ -1261,14 +1261,14 @@ class HomeassistantServiceMap : public ProtoMessage { public: std::string key{}; std::string value{}; - static const FieldMetaV2 FIELDS_V2[2]; - static constexpr size_t FIELD_COUNT_V2 = 2; - static constexpr size_t REPEATED_COUNT_V2 = 0; - // Virtual metadata getters - const FieldMetaV2 *get_field_metadata_v2() const override { return FIELDS_V2; } - size_t get_field_count_v2() const override { return FIELD_COUNT_V2; } - const RepeatedFieldMetaV2 *get_repeated_field_metadata_v2() const override { return nullptr; } - size_t get_repeated_field_count_v2() const override { return REPEATED_COUNT_V2; } + static const FieldMetaV3 FIELDS_V3[2]; + static constexpr size_t FIELD_COUNT_V3 = 2; + static constexpr size_t REPEATED_COUNT_V3 = 0; + // V3 metadata getters + const FieldMetaV3 *get_field_metadata_v3() const override { return FIELDS_V3; } + size_t get_field_count_v3() const override { return FIELD_COUNT_V3; } + const RepeatedFieldMetaV3 *get_repeated_field_metadata_v3() const override { return nullptr; } + size_t get_repeated_field_count_v3() const override { return REPEATED_COUNT_V3; } #ifdef HAS_PROTO_MESSAGE_DUMP void dump_to(std::string &out) const override; #endif @@ -1287,15 +1287,15 @@ class HomeassistantServiceResponse : public ProtoMessage { std::vector data_template{}; std::vector variables{}; bool is_event{false}; - static const FieldMetaV2 FIELDS_V2[2]; - static constexpr size_t FIELD_COUNT_V2 = 2; - static const RepeatedFieldMetaV2 REPEATED_FIELDS_V2[3]; - static constexpr size_t REPEATED_COUNT_V2 = 3; - // Virtual metadata getters - const FieldMetaV2 *get_field_metadata_v2() const override { return FIELDS_V2; } - size_t get_field_count_v2() const override { return FIELD_COUNT_V2; } - const RepeatedFieldMetaV2 *get_repeated_field_metadata_v2() const override { return REPEATED_FIELDS_V2; } - size_t get_repeated_field_count_v2() const override { return REPEATED_COUNT_V2; } + static const FieldMetaV3 FIELDS_V3[2]; + static constexpr size_t FIELD_COUNT_V3 = 2; + static const RepeatedFieldMetaV3 REPEATED_FIELDS_V3[3]; + static constexpr size_t REPEATED_COUNT_V3 = 3; + // V3 metadata getters + const FieldMetaV3 *get_field_metadata_v3() const override { return FIELDS_V3; } + size_t get_field_count_v3() const override { return FIELD_COUNT_V3; } + const RepeatedFieldMetaV3 *get_repeated_field_metadata_v3() const override { return REPEATED_FIELDS_V3; } + size_t get_repeated_field_count_v3() const override { return REPEATED_COUNT_V3; } #ifdef HAS_PROTO_MESSAGE_DUMP void dump_to(std::string &out) const override; #endif @@ -1309,13 +1309,13 @@ class SubscribeHomeAssistantStatesRequest : public ProtoMessage { #ifdef HAS_PROTO_MESSAGE_DUMP const char *message_name() const override { return "subscribe_home_assistant_states_request"; } #endif - static constexpr size_t FIELD_COUNT_V2 = 0; - static constexpr size_t REPEATED_COUNT_V2 = 0; - // Virtual metadata getters - const FieldMetaV2 *get_field_metadata_v2() const override { return nullptr; } - size_t get_field_count_v2() const override { return FIELD_COUNT_V2; } - const RepeatedFieldMetaV2 *get_repeated_field_metadata_v2() const override { return nullptr; } - size_t get_repeated_field_count_v2() const override { return REPEATED_COUNT_V2; } + static constexpr size_t FIELD_COUNT_V3 = 0; + static constexpr size_t REPEATED_COUNT_V3 = 0; + // V3 metadata getters + const FieldMetaV3 *get_field_metadata_v3() const override { return nullptr; } + size_t get_field_count_v3() const override { return FIELD_COUNT_V3; } + const RepeatedFieldMetaV3 *get_repeated_field_metadata_v3() const override { return nullptr; } + size_t get_repeated_field_count_v3() const override { return REPEATED_COUNT_V3; } #ifdef HAS_PROTO_MESSAGE_DUMP void dump_to(std::string &out) const override; #endif @@ -1332,14 +1332,14 @@ class SubscribeHomeAssistantStateResponse : public ProtoMessage { std::string entity_id{}; std::string attribute{}; bool once{false}; - static const FieldMetaV2 FIELDS_V2[3]; - static constexpr size_t FIELD_COUNT_V2 = 3; - static constexpr size_t REPEATED_COUNT_V2 = 0; - // Virtual metadata getters - const FieldMetaV2 *get_field_metadata_v2() const override { return FIELDS_V2; } - size_t get_field_count_v2() const override { return FIELD_COUNT_V2; } - const RepeatedFieldMetaV2 *get_repeated_field_metadata_v2() const override { return nullptr; } - size_t get_repeated_field_count_v2() const override { return REPEATED_COUNT_V2; } + static const FieldMetaV3 FIELDS_V3[3]; + static constexpr size_t FIELD_COUNT_V3 = 3; + static constexpr size_t REPEATED_COUNT_V3 = 0; + // V3 metadata getters + const FieldMetaV3 *get_field_metadata_v3() const override { return FIELDS_V3; } + size_t get_field_count_v3() const override { return FIELD_COUNT_V3; } + const RepeatedFieldMetaV3 *get_repeated_field_metadata_v3() const override { return nullptr; } + size_t get_repeated_field_count_v3() const override { return REPEATED_COUNT_V3; } #ifdef HAS_PROTO_MESSAGE_DUMP void dump_to(std::string &out) const override; #endif @@ -1356,14 +1356,14 @@ class HomeAssistantStateResponse : public ProtoMessage { std::string entity_id{}; std::string state{}; std::string attribute{}; - static const FieldMetaV2 FIELDS_V2[3]; - static constexpr size_t FIELD_COUNT_V2 = 3; - static constexpr size_t REPEATED_COUNT_V2 = 0; - // Virtual metadata getters - const FieldMetaV2 *get_field_metadata_v2() const override { return FIELDS_V2; } - size_t get_field_count_v2() const override { return FIELD_COUNT_V2; } - const RepeatedFieldMetaV2 *get_repeated_field_metadata_v2() const override { return nullptr; } - size_t get_repeated_field_count_v2() const override { return REPEATED_COUNT_V2; } + static const FieldMetaV3 FIELDS_V3[3]; + static constexpr size_t FIELD_COUNT_V3 = 3; + static constexpr size_t REPEATED_COUNT_V3 = 0; + // V3 metadata getters + const FieldMetaV3 *get_field_metadata_v3() const override { return FIELDS_V3; } + size_t get_field_count_v3() const override { return FIELD_COUNT_V3; } + const RepeatedFieldMetaV3 *get_repeated_field_metadata_v3() const override { return nullptr; } + size_t get_repeated_field_count_v3() const override { return REPEATED_COUNT_V3; } #ifdef HAS_PROTO_MESSAGE_DUMP void dump_to(std::string &out) const override; #endif @@ -1377,13 +1377,13 @@ class GetTimeRequest : public ProtoMessage { #ifdef HAS_PROTO_MESSAGE_DUMP const char *message_name() const override { return "get_time_request"; } #endif - static constexpr size_t FIELD_COUNT_V2 = 0; - static constexpr size_t REPEATED_COUNT_V2 = 0; - // Virtual metadata getters - const FieldMetaV2 *get_field_metadata_v2() const override { return nullptr; } - size_t get_field_count_v2() const override { return FIELD_COUNT_V2; } - const RepeatedFieldMetaV2 *get_repeated_field_metadata_v2() const override { return nullptr; } - size_t get_repeated_field_count_v2() const override { return REPEATED_COUNT_V2; } + static constexpr size_t FIELD_COUNT_V3 = 0; + static constexpr size_t REPEATED_COUNT_V3 = 0; + // V3 metadata getters + const FieldMetaV3 *get_field_metadata_v3() const override { return nullptr; } + size_t get_field_count_v3() const override { return FIELD_COUNT_V3; } + const RepeatedFieldMetaV3 *get_repeated_field_metadata_v3() const override { return nullptr; } + size_t get_repeated_field_count_v3() const override { return REPEATED_COUNT_V3; } #ifdef HAS_PROTO_MESSAGE_DUMP void dump_to(std::string &out) const override; #endif @@ -1398,14 +1398,14 @@ class GetTimeResponse : public ProtoMessage { const char *message_name() const override { return "get_time_response"; } #endif uint32_t epoch_seconds{0}; - static const FieldMetaV2 FIELDS_V2[1]; - static constexpr size_t FIELD_COUNT_V2 = 1; - static constexpr size_t REPEATED_COUNT_V2 = 0; - // Virtual metadata getters - const FieldMetaV2 *get_field_metadata_v2() const override { return FIELDS_V2; } - size_t get_field_count_v2() const override { return FIELD_COUNT_V2; } - const RepeatedFieldMetaV2 *get_repeated_field_metadata_v2() const override { return nullptr; } - size_t get_repeated_field_count_v2() const override { return REPEATED_COUNT_V2; } + static const FieldMetaV3 FIELDS_V3[1]; + static constexpr size_t FIELD_COUNT_V3 = 1; + static constexpr size_t REPEATED_COUNT_V3 = 0; + // V3 metadata getters + const FieldMetaV3 *get_field_metadata_v3() const override { return FIELDS_V3; } + size_t get_field_count_v3() const override { return FIELD_COUNT_V3; } + const RepeatedFieldMetaV3 *get_repeated_field_metadata_v3() const override { return nullptr; } + size_t get_repeated_field_count_v3() const override { return REPEATED_COUNT_V3; } #ifdef HAS_PROTO_MESSAGE_DUMP void dump_to(std::string &out) const override; #endif @@ -1416,14 +1416,14 @@ class ListEntitiesServicesArgument : public ProtoMessage { public: std::string name{}; enums::ServiceArgType type{}; - static const FieldMetaV2 FIELDS_V2[2]; - static constexpr size_t FIELD_COUNT_V2 = 2; - static constexpr size_t REPEATED_COUNT_V2 = 0; - // Virtual metadata getters - const FieldMetaV2 *get_field_metadata_v2() const override { return FIELDS_V2; } - size_t get_field_count_v2() const override { return FIELD_COUNT_V2; } - const RepeatedFieldMetaV2 *get_repeated_field_metadata_v2() const override { return nullptr; } - size_t get_repeated_field_count_v2() const override { return REPEATED_COUNT_V2; } + static const FieldMetaV3 FIELDS_V3[2]; + static constexpr size_t FIELD_COUNT_V3 = 2; + static constexpr size_t REPEATED_COUNT_V3 = 0; + // V3 metadata getters + const FieldMetaV3 *get_field_metadata_v3() const override { return FIELDS_V3; } + size_t get_field_count_v3() const override { return FIELD_COUNT_V3; } + const RepeatedFieldMetaV3 *get_repeated_field_metadata_v3() const override { return nullptr; } + size_t get_repeated_field_count_v3() const override { return REPEATED_COUNT_V3; } #ifdef HAS_PROTO_MESSAGE_DUMP void dump_to(std::string &out) const override; #endif @@ -1440,15 +1440,15 @@ class ListEntitiesServicesResponse : public ProtoMessage { std::string name{}; uint32_t key{0}; std::vector args{}; - static const FieldMetaV2 FIELDS_V2[2]; - static constexpr size_t FIELD_COUNT_V2 = 2; - static const RepeatedFieldMetaV2 REPEATED_FIELDS_V2[1]; - static constexpr size_t REPEATED_COUNT_V2 = 1; - // Virtual metadata getters - const FieldMetaV2 *get_field_metadata_v2() const override { return FIELDS_V2; } - size_t get_field_count_v2() const override { return FIELD_COUNT_V2; } - const RepeatedFieldMetaV2 *get_repeated_field_metadata_v2() const override { return REPEATED_FIELDS_V2; } - size_t get_repeated_field_count_v2() const override { return REPEATED_COUNT_V2; } + static const FieldMetaV3 FIELDS_V3[2]; + static constexpr size_t FIELD_COUNT_V3 = 2; + static const RepeatedFieldMetaV3 REPEATED_FIELDS_V3[1]; + static constexpr size_t REPEATED_COUNT_V3 = 1; + // V3 metadata getters + const FieldMetaV3 *get_field_metadata_v3() const override { return FIELDS_V3; } + size_t get_field_count_v3() const override { return FIELD_COUNT_V3; } + const RepeatedFieldMetaV3 *get_repeated_field_metadata_v3() const override { return REPEATED_FIELDS_V3; } + size_t get_repeated_field_count_v3() const override { return REPEATED_COUNT_V3; } #ifdef HAS_PROTO_MESSAGE_DUMP void dump_to(std::string &out) const override; #endif @@ -1466,15 +1466,15 @@ class ExecuteServiceArgument : public ProtoMessage { std::vector int_array{}; std::vector float_array{}; std::vector string_array{}; - static const FieldMetaV2 FIELDS_V2[5]; - static constexpr size_t FIELD_COUNT_V2 = 5; - static const RepeatedFieldMetaV2 REPEATED_FIELDS_V2[4]; - static constexpr size_t REPEATED_COUNT_V2 = 4; - // Virtual metadata getters - const FieldMetaV2 *get_field_metadata_v2() const override { return FIELDS_V2; } - size_t get_field_count_v2() const override { return FIELD_COUNT_V2; } - const RepeatedFieldMetaV2 *get_repeated_field_metadata_v2() const override { return REPEATED_FIELDS_V2; } - size_t get_repeated_field_count_v2() const override { return REPEATED_COUNT_V2; } + static const FieldMetaV3 FIELDS_V3[5]; + static constexpr size_t FIELD_COUNT_V3 = 5; + static const RepeatedFieldMetaV3 REPEATED_FIELDS_V3[4]; + static constexpr size_t REPEATED_COUNT_V3 = 4; + // V3 metadata getters + const FieldMetaV3 *get_field_metadata_v3() const override { return FIELDS_V3; } + size_t get_field_count_v3() const override { return FIELD_COUNT_V3; } + const RepeatedFieldMetaV3 *get_repeated_field_metadata_v3() const override { return REPEATED_FIELDS_V3; } + size_t get_repeated_field_count_v3() const override { return REPEATED_COUNT_V3; } #ifdef HAS_PROTO_MESSAGE_DUMP void dump_to(std::string &out) const override; #endif @@ -1490,15 +1490,15 @@ class ExecuteServiceRequest : public ProtoMessage { #endif uint32_t key{0}; std::vector args{}; - static const FieldMetaV2 FIELDS_V2[1]; - static constexpr size_t FIELD_COUNT_V2 = 1; - static const RepeatedFieldMetaV2 REPEATED_FIELDS_V2[1]; - static constexpr size_t REPEATED_COUNT_V2 = 1; - // Virtual metadata getters - const FieldMetaV2 *get_field_metadata_v2() const override { return FIELDS_V2; } - size_t get_field_count_v2() const override { return FIELD_COUNT_V2; } - const RepeatedFieldMetaV2 *get_repeated_field_metadata_v2() const override { return REPEATED_FIELDS_V2; } - size_t get_repeated_field_count_v2() const override { return REPEATED_COUNT_V2; } + static const FieldMetaV3 FIELDS_V3[1]; + static constexpr size_t FIELD_COUNT_V3 = 1; + static const RepeatedFieldMetaV3 REPEATED_FIELDS_V3[1]; + static constexpr size_t REPEATED_COUNT_V3 = 1; + // V3 metadata getters + const FieldMetaV3 *get_field_metadata_v3() const override { return FIELDS_V3; } + size_t get_field_count_v3() const override { return FIELD_COUNT_V3; } + const RepeatedFieldMetaV3 *get_repeated_field_metadata_v3() const override { return REPEATED_FIELDS_V3; } + size_t get_repeated_field_count_v3() const override { return REPEATED_COUNT_V3; } #ifdef HAS_PROTO_MESSAGE_DUMP void dump_to(std::string &out) const override; #endif @@ -1513,14 +1513,14 @@ class ListEntitiesCameraResponse : public InfoResponseProtoMessage { #ifdef HAS_PROTO_MESSAGE_DUMP const char *message_name() const override { return "list_entities_camera_response"; } #endif - static const FieldMetaV2 FIELDS_V2[8]; - static constexpr size_t FIELD_COUNT_V2 = 8; - static constexpr size_t REPEATED_COUNT_V2 = 0; - // Virtual metadata getters - const FieldMetaV2 *get_field_metadata_v2() const override { return FIELDS_V2; } - size_t get_field_count_v2() const override { return FIELD_COUNT_V2; } - const RepeatedFieldMetaV2 *get_repeated_field_metadata_v2() const override { return nullptr; } - size_t get_repeated_field_count_v2() const override { return REPEATED_COUNT_V2; } + static const FieldMetaV3 FIELDS_V3[8]; + static constexpr size_t FIELD_COUNT_V3 = 8; + static constexpr size_t REPEATED_COUNT_V3 = 0; + // V3 metadata getters + const FieldMetaV3 *get_field_metadata_v3() const override { return FIELDS_V3; } + size_t get_field_count_v3() const override { return FIELD_COUNT_V3; } + const RepeatedFieldMetaV3 *get_repeated_field_metadata_v3() const override { return nullptr; } + size_t get_repeated_field_count_v3() const override { return REPEATED_COUNT_V3; } #ifdef HAS_PROTO_MESSAGE_DUMP void dump_to(std::string &out) const override; #endif @@ -1537,14 +1537,14 @@ class CameraImageResponse : public ProtoMessage { uint32_t key{0}; std::string data{}; bool done{false}; - static const FieldMetaV2 FIELDS_V2[3]; - static constexpr size_t FIELD_COUNT_V2 = 3; - static constexpr size_t REPEATED_COUNT_V2 = 0; - // Virtual metadata getters - const FieldMetaV2 *get_field_metadata_v2() const override { return FIELDS_V2; } - size_t get_field_count_v2() const override { return FIELD_COUNT_V2; } - const RepeatedFieldMetaV2 *get_repeated_field_metadata_v2() const override { return nullptr; } - size_t get_repeated_field_count_v2() const override { return REPEATED_COUNT_V2; } + static const FieldMetaV3 FIELDS_V3[3]; + static constexpr size_t FIELD_COUNT_V3 = 3; + static constexpr size_t REPEATED_COUNT_V3 = 0; + // V3 metadata getters + const FieldMetaV3 *get_field_metadata_v3() const override { return FIELDS_V3; } + size_t get_field_count_v3() const override { return FIELD_COUNT_V3; } + const RepeatedFieldMetaV3 *get_repeated_field_metadata_v3() const override { return nullptr; } + size_t get_repeated_field_count_v3() const override { return REPEATED_COUNT_V3; } #ifdef HAS_PROTO_MESSAGE_DUMP void dump_to(std::string &out) const override; #endif @@ -1560,14 +1560,14 @@ class CameraImageRequest : public ProtoMessage { #endif bool single{false}; bool stream{false}; - static const FieldMetaV2 FIELDS_V2[2]; - static constexpr size_t FIELD_COUNT_V2 = 2; - static constexpr size_t REPEATED_COUNT_V2 = 0; - // Virtual metadata getters - const FieldMetaV2 *get_field_metadata_v2() const override { return FIELDS_V2; } - size_t get_field_count_v2() const override { return FIELD_COUNT_V2; } - const RepeatedFieldMetaV2 *get_repeated_field_metadata_v2() const override { return nullptr; } - size_t get_repeated_field_count_v2() const override { return REPEATED_COUNT_V2; } + static const FieldMetaV3 FIELDS_V3[2]; + static constexpr size_t FIELD_COUNT_V3 = 2; + static constexpr size_t REPEATED_COUNT_V3 = 0; + // V3 metadata getters + const FieldMetaV3 *get_field_metadata_v3() const override { return FIELDS_V3; } + size_t get_field_count_v3() const override { return FIELD_COUNT_V3; } + const RepeatedFieldMetaV3 *get_repeated_field_metadata_v3() const override { return nullptr; } + size_t get_repeated_field_count_v3() const override { return REPEATED_COUNT_V3; } #ifdef HAS_PROTO_MESSAGE_DUMP void dump_to(std::string &out) const override; #endif @@ -1601,15 +1601,15 @@ class ListEntitiesClimateResponse : public InfoResponseProtoMessage { bool supports_target_humidity{false}; float visual_min_humidity{0.0f}; float visual_max_humidity{0.0f}; - static const FieldMetaV2 FIELDS_V2[20]; - static constexpr size_t FIELD_COUNT_V2 = 20; - static const RepeatedFieldMetaV2 REPEATED_FIELDS_V2[6]; - static constexpr size_t REPEATED_COUNT_V2 = 6; - // Virtual metadata getters - const FieldMetaV2 *get_field_metadata_v2() const override { return FIELDS_V2; } - size_t get_field_count_v2() const override { return FIELD_COUNT_V2; } - const RepeatedFieldMetaV2 *get_repeated_field_metadata_v2() const override { return REPEATED_FIELDS_V2; } - size_t get_repeated_field_count_v2() const override { return REPEATED_COUNT_V2; } + static const FieldMetaV3 FIELDS_V3[20]; + static constexpr size_t FIELD_COUNT_V3 = 20; + static const RepeatedFieldMetaV3 REPEATED_FIELDS_V3[6]; + static constexpr size_t REPEATED_COUNT_V3 = 6; + // V3 metadata getters + const FieldMetaV3 *get_field_metadata_v3() const override { return FIELDS_V3; } + size_t get_field_count_v3() const override { return FIELD_COUNT_V3; } + const RepeatedFieldMetaV3 *get_repeated_field_metadata_v3() const override { return REPEATED_FIELDS_V3; } + size_t get_repeated_field_count_v3() const override { return REPEATED_COUNT_V3; } #ifdef HAS_PROTO_MESSAGE_DUMP void dump_to(std::string &out) const override; #endif @@ -1637,14 +1637,14 @@ class ClimateStateResponse : public StateResponseProtoMessage { std::string custom_preset{}; float current_humidity{0.0f}; float target_humidity{0.0f}; - static const FieldMetaV2 FIELDS_V2[16]; - static constexpr size_t FIELD_COUNT_V2 = 16; - static constexpr size_t REPEATED_COUNT_V2 = 0; - // Virtual metadata getters - const FieldMetaV2 *get_field_metadata_v2() const override { return FIELDS_V2; } - size_t get_field_count_v2() const override { return FIELD_COUNT_V2; } - const RepeatedFieldMetaV2 *get_repeated_field_metadata_v2() const override { return nullptr; } - size_t get_repeated_field_count_v2() const override { return REPEATED_COUNT_V2; } + static const FieldMetaV3 FIELDS_V3[16]; + static constexpr size_t FIELD_COUNT_V3 = 16; + static constexpr size_t REPEATED_COUNT_V3 = 0; + // V3 metadata getters + const FieldMetaV3 *get_field_metadata_v3() const override { return FIELDS_V3; } + size_t get_field_count_v3() const override { return FIELD_COUNT_V3; } + const RepeatedFieldMetaV3 *get_repeated_field_metadata_v3() const override { return nullptr; } + size_t get_repeated_field_count_v3() const override { return REPEATED_COUNT_V3; } #ifdef HAS_PROTO_MESSAGE_DUMP void dump_to(std::string &out) const override; #endif @@ -1681,14 +1681,14 @@ class ClimateCommandRequest : public ProtoMessage { std::string custom_preset{}; bool has_target_humidity{false}; float target_humidity{0.0f}; - static const FieldMetaV2 FIELDS_V2[23]; - static constexpr size_t FIELD_COUNT_V2 = 23; - static constexpr size_t REPEATED_COUNT_V2 = 0; - // Virtual metadata getters - const FieldMetaV2 *get_field_metadata_v2() const override { return FIELDS_V2; } - size_t get_field_count_v2() const override { return FIELD_COUNT_V2; } - const RepeatedFieldMetaV2 *get_repeated_field_metadata_v2() const override { return nullptr; } - size_t get_repeated_field_count_v2() const override { return REPEATED_COUNT_V2; } + static const FieldMetaV3 FIELDS_V3[23]; + static constexpr size_t FIELD_COUNT_V3 = 23; + static constexpr size_t REPEATED_COUNT_V3 = 0; + // V3 metadata getters + const FieldMetaV3 *get_field_metadata_v3() const override { return FIELDS_V3; } + size_t get_field_count_v3() const override { return FIELD_COUNT_V3; } + const RepeatedFieldMetaV3 *get_repeated_field_metadata_v3() const override { return nullptr; } + size_t get_repeated_field_count_v3() const override { return REPEATED_COUNT_V3; } #ifdef HAS_PROTO_MESSAGE_DUMP void dump_to(std::string &out) const override; #endif @@ -1710,14 +1710,14 @@ class ListEntitiesNumberResponse : public InfoResponseProtoMessage { std::string unit_of_measurement{}; enums::NumberMode mode{}; std::string device_class{}; - static const FieldMetaV2 FIELDS_V2[14]; - static constexpr size_t FIELD_COUNT_V2 = 14; - static constexpr size_t REPEATED_COUNT_V2 = 0; - // Virtual metadata getters - const FieldMetaV2 *get_field_metadata_v2() const override { return FIELDS_V2; } - size_t get_field_count_v2() const override { return FIELD_COUNT_V2; } - const RepeatedFieldMetaV2 *get_repeated_field_metadata_v2() const override { return nullptr; } - size_t get_repeated_field_count_v2() const override { return REPEATED_COUNT_V2; } + static const FieldMetaV3 FIELDS_V3[14]; + static constexpr size_t FIELD_COUNT_V3 = 14; + static constexpr size_t REPEATED_COUNT_V3 = 0; + // V3 metadata getters + const FieldMetaV3 *get_field_metadata_v3() const override { return FIELDS_V3; } + size_t get_field_count_v3() const override { return FIELD_COUNT_V3; } + const RepeatedFieldMetaV3 *get_repeated_field_metadata_v3() const override { return nullptr; } + size_t get_repeated_field_count_v3() const override { return REPEATED_COUNT_V3; } #ifdef HAS_PROTO_MESSAGE_DUMP void dump_to(std::string &out) const override; #endif @@ -1733,14 +1733,14 @@ class NumberStateResponse : public StateResponseProtoMessage { #endif float state{0.0f}; bool missing_state{false}; - static const FieldMetaV2 FIELDS_V2[4]; - static constexpr size_t FIELD_COUNT_V2 = 4; - static constexpr size_t REPEATED_COUNT_V2 = 0; - // Virtual metadata getters - const FieldMetaV2 *get_field_metadata_v2() const override { return FIELDS_V2; } - size_t get_field_count_v2() const override { return FIELD_COUNT_V2; } - const RepeatedFieldMetaV2 *get_repeated_field_metadata_v2() const override { return nullptr; } - size_t get_repeated_field_count_v2() const override { return REPEATED_COUNT_V2; } + static const FieldMetaV3 FIELDS_V3[4]; + static constexpr size_t FIELD_COUNT_V3 = 4; + static constexpr size_t REPEATED_COUNT_V3 = 0; + // V3 metadata getters + const FieldMetaV3 *get_field_metadata_v3() const override { return FIELDS_V3; } + size_t get_field_count_v3() const override { return FIELD_COUNT_V3; } + const RepeatedFieldMetaV3 *get_repeated_field_metadata_v3() const override { return nullptr; } + size_t get_repeated_field_count_v3() const override { return REPEATED_COUNT_V3; } #ifdef HAS_PROTO_MESSAGE_DUMP void dump_to(std::string &out) const override; #endif @@ -1756,14 +1756,14 @@ class NumberCommandRequest : public ProtoMessage { #endif uint32_t key{0}; float state{0.0f}; - static const FieldMetaV2 FIELDS_V2[2]; - static constexpr size_t FIELD_COUNT_V2 = 2; - static constexpr size_t REPEATED_COUNT_V2 = 0; - // Virtual metadata getters - const FieldMetaV2 *get_field_metadata_v2() const override { return FIELDS_V2; } - size_t get_field_count_v2() const override { return FIELD_COUNT_V2; } - const RepeatedFieldMetaV2 *get_repeated_field_metadata_v2() const override { return nullptr; } - size_t get_repeated_field_count_v2() const override { return REPEATED_COUNT_V2; } + static const FieldMetaV3 FIELDS_V3[2]; + static constexpr size_t FIELD_COUNT_V3 = 2; + static constexpr size_t REPEATED_COUNT_V3 = 0; + // V3 metadata getters + const FieldMetaV3 *get_field_metadata_v3() const override { return FIELDS_V3; } + size_t get_field_count_v3() const override { return FIELD_COUNT_V3; } + const RepeatedFieldMetaV3 *get_repeated_field_metadata_v3() const override { return nullptr; } + size_t get_repeated_field_count_v3() const override { return REPEATED_COUNT_V3; } #ifdef HAS_PROTO_MESSAGE_DUMP void dump_to(std::string &out) const override; #endif @@ -1780,15 +1780,15 @@ class ListEntitiesSelectResponse : public InfoResponseProtoMessage { const char *message_name() const override { return "list_entities_select_response"; } #endif std::vector options{}; - static const FieldMetaV2 FIELDS_V2[8]; - static constexpr size_t FIELD_COUNT_V2 = 8; - static const RepeatedFieldMetaV2 REPEATED_FIELDS_V2[1]; - static constexpr size_t REPEATED_COUNT_V2 = 1; - // Virtual metadata getters - const FieldMetaV2 *get_field_metadata_v2() const override { return FIELDS_V2; } - size_t get_field_count_v2() const override { return FIELD_COUNT_V2; } - const RepeatedFieldMetaV2 *get_repeated_field_metadata_v2() const override { return REPEATED_FIELDS_V2; } - size_t get_repeated_field_count_v2() const override { return REPEATED_COUNT_V2; } + static const FieldMetaV3 FIELDS_V3[8]; + static constexpr size_t FIELD_COUNT_V3 = 8; + static const RepeatedFieldMetaV3 REPEATED_FIELDS_V3[1]; + static constexpr size_t REPEATED_COUNT_V3 = 1; + // V3 metadata getters + const FieldMetaV3 *get_field_metadata_v3() const override { return FIELDS_V3; } + size_t get_field_count_v3() const override { return FIELD_COUNT_V3; } + const RepeatedFieldMetaV3 *get_repeated_field_metadata_v3() const override { return REPEATED_FIELDS_V3; } + size_t get_repeated_field_count_v3() const override { return REPEATED_COUNT_V3; } #ifdef HAS_PROTO_MESSAGE_DUMP void dump_to(std::string &out) const override; #endif @@ -1804,14 +1804,14 @@ class SelectStateResponse : public StateResponseProtoMessage { #endif std::string state{}; bool missing_state{false}; - static const FieldMetaV2 FIELDS_V2[4]; - static constexpr size_t FIELD_COUNT_V2 = 4; - static constexpr size_t REPEATED_COUNT_V2 = 0; - // Virtual metadata getters - const FieldMetaV2 *get_field_metadata_v2() const override { return FIELDS_V2; } - size_t get_field_count_v2() const override { return FIELD_COUNT_V2; } - const RepeatedFieldMetaV2 *get_repeated_field_metadata_v2() const override { return nullptr; } - size_t get_repeated_field_count_v2() const override { return REPEATED_COUNT_V2; } + static const FieldMetaV3 FIELDS_V3[4]; + static constexpr size_t FIELD_COUNT_V3 = 4; + static constexpr size_t REPEATED_COUNT_V3 = 0; + // V3 metadata getters + const FieldMetaV3 *get_field_metadata_v3() const override { return FIELDS_V3; } + size_t get_field_count_v3() const override { return FIELD_COUNT_V3; } + const RepeatedFieldMetaV3 *get_repeated_field_metadata_v3() const override { return nullptr; } + size_t get_repeated_field_count_v3() const override { return REPEATED_COUNT_V3; } #ifdef HAS_PROTO_MESSAGE_DUMP void dump_to(std::string &out) const override; #endif @@ -1827,14 +1827,14 @@ class SelectCommandRequest : public ProtoMessage { #endif uint32_t key{0}; std::string state{}; - static const FieldMetaV2 FIELDS_V2[2]; - static constexpr size_t FIELD_COUNT_V2 = 2; - static constexpr size_t REPEATED_COUNT_V2 = 0; - // Virtual metadata getters - const FieldMetaV2 *get_field_metadata_v2() const override { return FIELDS_V2; } - size_t get_field_count_v2() const override { return FIELD_COUNT_V2; } - const RepeatedFieldMetaV2 *get_repeated_field_metadata_v2() const override { return nullptr; } - size_t get_repeated_field_count_v2() const override { return REPEATED_COUNT_V2; } + static const FieldMetaV3 FIELDS_V3[2]; + static constexpr size_t FIELD_COUNT_V3 = 2; + static constexpr size_t REPEATED_COUNT_V3 = 0; + // V3 metadata getters + const FieldMetaV3 *get_field_metadata_v3() const override { return FIELDS_V3; } + size_t get_field_count_v3() const override { return FIELD_COUNT_V3; } + const RepeatedFieldMetaV3 *get_repeated_field_metadata_v3() const override { return nullptr; } + size_t get_repeated_field_count_v3() const override { return REPEATED_COUNT_V3; } #ifdef HAS_PROTO_MESSAGE_DUMP void dump_to(std::string &out) const override; #endif @@ -1853,15 +1853,15 @@ class ListEntitiesSirenResponse : public InfoResponseProtoMessage { std::vector tones{}; bool supports_duration{false}; bool supports_volume{false}; - static const FieldMetaV2 FIELDS_V2[10]; - static constexpr size_t FIELD_COUNT_V2 = 10; - static const RepeatedFieldMetaV2 REPEATED_FIELDS_V2[1]; - static constexpr size_t REPEATED_COUNT_V2 = 1; - // Virtual metadata getters - const FieldMetaV2 *get_field_metadata_v2() const override { return FIELDS_V2; } - size_t get_field_count_v2() const override { return FIELD_COUNT_V2; } - const RepeatedFieldMetaV2 *get_repeated_field_metadata_v2() const override { return REPEATED_FIELDS_V2; } - size_t get_repeated_field_count_v2() const override { return REPEATED_COUNT_V2; } + static const FieldMetaV3 FIELDS_V3[10]; + static constexpr size_t FIELD_COUNT_V3 = 10; + static const RepeatedFieldMetaV3 REPEATED_FIELDS_V3[1]; + static constexpr size_t REPEATED_COUNT_V3 = 1; + // V3 metadata getters + const FieldMetaV3 *get_field_metadata_v3() const override { return FIELDS_V3; } + size_t get_field_count_v3() const override { return FIELD_COUNT_V3; } + const RepeatedFieldMetaV3 *get_repeated_field_metadata_v3() const override { return REPEATED_FIELDS_V3; } + size_t get_repeated_field_count_v3() const override { return REPEATED_COUNT_V3; } #ifdef HAS_PROTO_MESSAGE_DUMP void dump_to(std::string &out) const override; #endif @@ -1876,14 +1876,14 @@ class SirenStateResponse : public StateResponseProtoMessage { const char *message_name() const override { return "siren_state_response"; } #endif bool state{false}; - static const FieldMetaV2 FIELDS_V2[3]; - static constexpr size_t FIELD_COUNT_V2 = 3; - static constexpr size_t REPEATED_COUNT_V2 = 0; - // Virtual metadata getters - const FieldMetaV2 *get_field_metadata_v2() const override { return FIELDS_V2; } - size_t get_field_count_v2() const override { return FIELD_COUNT_V2; } - const RepeatedFieldMetaV2 *get_repeated_field_metadata_v2() const override { return nullptr; } - size_t get_repeated_field_count_v2() const override { return REPEATED_COUNT_V2; } + static const FieldMetaV3 FIELDS_V3[3]; + static constexpr size_t FIELD_COUNT_V3 = 3; + static constexpr size_t REPEATED_COUNT_V3 = 0; + // V3 metadata getters + const FieldMetaV3 *get_field_metadata_v3() const override { return FIELDS_V3; } + size_t get_field_count_v3() const override { return FIELD_COUNT_V3; } + const RepeatedFieldMetaV3 *get_repeated_field_metadata_v3() const override { return nullptr; } + size_t get_repeated_field_count_v3() const override { return REPEATED_COUNT_V3; } #ifdef HAS_PROTO_MESSAGE_DUMP void dump_to(std::string &out) const override; #endif @@ -1906,14 +1906,14 @@ class SirenCommandRequest : public ProtoMessage { uint32_t duration{0}; bool has_volume{false}; float volume{0.0f}; - static const FieldMetaV2 FIELDS_V2[9]; - static constexpr size_t FIELD_COUNT_V2 = 9; - static constexpr size_t REPEATED_COUNT_V2 = 0; - // Virtual metadata getters - const FieldMetaV2 *get_field_metadata_v2() const override { return FIELDS_V2; } - size_t get_field_count_v2() const override { return FIELD_COUNT_V2; } - const RepeatedFieldMetaV2 *get_repeated_field_metadata_v2() const override { return nullptr; } - size_t get_repeated_field_count_v2() const override { return REPEATED_COUNT_V2; } + static const FieldMetaV3 FIELDS_V3[9]; + static constexpr size_t FIELD_COUNT_V3 = 9; + static constexpr size_t REPEATED_COUNT_V3 = 0; + // V3 metadata getters + const FieldMetaV3 *get_field_metadata_v3() const override { return FIELDS_V3; } + size_t get_field_count_v3() const override { return FIELD_COUNT_V3; } + const RepeatedFieldMetaV3 *get_repeated_field_metadata_v3() const override { return nullptr; } + size_t get_repeated_field_count_v3() const override { return REPEATED_COUNT_V3; } #ifdef HAS_PROTO_MESSAGE_DUMP void dump_to(std::string &out) const override; #endif @@ -1933,14 +1933,14 @@ class ListEntitiesLockResponse : public InfoResponseProtoMessage { bool supports_open{false}; bool requires_code{false}; std::string code_format{}; - static const FieldMetaV2 FIELDS_V2[12]; - static constexpr size_t FIELD_COUNT_V2 = 12; - static constexpr size_t REPEATED_COUNT_V2 = 0; - // Virtual metadata getters - const FieldMetaV2 *get_field_metadata_v2() const override { return FIELDS_V2; } - size_t get_field_count_v2() const override { return FIELD_COUNT_V2; } - const RepeatedFieldMetaV2 *get_repeated_field_metadata_v2() const override { return nullptr; } - size_t get_repeated_field_count_v2() const override { return REPEATED_COUNT_V2; } + static const FieldMetaV3 FIELDS_V3[12]; + static constexpr size_t FIELD_COUNT_V3 = 12; + static constexpr size_t REPEATED_COUNT_V3 = 0; + // V3 metadata getters + const FieldMetaV3 *get_field_metadata_v3() const override { return FIELDS_V3; } + size_t get_field_count_v3() const override { return FIELD_COUNT_V3; } + const RepeatedFieldMetaV3 *get_repeated_field_metadata_v3() const override { return nullptr; } + size_t get_repeated_field_count_v3() const override { return REPEATED_COUNT_V3; } #ifdef HAS_PROTO_MESSAGE_DUMP void dump_to(std::string &out) const override; #endif @@ -1955,14 +1955,14 @@ class LockStateResponse : public StateResponseProtoMessage { const char *message_name() const override { return "lock_state_response"; } #endif enums::LockState state{}; - static const FieldMetaV2 FIELDS_V2[3]; - static constexpr size_t FIELD_COUNT_V2 = 3; - static constexpr size_t REPEATED_COUNT_V2 = 0; - // Virtual metadata getters - const FieldMetaV2 *get_field_metadata_v2() const override { return FIELDS_V2; } - size_t get_field_count_v2() const override { return FIELD_COUNT_V2; } - const RepeatedFieldMetaV2 *get_repeated_field_metadata_v2() const override { return nullptr; } - size_t get_repeated_field_count_v2() const override { return REPEATED_COUNT_V2; } + static const FieldMetaV3 FIELDS_V3[3]; + static constexpr size_t FIELD_COUNT_V3 = 3; + static constexpr size_t REPEATED_COUNT_V3 = 0; + // V3 metadata getters + const FieldMetaV3 *get_field_metadata_v3() const override { return FIELDS_V3; } + size_t get_field_count_v3() const override { return FIELD_COUNT_V3; } + const RepeatedFieldMetaV3 *get_repeated_field_metadata_v3() const override { return nullptr; } + size_t get_repeated_field_count_v3() const override { return REPEATED_COUNT_V3; } #ifdef HAS_PROTO_MESSAGE_DUMP void dump_to(std::string &out) const override; #endif @@ -1980,14 +1980,14 @@ class LockCommandRequest : public ProtoMessage { enums::LockCommand command{}; bool has_code{false}; std::string code{}; - static const FieldMetaV2 FIELDS_V2[4]; - static constexpr size_t FIELD_COUNT_V2 = 4; - static constexpr size_t REPEATED_COUNT_V2 = 0; - // Virtual metadata getters - const FieldMetaV2 *get_field_metadata_v2() const override { return FIELDS_V2; } - size_t get_field_count_v2() const override { return FIELD_COUNT_V2; } - const RepeatedFieldMetaV2 *get_repeated_field_metadata_v2() const override { return nullptr; } - size_t get_repeated_field_count_v2() const override { return REPEATED_COUNT_V2; } + static const FieldMetaV3 FIELDS_V3[4]; + static constexpr size_t FIELD_COUNT_V3 = 4; + static constexpr size_t REPEATED_COUNT_V3 = 0; + // V3 metadata getters + const FieldMetaV3 *get_field_metadata_v3() const override { return FIELDS_V3; } + size_t get_field_count_v3() const override { return FIELD_COUNT_V3; } + const RepeatedFieldMetaV3 *get_repeated_field_metadata_v3() const override { return nullptr; } + size_t get_repeated_field_count_v3() const override { return REPEATED_COUNT_V3; } #ifdef HAS_PROTO_MESSAGE_DUMP void dump_to(std::string &out) const override; #endif @@ -2004,14 +2004,14 @@ class ListEntitiesButtonResponse : public InfoResponseProtoMessage { const char *message_name() const override { return "list_entities_button_response"; } #endif std::string device_class{}; - static const FieldMetaV2 FIELDS_V2[9]; - static constexpr size_t FIELD_COUNT_V2 = 9; - static constexpr size_t REPEATED_COUNT_V2 = 0; - // Virtual metadata getters - const FieldMetaV2 *get_field_metadata_v2() const override { return FIELDS_V2; } - size_t get_field_count_v2() const override { return FIELD_COUNT_V2; } - const RepeatedFieldMetaV2 *get_repeated_field_metadata_v2() const override { return nullptr; } - size_t get_repeated_field_count_v2() const override { return REPEATED_COUNT_V2; } + static const FieldMetaV3 FIELDS_V3[9]; + static constexpr size_t FIELD_COUNT_V3 = 9; + static constexpr size_t REPEATED_COUNT_V3 = 0; + // V3 metadata getters + const FieldMetaV3 *get_field_metadata_v3() const override { return FIELDS_V3; } + size_t get_field_count_v3() const override { return FIELD_COUNT_V3; } + const RepeatedFieldMetaV3 *get_repeated_field_metadata_v3() const override { return nullptr; } + size_t get_repeated_field_count_v3() const override { return REPEATED_COUNT_V3; } #ifdef HAS_PROTO_MESSAGE_DUMP void dump_to(std::string &out) const override; #endif @@ -2026,14 +2026,14 @@ class ButtonCommandRequest : public ProtoMessage { const char *message_name() const override { return "button_command_request"; } #endif uint32_t key{0}; - static const FieldMetaV2 FIELDS_V2[1]; - static constexpr size_t FIELD_COUNT_V2 = 1; - static constexpr size_t REPEATED_COUNT_V2 = 0; - // Virtual metadata getters - const FieldMetaV2 *get_field_metadata_v2() const override { return FIELDS_V2; } - size_t get_field_count_v2() const override { return FIELD_COUNT_V2; } - const RepeatedFieldMetaV2 *get_repeated_field_metadata_v2() const override { return nullptr; } - size_t get_repeated_field_count_v2() const override { return REPEATED_COUNT_V2; } + static const FieldMetaV3 FIELDS_V3[1]; + static constexpr size_t FIELD_COUNT_V3 = 1; + static constexpr size_t REPEATED_COUNT_V3 = 0; + // V3 metadata getters + const FieldMetaV3 *get_field_metadata_v3() const override { return FIELDS_V3; } + size_t get_field_count_v3() const override { return FIELD_COUNT_V3; } + const RepeatedFieldMetaV3 *get_repeated_field_metadata_v3() const override { return nullptr; } + size_t get_repeated_field_count_v3() const override { return REPEATED_COUNT_V3; } #ifdef HAS_PROTO_MESSAGE_DUMP void dump_to(std::string &out) const override; #endif @@ -2049,14 +2049,14 @@ class MediaPlayerSupportedFormat : public ProtoMessage { uint32_t num_channels{0}; enums::MediaPlayerFormatPurpose purpose{}; uint32_t sample_bytes{0}; - static const FieldMetaV2 FIELDS_V2[5]; - static constexpr size_t FIELD_COUNT_V2 = 5; - static constexpr size_t REPEATED_COUNT_V2 = 0; - // Virtual metadata getters - const FieldMetaV2 *get_field_metadata_v2() const override { return FIELDS_V2; } - size_t get_field_count_v2() const override { return FIELD_COUNT_V2; } - const RepeatedFieldMetaV2 *get_repeated_field_metadata_v2() const override { return nullptr; } - size_t get_repeated_field_count_v2() const override { return REPEATED_COUNT_V2; } + static const FieldMetaV3 FIELDS_V3[5]; + static constexpr size_t FIELD_COUNT_V3 = 5; + static constexpr size_t REPEATED_COUNT_V3 = 0; + // V3 metadata getters + const FieldMetaV3 *get_field_metadata_v3() const override { return FIELDS_V3; } + size_t get_field_count_v3() const override { return FIELD_COUNT_V3; } + const RepeatedFieldMetaV3 *get_repeated_field_metadata_v3() const override { return nullptr; } + size_t get_repeated_field_count_v3() const override { return REPEATED_COUNT_V3; } #ifdef HAS_PROTO_MESSAGE_DUMP void dump_to(std::string &out) const override; #endif @@ -2072,15 +2072,15 @@ class ListEntitiesMediaPlayerResponse : public InfoResponseProtoMessage { #endif bool supports_pause{false}; std::vector supported_formats{}; - static const FieldMetaV2 FIELDS_V2[9]; - static constexpr size_t FIELD_COUNT_V2 = 9; - static const RepeatedFieldMetaV2 REPEATED_FIELDS_V2[1]; - static constexpr size_t REPEATED_COUNT_V2 = 1; - // Virtual metadata getters - const FieldMetaV2 *get_field_metadata_v2() const override { return FIELDS_V2; } - size_t get_field_count_v2() const override { return FIELD_COUNT_V2; } - const RepeatedFieldMetaV2 *get_repeated_field_metadata_v2() const override { return REPEATED_FIELDS_V2; } - size_t get_repeated_field_count_v2() const override { return REPEATED_COUNT_V2; } + static const FieldMetaV3 FIELDS_V3[9]; + static constexpr size_t FIELD_COUNT_V3 = 9; + static const RepeatedFieldMetaV3 REPEATED_FIELDS_V3[1]; + static constexpr size_t REPEATED_COUNT_V3 = 1; + // V3 metadata getters + const FieldMetaV3 *get_field_metadata_v3() const override { return FIELDS_V3; } + size_t get_field_count_v3() const override { return FIELD_COUNT_V3; } + const RepeatedFieldMetaV3 *get_repeated_field_metadata_v3() const override { return REPEATED_FIELDS_V3; } + size_t get_repeated_field_count_v3() const override { return REPEATED_COUNT_V3; } #ifdef HAS_PROTO_MESSAGE_DUMP void dump_to(std::string &out) const override; #endif @@ -2097,14 +2097,14 @@ class MediaPlayerStateResponse : public StateResponseProtoMessage { enums::MediaPlayerState state{}; float volume{0.0f}; bool muted{false}; - static const FieldMetaV2 FIELDS_V2[5]; - static constexpr size_t FIELD_COUNT_V2 = 5; - static constexpr size_t REPEATED_COUNT_V2 = 0; - // Virtual metadata getters - const FieldMetaV2 *get_field_metadata_v2() const override { return FIELDS_V2; } - size_t get_field_count_v2() const override { return FIELD_COUNT_V2; } - const RepeatedFieldMetaV2 *get_repeated_field_metadata_v2() const override { return nullptr; } - size_t get_repeated_field_count_v2() const override { return REPEATED_COUNT_V2; } + static const FieldMetaV3 FIELDS_V3[5]; + static constexpr size_t FIELD_COUNT_V3 = 5; + static constexpr size_t REPEATED_COUNT_V3 = 0; + // V3 metadata getters + const FieldMetaV3 *get_field_metadata_v3() const override { return FIELDS_V3; } + size_t get_field_count_v3() const override { return FIELD_COUNT_V3; } + const RepeatedFieldMetaV3 *get_repeated_field_metadata_v3() const override { return nullptr; } + size_t get_repeated_field_count_v3() const override { return REPEATED_COUNT_V3; } #ifdef HAS_PROTO_MESSAGE_DUMP void dump_to(std::string &out) const override; #endif @@ -2127,14 +2127,14 @@ class MediaPlayerCommandRequest : public ProtoMessage { std::string media_url{}; bool has_announcement{false}; bool announcement{false}; - static const FieldMetaV2 FIELDS_V2[9]; - static constexpr size_t FIELD_COUNT_V2 = 9; - static constexpr size_t REPEATED_COUNT_V2 = 0; - // Virtual metadata getters - const FieldMetaV2 *get_field_metadata_v2() const override { return FIELDS_V2; } - size_t get_field_count_v2() const override { return FIELD_COUNT_V2; } - const RepeatedFieldMetaV2 *get_repeated_field_metadata_v2() const override { return nullptr; } - size_t get_repeated_field_count_v2() const override { return REPEATED_COUNT_V2; } + static const FieldMetaV3 FIELDS_V3[9]; + static constexpr size_t FIELD_COUNT_V3 = 9; + static constexpr size_t REPEATED_COUNT_V3 = 0; + // V3 metadata getters + const FieldMetaV3 *get_field_metadata_v3() const override { return FIELDS_V3; } + size_t get_field_count_v3() const override { return FIELD_COUNT_V3; } + const RepeatedFieldMetaV3 *get_repeated_field_metadata_v3() const override { return nullptr; } + size_t get_repeated_field_count_v3() const override { return REPEATED_COUNT_V3; } #ifdef HAS_PROTO_MESSAGE_DUMP void dump_to(std::string &out) const override; #endif @@ -2151,14 +2151,14 @@ class SubscribeBluetoothLEAdvertisementsRequest : public ProtoMessage { const char *message_name() const override { return "subscribe_bluetooth_le_advertisements_request"; } #endif uint32_t flags{0}; - static const FieldMetaV2 FIELDS_V2[1]; - static constexpr size_t FIELD_COUNT_V2 = 1; - static constexpr size_t REPEATED_COUNT_V2 = 0; - // Virtual metadata getters - const FieldMetaV2 *get_field_metadata_v2() const override { return FIELDS_V2; } - size_t get_field_count_v2() const override { return FIELD_COUNT_V2; } - const RepeatedFieldMetaV2 *get_repeated_field_metadata_v2() const override { return nullptr; } - size_t get_repeated_field_count_v2() const override { return REPEATED_COUNT_V2; } + static const FieldMetaV3 FIELDS_V3[1]; + static constexpr size_t FIELD_COUNT_V3 = 1; + static constexpr size_t REPEATED_COUNT_V3 = 0; + // V3 metadata getters + const FieldMetaV3 *get_field_metadata_v3() const override { return FIELDS_V3; } + size_t get_field_count_v3() const override { return FIELD_COUNT_V3; } + const RepeatedFieldMetaV3 *get_repeated_field_metadata_v3() const override { return nullptr; } + size_t get_repeated_field_count_v3() const override { return REPEATED_COUNT_V3; } #ifdef HAS_PROTO_MESSAGE_DUMP void dump_to(std::string &out) const override; #endif @@ -2170,15 +2170,15 @@ class BluetoothServiceData : public ProtoMessage { std::string uuid{}; std::vector legacy_data{}; std::string data{}; - static const FieldMetaV2 FIELDS_V2[2]; - static constexpr size_t FIELD_COUNT_V2 = 2; - static const RepeatedFieldMetaV2 REPEATED_FIELDS_V2[1]; - static constexpr size_t REPEATED_COUNT_V2 = 1; - // Virtual metadata getters - const FieldMetaV2 *get_field_metadata_v2() const override { return FIELDS_V2; } - size_t get_field_count_v2() const override { return FIELD_COUNT_V2; } - const RepeatedFieldMetaV2 *get_repeated_field_metadata_v2() const override { return REPEATED_FIELDS_V2; } - size_t get_repeated_field_count_v2() const override { return REPEATED_COUNT_V2; } + static const FieldMetaV3 FIELDS_V3[2]; + static constexpr size_t FIELD_COUNT_V3 = 2; + static const RepeatedFieldMetaV3 REPEATED_FIELDS_V3[1]; + static constexpr size_t REPEATED_COUNT_V3 = 1; + // V3 metadata getters + const FieldMetaV3 *get_field_metadata_v3() const override { return FIELDS_V3; } + size_t get_field_count_v3() const override { return FIELD_COUNT_V3; } + const RepeatedFieldMetaV3 *get_repeated_field_metadata_v3() const override { return REPEATED_FIELDS_V3; } + size_t get_repeated_field_count_v3() const override { return REPEATED_COUNT_V3; } #ifdef HAS_PROTO_MESSAGE_DUMP void dump_to(std::string &out) const override; #endif @@ -2199,15 +2199,15 @@ class BluetoothLEAdvertisementResponse : public ProtoMessage { std::vector service_data{}; std::vector manufacturer_data{}; uint32_t address_type{0}; - static const FieldMetaV2 FIELDS_V2[4]; - static constexpr size_t FIELD_COUNT_V2 = 4; - static const RepeatedFieldMetaV2 REPEATED_FIELDS_V2[3]; - static constexpr size_t REPEATED_COUNT_V2 = 3; - // Virtual metadata getters - const FieldMetaV2 *get_field_metadata_v2() const override { return FIELDS_V2; } - size_t get_field_count_v2() const override { return FIELD_COUNT_V2; } - const RepeatedFieldMetaV2 *get_repeated_field_metadata_v2() const override { return REPEATED_FIELDS_V2; } - size_t get_repeated_field_count_v2() const override { return REPEATED_COUNT_V2; } + static const FieldMetaV3 FIELDS_V3[4]; + static constexpr size_t FIELD_COUNT_V3 = 4; + static const RepeatedFieldMetaV3 REPEATED_FIELDS_V3[3]; + static constexpr size_t REPEATED_COUNT_V3 = 3; + // V3 metadata getters + const FieldMetaV3 *get_field_metadata_v3() const override { return FIELDS_V3; } + size_t get_field_count_v3() const override { return FIELD_COUNT_V3; } + const RepeatedFieldMetaV3 *get_repeated_field_metadata_v3() const override { return REPEATED_FIELDS_V3; } + size_t get_repeated_field_count_v3() const override { return REPEATED_COUNT_V3; } #ifdef HAS_PROTO_MESSAGE_DUMP void dump_to(std::string &out) const override; #endif @@ -2220,14 +2220,14 @@ class BluetoothLERawAdvertisement : public ProtoMessage { int32_t rssi{0}; uint32_t address_type{0}; std::string data{}; - static const FieldMetaV2 FIELDS_V2[4]; - static constexpr size_t FIELD_COUNT_V2 = 4; - static constexpr size_t REPEATED_COUNT_V2 = 0; - // Virtual metadata getters - const FieldMetaV2 *get_field_metadata_v2() const override { return FIELDS_V2; } - size_t get_field_count_v2() const override { return FIELD_COUNT_V2; } - const RepeatedFieldMetaV2 *get_repeated_field_metadata_v2() const override { return nullptr; } - size_t get_repeated_field_count_v2() const override { return REPEATED_COUNT_V2; } + static const FieldMetaV3 FIELDS_V3[4]; + static constexpr size_t FIELD_COUNT_V3 = 4; + static constexpr size_t REPEATED_COUNT_V3 = 0; + // V3 metadata getters + const FieldMetaV3 *get_field_metadata_v3() const override { return FIELDS_V3; } + size_t get_field_count_v3() const override { return FIELD_COUNT_V3; } + const RepeatedFieldMetaV3 *get_repeated_field_metadata_v3() const override { return nullptr; } + size_t get_repeated_field_count_v3() const override { return REPEATED_COUNT_V3; } #ifdef HAS_PROTO_MESSAGE_DUMP void dump_to(std::string &out) const override; #endif @@ -2242,14 +2242,14 @@ class BluetoothLERawAdvertisementsResponse : public ProtoMessage { const char *message_name() const override { return "bluetooth_le_raw_advertisements_response"; } #endif std::vector advertisements{}; - static constexpr size_t FIELD_COUNT_V2 = 0; - static const RepeatedFieldMetaV2 REPEATED_FIELDS_V2[1]; - static constexpr size_t REPEATED_COUNT_V2 = 1; - // Virtual metadata getters - const FieldMetaV2 *get_field_metadata_v2() const override { return nullptr; } - size_t get_field_count_v2() const override { return FIELD_COUNT_V2; } - const RepeatedFieldMetaV2 *get_repeated_field_metadata_v2() const override { return REPEATED_FIELDS_V2; } - size_t get_repeated_field_count_v2() const override { return REPEATED_COUNT_V2; } + static constexpr size_t FIELD_COUNT_V3 = 0; + static const RepeatedFieldMetaV3 REPEATED_FIELDS_V3[1]; + static constexpr size_t REPEATED_COUNT_V3 = 1; + // V3 metadata getters + const FieldMetaV3 *get_field_metadata_v3() const override { return nullptr; } + size_t get_field_count_v3() const override { return FIELD_COUNT_V3; } + const RepeatedFieldMetaV3 *get_repeated_field_metadata_v3() const override { return REPEATED_FIELDS_V3; } + size_t get_repeated_field_count_v3() const override { return REPEATED_COUNT_V3; } #ifdef HAS_PROTO_MESSAGE_DUMP void dump_to(std::string &out) const override; #endif @@ -2267,14 +2267,14 @@ class BluetoothDeviceRequest : public ProtoMessage { enums::BluetoothDeviceRequestType request_type{}; bool has_address_type{false}; uint32_t address_type{0}; - static const FieldMetaV2 FIELDS_V2[4]; - static constexpr size_t FIELD_COUNT_V2 = 4; - static constexpr size_t REPEATED_COUNT_V2 = 0; - // Virtual metadata getters - const FieldMetaV2 *get_field_metadata_v2() const override { return FIELDS_V2; } - size_t get_field_count_v2() const override { return FIELD_COUNT_V2; } - const RepeatedFieldMetaV2 *get_repeated_field_metadata_v2() const override { return nullptr; } - size_t get_repeated_field_count_v2() const override { return REPEATED_COUNT_V2; } + static const FieldMetaV3 FIELDS_V3[4]; + static constexpr size_t FIELD_COUNT_V3 = 4; + static constexpr size_t REPEATED_COUNT_V3 = 0; + // V3 metadata getters + const FieldMetaV3 *get_field_metadata_v3() const override { return FIELDS_V3; } + size_t get_field_count_v3() const override { return FIELD_COUNT_V3; } + const RepeatedFieldMetaV3 *get_repeated_field_metadata_v3() const override { return nullptr; } + size_t get_repeated_field_count_v3() const override { return REPEATED_COUNT_V3; } #ifdef HAS_PROTO_MESSAGE_DUMP void dump_to(std::string &out) const override; #endif @@ -2292,14 +2292,14 @@ class BluetoothDeviceConnectionResponse : public ProtoMessage { bool connected{false}; uint32_t mtu{0}; int32_t error{0}; - static const FieldMetaV2 FIELDS_V2[4]; - static constexpr size_t FIELD_COUNT_V2 = 4; - static constexpr size_t REPEATED_COUNT_V2 = 0; - // Virtual metadata getters - const FieldMetaV2 *get_field_metadata_v2() const override { return FIELDS_V2; } - size_t get_field_count_v2() const override { return FIELD_COUNT_V2; } - const RepeatedFieldMetaV2 *get_repeated_field_metadata_v2() const override { return nullptr; } - size_t get_repeated_field_count_v2() const override { return REPEATED_COUNT_V2; } + static const FieldMetaV3 FIELDS_V3[4]; + static constexpr size_t FIELD_COUNT_V3 = 4; + static constexpr size_t REPEATED_COUNT_V3 = 0; + // V3 metadata getters + const FieldMetaV3 *get_field_metadata_v3() const override { return FIELDS_V3; } + size_t get_field_count_v3() const override { return FIELD_COUNT_V3; } + const RepeatedFieldMetaV3 *get_repeated_field_metadata_v3() const override { return nullptr; } + size_t get_repeated_field_count_v3() const override { return REPEATED_COUNT_V3; } #ifdef HAS_PROTO_MESSAGE_DUMP void dump_to(std::string &out) const override; #endif @@ -2314,14 +2314,14 @@ class BluetoothGATTGetServicesRequest : public ProtoMessage { const char *message_name() const override { return "bluetooth_gatt_get_services_request"; } #endif uint64_t address{0}; - static const FieldMetaV2 FIELDS_V2[1]; - static constexpr size_t FIELD_COUNT_V2 = 1; - static constexpr size_t REPEATED_COUNT_V2 = 0; - // Virtual metadata getters - const FieldMetaV2 *get_field_metadata_v2() const override { return FIELDS_V2; } - size_t get_field_count_v2() const override { return FIELD_COUNT_V2; } - const RepeatedFieldMetaV2 *get_repeated_field_metadata_v2() const override { return nullptr; } - size_t get_repeated_field_count_v2() const override { return REPEATED_COUNT_V2; } + static const FieldMetaV3 FIELDS_V3[1]; + static constexpr size_t FIELD_COUNT_V3 = 1; + static constexpr size_t REPEATED_COUNT_V3 = 0; + // V3 metadata getters + const FieldMetaV3 *get_field_metadata_v3() const override { return FIELDS_V3; } + size_t get_field_count_v3() const override { return FIELD_COUNT_V3; } + const RepeatedFieldMetaV3 *get_repeated_field_metadata_v3() const override { return nullptr; } + size_t get_repeated_field_count_v3() const override { return REPEATED_COUNT_V3; } #ifdef HAS_PROTO_MESSAGE_DUMP void dump_to(std::string &out) const override; #endif @@ -2332,15 +2332,15 @@ class BluetoothGATTDescriptor : public ProtoMessage { public: std::vector uuid{}; uint32_t handle{0}; - static const FieldMetaV2 FIELDS_V2[1]; - static constexpr size_t FIELD_COUNT_V2 = 1; - static const RepeatedFieldMetaV2 REPEATED_FIELDS_V2[1]; - static constexpr size_t REPEATED_COUNT_V2 = 1; - // Virtual metadata getters - const FieldMetaV2 *get_field_metadata_v2() const override { return FIELDS_V2; } - size_t get_field_count_v2() const override { return FIELD_COUNT_V2; } - const RepeatedFieldMetaV2 *get_repeated_field_metadata_v2() const override { return REPEATED_FIELDS_V2; } - size_t get_repeated_field_count_v2() const override { return REPEATED_COUNT_V2; } + static const FieldMetaV3 FIELDS_V3[1]; + static constexpr size_t FIELD_COUNT_V3 = 1; + static const RepeatedFieldMetaV3 REPEATED_FIELDS_V3[1]; + static constexpr size_t REPEATED_COUNT_V3 = 1; + // V3 metadata getters + const FieldMetaV3 *get_field_metadata_v3() const override { return FIELDS_V3; } + size_t get_field_count_v3() const override { return FIELD_COUNT_V3; } + const RepeatedFieldMetaV3 *get_repeated_field_metadata_v3() const override { return REPEATED_FIELDS_V3; } + size_t get_repeated_field_count_v3() const override { return REPEATED_COUNT_V3; } #ifdef HAS_PROTO_MESSAGE_DUMP void dump_to(std::string &out) const override; #endif @@ -2353,15 +2353,15 @@ class BluetoothGATTCharacteristic : public ProtoMessage { uint32_t handle{0}; uint32_t properties{0}; std::vector descriptors{}; - static const FieldMetaV2 FIELDS_V2[2]; - static constexpr size_t FIELD_COUNT_V2 = 2; - static const RepeatedFieldMetaV2 REPEATED_FIELDS_V2[2]; - static constexpr size_t REPEATED_COUNT_V2 = 2; - // Virtual metadata getters - const FieldMetaV2 *get_field_metadata_v2() const override { return FIELDS_V2; } - size_t get_field_count_v2() const override { return FIELD_COUNT_V2; } - const RepeatedFieldMetaV2 *get_repeated_field_metadata_v2() const override { return REPEATED_FIELDS_V2; } - size_t get_repeated_field_count_v2() const override { return REPEATED_COUNT_V2; } + static const FieldMetaV3 FIELDS_V3[2]; + static constexpr size_t FIELD_COUNT_V3 = 2; + static const RepeatedFieldMetaV3 REPEATED_FIELDS_V3[2]; + static constexpr size_t REPEATED_COUNT_V3 = 2; + // V3 metadata getters + const FieldMetaV3 *get_field_metadata_v3() const override { return FIELDS_V3; } + size_t get_field_count_v3() const override { return FIELD_COUNT_V3; } + const RepeatedFieldMetaV3 *get_repeated_field_metadata_v3() const override { return REPEATED_FIELDS_V3; } + size_t get_repeated_field_count_v3() const override { return REPEATED_COUNT_V3; } #ifdef HAS_PROTO_MESSAGE_DUMP void dump_to(std::string &out) const override; #endif @@ -2373,15 +2373,15 @@ class BluetoothGATTService : public ProtoMessage { std::vector uuid{}; uint32_t handle{0}; std::vector characteristics{}; - static const FieldMetaV2 FIELDS_V2[1]; - static constexpr size_t FIELD_COUNT_V2 = 1; - static const RepeatedFieldMetaV2 REPEATED_FIELDS_V2[2]; - static constexpr size_t REPEATED_COUNT_V2 = 2; - // Virtual metadata getters - const FieldMetaV2 *get_field_metadata_v2() const override { return FIELDS_V2; } - size_t get_field_count_v2() const override { return FIELD_COUNT_V2; } - const RepeatedFieldMetaV2 *get_repeated_field_metadata_v2() const override { return REPEATED_FIELDS_V2; } - size_t get_repeated_field_count_v2() const override { return REPEATED_COUNT_V2; } + static const FieldMetaV3 FIELDS_V3[1]; + static constexpr size_t FIELD_COUNT_V3 = 1; + static const RepeatedFieldMetaV3 REPEATED_FIELDS_V3[2]; + static constexpr size_t REPEATED_COUNT_V3 = 2; + // V3 metadata getters + const FieldMetaV3 *get_field_metadata_v3() const override { return FIELDS_V3; } + size_t get_field_count_v3() const override { return FIELD_COUNT_V3; } + const RepeatedFieldMetaV3 *get_repeated_field_metadata_v3() const override { return REPEATED_FIELDS_V3; } + size_t get_repeated_field_count_v3() const override { return REPEATED_COUNT_V3; } #ifdef HAS_PROTO_MESSAGE_DUMP void dump_to(std::string &out) const override; #endif @@ -2397,15 +2397,15 @@ class BluetoothGATTGetServicesResponse : public ProtoMessage { #endif uint64_t address{0}; std::vector services{}; - static const FieldMetaV2 FIELDS_V2[1]; - static constexpr size_t FIELD_COUNT_V2 = 1; - static const RepeatedFieldMetaV2 REPEATED_FIELDS_V2[1]; - static constexpr size_t REPEATED_COUNT_V2 = 1; - // Virtual metadata getters - const FieldMetaV2 *get_field_metadata_v2() const override { return FIELDS_V2; } - size_t get_field_count_v2() const override { return FIELD_COUNT_V2; } - const RepeatedFieldMetaV2 *get_repeated_field_metadata_v2() const override { return REPEATED_FIELDS_V2; } - size_t get_repeated_field_count_v2() const override { return REPEATED_COUNT_V2; } + static const FieldMetaV3 FIELDS_V3[1]; + static constexpr size_t FIELD_COUNT_V3 = 1; + static const RepeatedFieldMetaV3 REPEATED_FIELDS_V3[1]; + static constexpr size_t REPEATED_COUNT_V3 = 1; + // V3 metadata getters + const FieldMetaV3 *get_field_metadata_v3() const override { return FIELDS_V3; } + size_t get_field_count_v3() const override { return FIELD_COUNT_V3; } + const RepeatedFieldMetaV3 *get_repeated_field_metadata_v3() const override { return REPEATED_FIELDS_V3; } + size_t get_repeated_field_count_v3() const override { return REPEATED_COUNT_V3; } #ifdef HAS_PROTO_MESSAGE_DUMP void dump_to(std::string &out) const override; #endif @@ -2420,14 +2420,14 @@ class BluetoothGATTGetServicesDoneResponse : public ProtoMessage { const char *message_name() const override { return "bluetooth_gatt_get_services_done_response"; } #endif uint64_t address{0}; - static const FieldMetaV2 FIELDS_V2[1]; - static constexpr size_t FIELD_COUNT_V2 = 1; - static constexpr size_t REPEATED_COUNT_V2 = 0; - // Virtual metadata getters - const FieldMetaV2 *get_field_metadata_v2() const override { return FIELDS_V2; } - size_t get_field_count_v2() const override { return FIELD_COUNT_V2; } - const RepeatedFieldMetaV2 *get_repeated_field_metadata_v2() const override { return nullptr; } - size_t get_repeated_field_count_v2() const override { return REPEATED_COUNT_V2; } + static const FieldMetaV3 FIELDS_V3[1]; + static constexpr size_t FIELD_COUNT_V3 = 1; + static constexpr size_t REPEATED_COUNT_V3 = 0; + // V3 metadata getters + const FieldMetaV3 *get_field_metadata_v3() const override { return FIELDS_V3; } + size_t get_field_count_v3() const override { return FIELD_COUNT_V3; } + const RepeatedFieldMetaV3 *get_repeated_field_metadata_v3() const override { return nullptr; } + size_t get_repeated_field_count_v3() const override { return REPEATED_COUNT_V3; } #ifdef HAS_PROTO_MESSAGE_DUMP void dump_to(std::string &out) const override; #endif @@ -2443,14 +2443,14 @@ class BluetoothGATTReadRequest : public ProtoMessage { #endif uint64_t address{0}; uint32_t handle{0}; - static const FieldMetaV2 FIELDS_V2[2]; - static constexpr size_t FIELD_COUNT_V2 = 2; - static constexpr size_t REPEATED_COUNT_V2 = 0; - // Virtual metadata getters - const FieldMetaV2 *get_field_metadata_v2() const override { return FIELDS_V2; } - size_t get_field_count_v2() const override { return FIELD_COUNT_V2; } - const RepeatedFieldMetaV2 *get_repeated_field_metadata_v2() const override { return nullptr; } - size_t get_repeated_field_count_v2() const override { return REPEATED_COUNT_V2; } + static const FieldMetaV3 FIELDS_V3[2]; + static constexpr size_t FIELD_COUNT_V3 = 2; + static constexpr size_t REPEATED_COUNT_V3 = 0; + // V3 metadata getters + const FieldMetaV3 *get_field_metadata_v3() const override { return FIELDS_V3; } + size_t get_field_count_v3() const override { return FIELD_COUNT_V3; } + const RepeatedFieldMetaV3 *get_repeated_field_metadata_v3() const override { return nullptr; } + size_t get_repeated_field_count_v3() const override { return REPEATED_COUNT_V3; } #ifdef HAS_PROTO_MESSAGE_DUMP void dump_to(std::string &out) const override; #endif @@ -2467,14 +2467,14 @@ class BluetoothGATTReadResponse : public ProtoMessage { uint64_t address{0}; uint32_t handle{0}; std::string data{}; - static const FieldMetaV2 FIELDS_V2[3]; - static constexpr size_t FIELD_COUNT_V2 = 3; - static constexpr size_t REPEATED_COUNT_V2 = 0; - // Virtual metadata getters - const FieldMetaV2 *get_field_metadata_v2() const override { return FIELDS_V2; } - size_t get_field_count_v2() const override { return FIELD_COUNT_V2; } - const RepeatedFieldMetaV2 *get_repeated_field_metadata_v2() const override { return nullptr; } - size_t get_repeated_field_count_v2() const override { return REPEATED_COUNT_V2; } + static const FieldMetaV3 FIELDS_V3[3]; + static constexpr size_t FIELD_COUNT_V3 = 3; + static constexpr size_t REPEATED_COUNT_V3 = 0; + // V3 metadata getters + const FieldMetaV3 *get_field_metadata_v3() const override { return FIELDS_V3; } + size_t get_field_count_v3() const override { return FIELD_COUNT_V3; } + const RepeatedFieldMetaV3 *get_repeated_field_metadata_v3() const override { return nullptr; } + size_t get_repeated_field_count_v3() const override { return REPEATED_COUNT_V3; } #ifdef HAS_PROTO_MESSAGE_DUMP void dump_to(std::string &out) const override; #endif @@ -2492,14 +2492,14 @@ class BluetoothGATTWriteRequest : public ProtoMessage { uint32_t handle{0}; bool response{false}; std::string data{}; - static const FieldMetaV2 FIELDS_V2[4]; - static constexpr size_t FIELD_COUNT_V2 = 4; - static constexpr size_t REPEATED_COUNT_V2 = 0; - // Virtual metadata getters - const FieldMetaV2 *get_field_metadata_v2() const override { return FIELDS_V2; } - size_t get_field_count_v2() const override { return FIELD_COUNT_V2; } - const RepeatedFieldMetaV2 *get_repeated_field_metadata_v2() const override { return nullptr; } - size_t get_repeated_field_count_v2() const override { return REPEATED_COUNT_V2; } + static const FieldMetaV3 FIELDS_V3[4]; + static constexpr size_t FIELD_COUNT_V3 = 4; + static constexpr size_t REPEATED_COUNT_V3 = 0; + // V3 metadata getters + const FieldMetaV3 *get_field_metadata_v3() const override { return FIELDS_V3; } + size_t get_field_count_v3() const override { return FIELD_COUNT_V3; } + const RepeatedFieldMetaV3 *get_repeated_field_metadata_v3() const override { return nullptr; } + size_t get_repeated_field_count_v3() const override { return REPEATED_COUNT_V3; } #ifdef HAS_PROTO_MESSAGE_DUMP void dump_to(std::string &out) const override; #endif @@ -2515,14 +2515,14 @@ class BluetoothGATTReadDescriptorRequest : public ProtoMessage { #endif uint64_t address{0}; uint32_t handle{0}; - static const FieldMetaV2 FIELDS_V2[2]; - static constexpr size_t FIELD_COUNT_V2 = 2; - static constexpr size_t REPEATED_COUNT_V2 = 0; - // Virtual metadata getters - const FieldMetaV2 *get_field_metadata_v2() const override { return FIELDS_V2; } - size_t get_field_count_v2() const override { return FIELD_COUNT_V2; } - const RepeatedFieldMetaV2 *get_repeated_field_metadata_v2() const override { return nullptr; } - size_t get_repeated_field_count_v2() const override { return REPEATED_COUNT_V2; } + static const FieldMetaV3 FIELDS_V3[2]; + static constexpr size_t FIELD_COUNT_V3 = 2; + static constexpr size_t REPEATED_COUNT_V3 = 0; + // V3 metadata getters + const FieldMetaV3 *get_field_metadata_v3() const override { return FIELDS_V3; } + size_t get_field_count_v3() const override { return FIELD_COUNT_V3; } + const RepeatedFieldMetaV3 *get_repeated_field_metadata_v3() const override { return nullptr; } + size_t get_repeated_field_count_v3() const override { return REPEATED_COUNT_V3; } #ifdef HAS_PROTO_MESSAGE_DUMP void dump_to(std::string &out) const override; #endif @@ -2539,14 +2539,14 @@ class BluetoothGATTWriteDescriptorRequest : public ProtoMessage { uint64_t address{0}; uint32_t handle{0}; std::string data{}; - static const FieldMetaV2 FIELDS_V2[3]; - static constexpr size_t FIELD_COUNT_V2 = 3; - static constexpr size_t REPEATED_COUNT_V2 = 0; - // Virtual metadata getters - const FieldMetaV2 *get_field_metadata_v2() const override { return FIELDS_V2; } - size_t get_field_count_v2() const override { return FIELD_COUNT_V2; } - const RepeatedFieldMetaV2 *get_repeated_field_metadata_v2() const override { return nullptr; } - size_t get_repeated_field_count_v2() const override { return REPEATED_COUNT_V2; } + static const FieldMetaV3 FIELDS_V3[3]; + static constexpr size_t FIELD_COUNT_V3 = 3; + static constexpr size_t REPEATED_COUNT_V3 = 0; + // V3 metadata getters + const FieldMetaV3 *get_field_metadata_v3() const override { return FIELDS_V3; } + size_t get_field_count_v3() const override { return FIELD_COUNT_V3; } + const RepeatedFieldMetaV3 *get_repeated_field_metadata_v3() const override { return nullptr; } + size_t get_repeated_field_count_v3() const override { return REPEATED_COUNT_V3; } #ifdef HAS_PROTO_MESSAGE_DUMP void dump_to(std::string &out) const override; #endif @@ -2563,14 +2563,14 @@ class BluetoothGATTNotifyRequest : public ProtoMessage { uint64_t address{0}; uint32_t handle{0}; bool enable{false}; - static const FieldMetaV2 FIELDS_V2[3]; - static constexpr size_t FIELD_COUNT_V2 = 3; - static constexpr size_t REPEATED_COUNT_V2 = 0; - // Virtual metadata getters - const FieldMetaV2 *get_field_metadata_v2() const override { return FIELDS_V2; } - size_t get_field_count_v2() const override { return FIELD_COUNT_V2; } - const RepeatedFieldMetaV2 *get_repeated_field_metadata_v2() const override { return nullptr; } - size_t get_repeated_field_count_v2() const override { return REPEATED_COUNT_V2; } + static const FieldMetaV3 FIELDS_V3[3]; + static constexpr size_t FIELD_COUNT_V3 = 3; + static constexpr size_t REPEATED_COUNT_V3 = 0; + // V3 metadata getters + const FieldMetaV3 *get_field_metadata_v3() const override { return FIELDS_V3; } + size_t get_field_count_v3() const override { return FIELD_COUNT_V3; } + const RepeatedFieldMetaV3 *get_repeated_field_metadata_v3() const override { return nullptr; } + size_t get_repeated_field_count_v3() const override { return REPEATED_COUNT_V3; } #ifdef HAS_PROTO_MESSAGE_DUMP void dump_to(std::string &out) const override; #endif @@ -2587,14 +2587,14 @@ class BluetoothGATTNotifyDataResponse : public ProtoMessage { uint64_t address{0}; uint32_t handle{0}; std::string data{}; - static const FieldMetaV2 FIELDS_V2[3]; - static constexpr size_t FIELD_COUNT_V2 = 3; - static constexpr size_t REPEATED_COUNT_V2 = 0; - // Virtual metadata getters - const FieldMetaV2 *get_field_metadata_v2() const override { return FIELDS_V2; } - size_t get_field_count_v2() const override { return FIELD_COUNT_V2; } - const RepeatedFieldMetaV2 *get_repeated_field_metadata_v2() const override { return nullptr; } - size_t get_repeated_field_count_v2() const override { return REPEATED_COUNT_V2; } + static const FieldMetaV3 FIELDS_V3[3]; + static constexpr size_t FIELD_COUNT_V3 = 3; + static constexpr size_t REPEATED_COUNT_V3 = 0; + // V3 metadata getters + const FieldMetaV3 *get_field_metadata_v3() const override { return FIELDS_V3; } + size_t get_field_count_v3() const override { return FIELD_COUNT_V3; } + const RepeatedFieldMetaV3 *get_repeated_field_metadata_v3() const override { return nullptr; } + size_t get_repeated_field_count_v3() const override { return REPEATED_COUNT_V3; } #ifdef HAS_PROTO_MESSAGE_DUMP void dump_to(std::string &out) const override; #endif @@ -2608,13 +2608,13 @@ class SubscribeBluetoothConnectionsFreeRequest : public ProtoMessage { #ifdef HAS_PROTO_MESSAGE_DUMP const char *message_name() const override { return "subscribe_bluetooth_connections_free_request"; } #endif - static constexpr size_t FIELD_COUNT_V2 = 0; - static constexpr size_t REPEATED_COUNT_V2 = 0; - // Virtual metadata getters - const FieldMetaV2 *get_field_metadata_v2() const override { return nullptr; } - size_t get_field_count_v2() const override { return FIELD_COUNT_V2; } - const RepeatedFieldMetaV2 *get_repeated_field_metadata_v2() const override { return nullptr; } - size_t get_repeated_field_count_v2() const override { return REPEATED_COUNT_V2; } + static constexpr size_t FIELD_COUNT_V3 = 0; + static constexpr size_t REPEATED_COUNT_V3 = 0; + // V3 metadata getters + const FieldMetaV3 *get_field_metadata_v3() const override { return nullptr; } + size_t get_field_count_v3() const override { return FIELD_COUNT_V3; } + const RepeatedFieldMetaV3 *get_repeated_field_metadata_v3() const override { return nullptr; } + size_t get_repeated_field_count_v3() const override { return REPEATED_COUNT_V3; } #ifdef HAS_PROTO_MESSAGE_DUMP void dump_to(std::string &out) const override; #endif @@ -2631,15 +2631,15 @@ class BluetoothConnectionsFreeResponse : public ProtoMessage { uint32_t free{0}; uint32_t limit{0}; std::vector allocated{}; - static const FieldMetaV2 FIELDS_V2[2]; - static constexpr size_t FIELD_COUNT_V2 = 2; - static const RepeatedFieldMetaV2 REPEATED_FIELDS_V2[1]; - static constexpr size_t REPEATED_COUNT_V2 = 1; - // Virtual metadata getters - const FieldMetaV2 *get_field_metadata_v2() const override { return FIELDS_V2; } - size_t get_field_count_v2() const override { return FIELD_COUNT_V2; } - const RepeatedFieldMetaV2 *get_repeated_field_metadata_v2() const override { return REPEATED_FIELDS_V2; } - size_t get_repeated_field_count_v2() const override { return REPEATED_COUNT_V2; } + static const FieldMetaV3 FIELDS_V3[2]; + static constexpr size_t FIELD_COUNT_V3 = 2; + static const RepeatedFieldMetaV3 REPEATED_FIELDS_V3[1]; + static constexpr size_t REPEATED_COUNT_V3 = 1; + // V3 metadata getters + const FieldMetaV3 *get_field_metadata_v3() const override { return FIELDS_V3; } + size_t get_field_count_v3() const override { return FIELD_COUNT_V3; } + const RepeatedFieldMetaV3 *get_repeated_field_metadata_v3() const override { return REPEATED_FIELDS_V3; } + size_t get_repeated_field_count_v3() const override { return REPEATED_COUNT_V3; } #ifdef HAS_PROTO_MESSAGE_DUMP void dump_to(std::string &out) const override; #endif @@ -2656,14 +2656,14 @@ class BluetoothGATTErrorResponse : public ProtoMessage { uint64_t address{0}; uint32_t handle{0}; int32_t error{0}; - static const FieldMetaV2 FIELDS_V2[3]; - static constexpr size_t FIELD_COUNT_V2 = 3; - static constexpr size_t REPEATED_COUNT_V2 = 0; - // Virtual metadata getters - const FieldMetaV2 *get_field_metadata_v2() const override { return FIELDS_V2; } - size_t get_field_count_v2() const override { return FIELD_COUNT_V2; } - const RepeatedFieldMetaV2 *get_repeated_field_metadata_v2() const override { return nullptr; } - size_t get_repeated_field_count_v2() const override { return REPEATED_COUNT_V2; } + static const FieldMetaV3 FIELDS_V3[3]; + static constexpr size_t FIELD_COUNT_V3 = 3; + static constexpr size_t REPEATED_COUNT_V3 = 0; + // V3 metadata getters + const FieldMetaV3 *get_field_metadata_v3() const override { return FIELDS_V3; } + size_t get_field_count_v3() const override { return FIELD_COUNT_V3; } + const RepeatedFieldMetaV3 *get_repeated_field_metadata_v3() const override { return nullptr; } + size_t get_repeated_field_count_v3() const override { return REPEATED_COUNT_V3; } #ifdef HAS_PROTO_MESSAGE_DUMP void dump_to(std::string &out) const override; #endif @@ -2679,14 +2679,14 @@ class BluetoothGATTWriteResponse : public ProtoMessage { #endif uint64_t address{0}; uint32_t handle{0}; - static const FieldMetaV2 FIELDS_V2[2]; - static constexpr size_t FIELD_COUNT_V2 = 2; - static constexpr size_t REPEATED_COUNT_V2 = 0; - // Virtual metadata getters - const FieldMetaV2 *get_field_metadata_v2() const override { return FIELDS_V2; } - size_t get_field_count_v2() const override { return FIELD_COUNT_V2; } - const RepeatedFieldMetaV2 *get_repeated_field_metadata_v2() const override { return nullptr; } - size_t get_repeated_field_count_v2() const override { return REPEATED_COUNT_V2; } + static const FieldMetaV3 FIELDS_V3[2]; + static constexpr size_t FIELD_COUNT_V3 = 2; + static constexpr size_t REPEATED_COUNT_V3 = 0; + // V3 metadata getters + const FieldMetaV3 *get_field_metadata_v3() const override { return FIELDS_V3; } + size_t get_field_count_v3() const override { return FIELD_COUNT_V3; } + const RepeatedFieldMetaV3 *get_repeated_field_metadata_v3() const override { return nullptr; } + size_t get_repeated_field_count_v3() const override { return REPEATED_COUNT_V3; } #ifdef HAS_PROTO_MESSAGE_DUMP void dump_to(std::string &out) const override; #endif @@ -2702,14 +2702,14 @@ class BluetoothGATTNotifyResponse : public ProtoMessage { #endif uint64_t address{0}; uint32_t handle{0}; - static const FieldMetaV2 FIELDS_V2[2]; - static constexpr size_t FIELD_COUNT_V2 = 2; - static constexpr size_t REPEATED_COUNT_V2 = 0; - // Virtual metadata getters - const FieldMetaV2 *get_field_metadata_v2() const override { return FIELDS_V2; } - size_t get_field_count_v2() const override { return FIELD_COUNT_V2; } - const RepeatedFieldMetaV2 *get_repeated_field_metadata_v2() const override { return nullptr; } - size_t get_repeated_field_count_v2() const override { return REPEATED_COUNT_V2; } + static const FieldMetaV3 FIELDS_V3[2]; + static constexpr size_t FIELD_COUNT_V3 = 2; + static constexpr size_t REPEATED_COUNT_V3 = 0; + // V3 metadata getters + const FieldMetaV3 *get_field_metadata_v3() const override { return FIELDS_V3; } + size_t get_field_count_v3() const override { return FIELD_COUNT_V3; } + const RepeatedFieldMetaV3 *get_repeated_field_metadata_v3() const override { return nullptr; } + size_t get_repeated_field_count_v3() const override { return REPEATED_COUNT_V3; } #ifdef HAS_PROTO_MESSAGE_DUMP void dump_to(std::string &out) const override; #endif @@ -2726,14 +2726,14 @@ class BluetoothDevicePairingResponse : public ProtoMessage { uint64_t address{0}; bool paired{false}; int32_t error{0}; - static const FieldMetaV2 FIELDS_V2[3]; - static constexpr size_t FIELD_COUNT_V2 = 3; - static constexpr size_t REPEATED_COUNT_V2 = 0; - // Virtual metadata getters - const FieldMetaV2 *get_field_metadata_v2() const override { return FIELDS_V2; } - size_t get_field_count_v2() const override { return FIELD_COUNT_V2; } - const RepeatedFieldMetaV2 *get_repeated_field_metadata_v2() const override { return nullptr; } - size_t get_repeated_field_count_v2() const override { return REPEATED_COUNT_V2; } + static const FieldMetaV3 FIELDS_V3[3]; + static constexpr size_t FIELD_COUNT_V3 = 3; + static constexpr size_t REPEATED_COUNT_V3 = 0; + // V3 metadata getters + const FieldMetaV3 *get_field_metadata_v3() const override { return FIELDS_V3; } + size_t get_field_count_v3() const override { return FIELD_COUNT_V3; } + const RepeatedFieldMetaV3 *get_repeated_field_metadata_v3() const override { return nullptr; } + size_t get_repeated_field_count_v3() const override { return REPEATED_COUNT_V3; } #ifdef HAS_PROTO_MESSAGE_DUMP void dump_to(std::string &out) const override; #endif @@ -2750,14 +2750,14 @@ class BluetoothDeviceUnpairingResponse : public ProtoMessage { uint64_t address{0}; bool success{false}; int32_t error{0}; - static const FieldMetaV2 FIELDS_V2[3]; - static constexpr size_t FIELD_COUNT_V2 = 3; - static constexpr size_t REPEATED_COUNT_V2 = 0; - // Virtual metadata getters - const FieldMetaV2 *get_field_metadata_v2() const override { return FIELDS_V2; } - size_t get_field_count_v2() const override { return FIELD_COUNT_V2; } - const RepeatedFieldMetaV2 *get_repeated_field_metadata_v2() const override { return nullptr; } - size_t get_repeated_field_count_v2() const override { return REPEATED_COUNT_V2; } + static const FieldMetaV3 FIELDS_V3[3]; + static constexpr size_t FIELD_COUNT_V3 = 3; + static constexpr size_t REPEATED_COUNT_V3 = 0; + // V3 metadata getters + const FieldMetaV3 *get_field_metadata_v3() const override { return FIELDS_V3; } + size_t get_field_count_v3() const override { return FIELD_COUNT_V3; } + const RepeatedFieldMetaV3 *get_repeated_field_metadata_v3() const override { return nullptr; } + size_t get_repeated_field_count_v3() const override { return REPEATED_COUNT_V3; } #ifdef HAS_PROTO_MESSAGE_DUMP void dump_to(std::string &out) const override; #endif @@ -2771,13 +2771,13 @@ class UnsubscribeBluetoothLEAdvertisementsRequest : public ProtoMessage { #ifdef HAS_PROTO_MESSAGE_DUMP const char *message_name() const override { return "unsubscribe_bluetooth_le_advertisements_request"; } #endif - static constexpr size_t FIELD_COUNT_V2 = 0; - static constexpr size_t REPEATED_COUNT_V2 = 0; - // Virtual metadata getters - const FieldMetaV2 *get_field_metadata_v2() const override { return nullptr; } - size_t get_field_count_v2() const override { return FIELD_COUNT_V2; } - const RepeatedFieldMetaV2 *get_repeated_field_metadata_v2() const override { return nullptr; } - size_t get_repeated_field_count_v2() const override { return REPEATED_COUNT_V2; } + static constexpr size_t FIELD_COUNT_V3 = 0; + static constexpr size_t REPEATED_COUNT_V3 = 0; + // V3 metadata getters + const FieldMetaV3 *get_field_metadata_v3() const override { return nullptr; } + size_t get_field_count_v3() const override { return FIELD_COUNT_V3; } + const RepeatedFieldMetaV3 *get_repeated_field_metadata_v3() const override { return nullptr; } + size_t get_repeated_field_count_v3() const override { return REPEATED_COUNT_V3; } #ifdef HAS_PROTO_MESSAGE_DUMP void dump_to(std::string &out) const override; #endif @@ -2794,14 +2794,14 @@ class BluetoothDeviceClearCacheResponse : public ProtoMessage { uint64_t address{0}; bool success{false}; int32_t error{0}; - static const FieldMetaV2 FIELDS_V2[3]; - static constexpr size_t FIELD_COUNT_V2 = 3; - static constexpr size_t REPEATED_COUNT_V2 = 0; - // Virtual metadata getters - const FieldMetaV2 *get_field_metadata_v2() const override { return FIELDS_V2; } - size_t get_field_count_v2() const override { return FIELD_COUNT_V2; } - const RepeatedFieldMetaV2 *get_repeated_field_metadata_v2() const override { return nullptr; } - size_t get_repeated_field_count_v2() const override { return REPEATED_COUNT_V2; } + static const FieldMetaV3 FIELDS_V3[3]; + static constexpr size_t FIELD_COUNT_V3 = 3; + static constexpr size_t REPEATED_COUNT_V3 = 0; + // V3 metadata getters + const FieldMetaV3 *get_field_metadata_v3() const override { return FIELDS_V3; } + size_t get_field_count_v3() const override { return FIELD_COUNT_V3; } + const RepeatedFieldMetaV3 *get_repeated_field_metadata_v3() const override { return nullptr; } + size_t get_repeated_field_count_v3() const override { return REPEATED_COUNT_V3; } #ifdef HAS_PROTO_MESSAGE_DUMP void dump_to(std::string &out) const override; #endif @@ -2817,14 +2817,14 @@ class BluetoothScannerStateResponse : public ProtoMessage { #endif enums::BluetoothScannerState state{}; enums::BluetoothScannerMode mode{}; - static const FieldMetaV2 FIELDS_V2[2]; - static constexpr size_t FIELD_COUNT_V2 = 2; - static constexpr size_t REPEATED_COUNT_V2 = 0; - // Virtual metadata getters - const FieldMetaV2 *get_field_metadata_v2() const override { return FIELDS_V2; } - size_t get_field_count_v2() const override { return FIELD_COUNT_V2; } - const RepeatedFieldMetaV2 *get_repeated_field_metadata_v2() const override { return nullptr; } - size_t get_repeated_field_count_v2() const override { return REPEATED_COUNT_V2; } + static const FieldMetaV3 FIELDS_V3[2]; + static constexpr size_t FIELD_COUNT_V3 = 2; + static constexpr size_t REPEATED_COUNT_V3 = 0; + // V3 metadata getters + const FieldMetaV3 *get_field_metadata_v3() const override { return FIELDS_V3; } + size_t get_field_count_v3() const override { return FIELD_COUNT_V3; } + const RepeatedFieldMetaV3 *get_repeated_field_metadata_v3() const override { return nullptr; } + size_t get_repeated_field_count_v3() const override { return REPEATED_COUNT_V3; } #ifdef HAS_PROTO_MESSAGE_DUMP void dump_to(std::string &out) const override; #endif @@ -2839,14 +2839,14 @@ class BluetoothScannerSetModeRequest : public ProtoMessage { const char *message_name() const override { return "bluetooth_scanner_set_mode_request"; } #endif enums::BluetoothScannerMode mode{}; - static const FieldMetaV2 FIELDS_V2[1]; - static constexpr size_t FIELD_COUNT_V2 = 1; - static constexpr size_t REPEATED_COUNT_V2 = 0; - // Virtual metadata getters - const FieldMetaV2 *get_field_metadata_v2() const override { return FIELDS_V2; } - size_t get_field_count_v2() const override { return FIELD_COUNT_V2; } - const RepeatedFieldMetaV2 *get_repeated_field_metadata_v2() const override { return nullptr; } - size_t get_repeated_field_count_v2() const override { return REPEATED_COUNT_V2; } + static const FieldMetaV3 FIELDS_V3[1]; + static constexpr size_t FIELD_COUNT_V3 = 1; + static constexpr size_t REPEATED_COUNT_V3 = 0; + // V3 metadata getters + const FieldMetaV3 *get_field_metadata_v3() const override { return FIELDS_V3; } + size_t get_field_count_v3() const override { return FIELD_COUNT_V3; } + const RepeatedFieldMetaV3 *get_repeated_field_metadata_v3() const override { return nullptr; } + size_t get_repeated_field_count_v3() const override { return REPEATED_COUNT_V3; } #ifdef HAS_PROTO_MESSAGE_DUMP void dump_to(std::string &out) const override; #endif @@ -2864,14 +2864,14 @@ class SubscribeVoiceAssistantRequest : public ProtoMessage { #endif bool subscribe{false}; uint32_t flags{0}; - static const FieldMetaV2 FIELDS_V2[2]; - static constexpr size_t FIELD_COUNT_V2 = 2; - static constexpr size_t REPEATED_COUNT_V2 = 0; - // Virtual metadata getters - const FieldMetaV2 *get_field_metadata_v2() const override { return FIELDS_V2; } - size_t get_field_count_v2() const override { return FIELD_COUNT_V2; } - const RepeatedFieldMetaV2 *get_repeated_field_metadata_v2() const override { return nullptr; } - size_t get_repeated_field_count_v2() const override { return REPEATED_COUNT_V2; } + static const FieldMetaV3 FIELDS_V3[2]; + static constexpr size_t FIELD_COUNT_V3 = 2; + static constexpr size_t REPEATED_COUNT_V3 = 0; + // V3 metadata getters + const FieldMetaV3 *get_field_metadata_v3() const override { return FIELDS_V3; } + size_t get_field_count_v3() const override { return FIELD_COUNT_V3; } + const RepeatedFieldMetaV3 *get_repeated_field_metadata_v3() const override { return nullptr; } + size_t get_repeated_field_count_v3() const override { return REPEATED_COUNT_V3; } #ifdef HAS_PROTO_MESSAGE_DUMP void dump_to(std::string &out) const override; #endif @@ -2883,14 +2883,14 @@ class VoiceAssistantAudioSettings : public ProtoMessage { uint32_t noise_suppression_level{0}; uint32_t auto_gain{0}; float volume_multiplier{0.0f}; - static const FieldMetaV2 FIELDS_V2[3]; - static constexpr size_t FIELD_COUNT_V2 = 3; - static constexpr size_t REPEATED_COUNT_V2 = 0; - // Virtual metadata getters - const FieldMetaV2 *get_field_metadata_v2() const override { return FIELDS_V2; } - size_t get_field_count_v2() const override { return FIELD_COUNT_V2; } - const RepeatedFieldMetaV2 *get_repeated_field_metadata_v2() const override { return nullptr; } - size_t get_repeated_field_count_v2() const override { return REPEATED_COUNT_V2; } + static const FieldMetaV3 FIELDS_V3[3]; + static constexpr size_t FIELD_COUNT_V3 = 3; + static constexpr size_t REPEATED_COUNT_V3 = 0; + // V3 metadata getters + const FieldMetaV3 *get_field_metadata_v3() const override { return FIELDS_V3; } + size_t get_field_count_v3() const override { return FIELD_COUNT_V3; } + const RepeatedFieldMetaV3 *get_repeated_field_metadata_v3() const override { return nullptr; } + size_t get_repeated_field_count_v3() const override { return REPEATED_COUNT_V3; } #ifdef HAS_PROTO_MESSAGE_DUMP void dump_to(std::string &out) const override; #endif @@ -2909,14 +2909,14 @@ class VoiceAssistantRequest : public ProtoMessage { uint32_t flags{0}; VoiceAssistantAudioSettings audio_settings{}; std::string wake_word_phrase{}; - static const FieldMetaV2 FIELDS_V2[5]; - static constexpr size_t FIELD_COUNT_V2 = 5; - static constexpr size_t REPEATED_COUNT_V2 = 0; - // Virtual metadata getters - const FieldMetaV2 *get_field_metadata_v2() const override { return FIELDS_V2; } - size_t get_field_count_v2() const override { return FIELD_COUNT_V2; } - const RepeatedFieldMetaV2 *get_repeated_field_metadata_v2() const override { return nullptr; } - size_t get_repeated_field_count_v2() const override { return REPEATED_COUNT_V2; } + static const FieldMetaV3 FIELDS_V3[5]; + static constexpr size_t FIELD_COUNT_V3 = 5; + static constexpr size_t REPEATED_COUNT_V3 = 0; + // V3 metadata getters + const FieldMetaV3 *get_field_metadata_v3() const override { return FIELDS_V3; } + size_t get_field_count_v3() const override { return FIELD_COUNT_V3; } + const RepeatedFieldMetaV3 *get_repeated_field_metadata_v3() const override { return nullptr; } + size_t get_repeated_field_count_v3() const override { return REPEATED_COUNT_V3; } #ifdef HAS_PROTO_MESSAGE_DUMP void dump_to(std::string &out) const override; #endif @@ -2932,14 +2932,14 @@ class VoiceAssistantResponse : public ProtoMessage { #endif uint32_t port{0}; bool error{false}; - static const FieldMetaV2 FIELDS_V2[2]; - static constexpr size_t FIELD_COUNT_V2 = 2; - static constexpr size_t REPEATED_COUNT_V2 = 0; - // Virtual metadata getters - const FieldMetaV2 *get_field_metadata_v2() const override { return FIELDS_V2; } - size_t get_field_count_v2() const override { return FIELD_COUNT_V2; } - const RepeatedFieldMetaV2 *get_repeated_field_metadata_v2() const override { return nullptr; } - size_t get_repeated_field_count_v2() const override { return REPEATED_COUNT_V2; } + static const FieldMetaV3 FIELDS_V3[2]; + static constexpr size_t FIELD_COUNT_V3 = 2; + static constexpr size_t REPEATED_COUNT_V3 = 0; + // V3 metadata getters + const FieldMetaV3 *get_field_metadata_v3() const override { return FIELDS_V3; } + size_t get_field_count_v3() const override { return FIELD_COUNT_V3; } + const RepeatedFieldMetaV3 *get_repeated_field_metadata_v3() const override { return nullptr; } + size_t get_repeated_field_count_v3() const override { return REPEATED_COUNT_V3; } #ifdef HAS_PROTO_MESSAGE_DUMP void dump_to(std::string &out) const override; #endif @@ -2950,14 +2950,14 @@ class VoiceAssistantEventData : public ProtoMessage { public: std::string name{}; std::string value{}; - static const FieldMetaV2 FIELDS_V2[2]; - static constexpr size_t FIELD_COUNT_V2 = 2; - static constexpr size_t REPEATED_COUNT_V2 = 0; - // Virtual metadata getters - const FieldMetaV2 *get_field_metadata_v2() const override { return FIELDS_V2; } - size_t get_field_count_v2() const override { return FIELD_COUNT_V2; } - const RepeatedFieldMetaV2 *get_repeated_field_metadata_v2() const override { return nullptr; } - size_t get_repeated_field_count_v2() const override { return REPEATED_COUNT_V2; } + static const FieldMetaV3 FIELDS_V3[2]; + static constexpr size_t FIELD_COUNT_V3 = 2; + static constexpr size_t REPEATED_COUNT_V3 = 0; + // V3 metadata getters + const FieldMetaV3 *get_field_metadata_v3() const override { return FIELDS_V3; } + size_t get_field_count_v3() const override { return FIELD_COUNT_V3; } + const RepeatedFieldMetaV3 *get_repeated_field_metadata_v3() const override { return nullptr; } + size_t get_repeated_field_count_v3() const override { return REPEATED_COUNT_V3; } #ifdef HAS_PROTO_MESSAGE_DUMP void dump_to(std::string &out) const override; #endif @@ -2973,15 +2973,15 @@ class VoiceAssistantEventResponse : public ProtoMessage { #endif enums::VoiceAssistantEvent event_type{}; std::vector data{}; - static const FieldMetaV2 FIELDS_V2[1]; - static constexpr size_t FIELD_COUNT_V2 = 1; - static const RepeatedFieldMetaV2 REPEATED_FIELDS_V2[1]; - static constexpr size_t REPEATED_COUNT_V2 = 1; - // Virtual metadata getters - const FieldMetaV2 *get_field_metadata_v2() const override { return FIELDS_V2; } - size_t get_field_count_v2() const override { return FIELD_COUNT_V2; } - const RepeatedFieldMetaV2 *get_repeated_field_metadata_v2() const override { return REPEATED_FIELDS_V2; } - size_t get_repeated_field_count_v2() const override { return REPEATED_COUNT_V2; } + static const FieldMetaV3 FIELDS_V3[1]; + static constexpr size_t FIELD_COUNT_V3 = 1; + static const RepeatedFieldMetaV3 REPEATED_FIELDS_V3[1]; + static constexpr size_t REPEATED_COUNT_V3 = 1; + // V3 metadata getters + const FieldMetaV3 *get_field_metadata_v3() const override { return FIELDS_V3; } + size_t get_field_count_v3() const override { return FIELD_COUNT_V3; } + const RepeatedFieldMetaV3 *get_repeated_field_metadata_v3() const override { return REPEATED_FIELDS_V3; } + size_t get_repeated_field_count_v3() const override { return REPEATED_COUNT_V3; } #ifdef HAS_PROTO_MESSAGE_DUMP void dump_to(std::string &out) const override; #endif @@ -2997,14 +2997,14 @@ class VoiceAssistantAudio : public ProtoMessage { #endif std::string data{}; bool end{false}; - static const FieldMetaV2 FIELDS_V2[2]; - static constexpr size_t FIELD_COUNT_V2 = 2; - static constexpr size_t REPEATED_COUNT_V2 = 0; - // Virtual metadata getters - const FieldMetaV2 *get_field_metadata_v2() const override { return FIELDS_V2; } - size_t get_field_count_v2() const override { return FIELD_COUNT_V2; } - const RepeatedFieldMetaV2 *get_repeated_field_metadata_v2() const override { return nullptr; } - size_t get_repeated_field_count_v2() const override { return REPEATED_COUNT_V2; } + static const FieldMetaV3 FIELDS_V3[2]; + static constexpr size_t FIELD_COUNT_V3 = 2; + static constexpr size_t REPEATED_COUNT_V3 = 0; + // V3 metadata getters + const FieldMetaV3 *get_field_metadata_v3() const override { return FIELDS_V3; } + size_t get_field_count_v3() const override { return FIELD_COUNT_V3; } + const RepeatedFieldMetaV3 *get_repeated_field_metadata_v3() const override { return nullptr; } + size_t get_repeated_field_count_v3() const override { return REPEATED_COUNT_V3; } #ifdef HAS_PROTO_MESSAGE_DUMP void dump_to(std::string &out) const override; #endif @@ -3024,14 +3024,14 @@ class VoiceAssistantTimerEventResponse : public ProtoMessage { uint32_t total_seconds{0}; uint32_t seconds_left{0}; bool is_active{false}; - static const FieldMetaV2 FIELDS_V2[6]; - static constexpr size_t FIELD_COUNT_V2 = 6; - static constexpr size_t REPEATED_COUNT_V2 = 0; - // Virtual metadata getters - const FieldMetaV2 *get_field_metadata_v2() const override { return FIELDS_V2; } - size_t get_field_count_v2() const override { return FIELD_COUNT_V2; } - const RepeatedFieldMetaV2 *get_repeated_field_metadata_v2() const override { return nullptr; } - size_t get_repeated_field_count_v2() const override { return REPEATED_COUNT_V2; } + static const FieldMetaV3 FIELDS_V3[6]; + static constexpr size_t FIELD_COUNT_V3 = 6; + static constexpr size_t REPEATED_COUNT_V3 = 0; + // V3 metadata getters + const FieldMetaV3 *get_field_metadata_v3() const override { return FIELDS_V3; } + size_t get_field_count_v3() const override { return FIELD_COUNT_V3; } + const RepeatedFieldMetaV3 *get_repeated_field_metadata_v3() const override { return nullptr; } + size_t get_repeated_field_count_v3() const override { return REPEATED_COUNT_V3; } #ifdef HAS_PROTO_MESSAGE_DUMP void dump_to(std::string &out) const override; #endif @@ -3049,14 +3049,14 @@ class VoiceAssistantAnnounceRequest : public ProtoMessage { std::string text{}; std::string preannounce_media_id{}; bool start_conversation{false}; - static const FieldMetaV2 FIELDS_V2[4]; - static constexpr size_t FIELD_COUNT_V2 = 4; - static constexpr size_t REPEATED_COUNT_V2 = 0; - // Virtual metadata getters - const FieldMetaV2 *get_field_metadata_v2() const override { return FIELDS_V2; } - size_t get_field_count_v2() const override { return FIELD_COUNT_V2; } - const RepeatedFieldMetaV2 *get_repeated_field_metadata_v2() const override { return nullptr; } - size_t get_repeated_field_count_v2() const override { return REPEATED_COUNT_V2; } + static const FieldMetaV3 FIELDS_V3[4]; + static constexpr size_t FIELD_COUNT_V3 = 4; + static constexpr size_t REPEATED_COUNT_V3 = 0; + // V3 metadata getters + const FieldMetaV3 *get_field_metadata_v3() const override { return FIELDS_V3; } + size_t get_field_count_v3() const override { return FIELD_COUNT_V3; } + const RepeatedFieldMetaV3 *get_repeated_field_metadata_v3() const override { return nullptr; } + size_t get_repeated_field_count_v3() const override { return REPEATED_COUNT_V3; } #ifdef HAS_PROTO_MESSAGE_DUMP void dump_to(std::string &out) const override; #endif @@ -3071,14 +3071,14 @@ class VoiceAssistantAnnounceFinished : public ProtoMessage { const char *message_name() const override { return "voice_assistant_announce_finished"; } #endif bool success{false}; - static const FieldMetaV2 FIELDS_V2[1]; - static constexpr size_t FIELD_COUNT_V2 = 1; - static constexpr size_t REPEATED_COUNT_V2 = 0; - // Virtual metadata getters - const FieldMetaV2 *get_field_metadata_v2() const override { return FIELDS_V2; } - size_t get_field_count_v2() const override { return FIELD_COUNT_V2; } - const RepeatedFieldMetaV2 *get_repeated_field_metadata_v2() const override { return nullptr; } - size_t get_repeated_field_count_v2() const override { return REPEATED_COUNT_V2; } + static const FieldMetaV3 FIELDS_V3[1]; + static constexpr size_t FIELD_COUNT_V3 = 1; + static constexpr size_t REPEATED_COUNT_V3 = 0; + // V3 metadata getters + const FieldMetaV3 *get_field_metadata_v3() const override { return FIELDS_V3; } + size_t get_field_count_v3() const override { return FIELD_COUNT_V3; } + const RepeatedFieldMetaV3 *get_repeated_field_metadata_v3() const override { return nullptr; } + size_t get_repeated_field_count_v3() const override { return REPEATED_COUNT_V3; } #ifdef HAS_PROTO_MESSAGE_DUMP void dump_to(std::string &out) const override; #endif @@ -3090,15 +3090,15 @@ class VoiceAssistantWakeWord : public ProtoMessage { std::string id{}; std::string wake_word{}; std::vector trained_languages{}; - static const FieldMetaV2 FIELDS_V2[2]; - static constexpr size_t FIELD_COUNT_V2 = 2; - static const RepeatedFieldMetaV2 REPEATED_FIELDS_V2[1]; - static constexpr size_t REPEATED_COUNT_V2 = 1; - // Virtual metadata getters - const FieldMetaV2 *get_field_metadata_v2() const override { return FIELDS_V2; } - size_t get_field_count_v2() const override { return FIELD_COUNT_V2; } - const RepeatedFieldMetaV2 *get_repeated_field_metadata_v2() const override { return REPEATED_FIELDS_V2; } - size_t get_repeated_field_count_v2() const override { return REPEATED_COUNT_V2; } + static const FieldMetaV3 FIELDS_V3[2]; + static constexpr size_t FIELD_COUNT_V3 = 2; + static const RepeatedFieldMetaV3 REPEATED_FIELDS_V3[1]; + static constexpr size_t REPEATED_COUNT_V3 = 1; + // V3 metadata getters + const FieldMetaV3 *get_field_metadata_v3() const override { return FIELDS_V3; } + size_t get_field_count_v3() const override { return FIELD_COUNT_V3; } + const RepeatedFieldMetaV3 *get_repeated_field_metadata_v3() const override { return REPEATED_FIELDS_V3; } + size_t get_repeated_field_count_v3() const override { return REPEATED_COUNT_V3; } #ifdef HAS_PROTO_MESSAGE_DUMP void dump_to(std::string &out) const override; #endif @@ -3112,13 +3112,13 @@ class VoiceAssistantConfigurationRequest : public ProtoMessage { #ifdef HAS_PROTO_MESSAGE_DUMP const char *message_name() const override { return "voice_assistant_configuration_request"; } #endif - static constexpr size_t FIELD_COUNT_V2 = 0; - static constexpr size_t REPEATED_COUNT_V2 = 0; - // Virtual metadata getters - const FieldMetaV2 *get_field_metadata_v2() const override { return nullptr; } - size_t get_field_count_v2() const override { return FIELD_COUNT_V2; } - const RepeatedFieldMetaV2 *get_repeated_field_metadata_v2() const override { return nullptr; } - size_t get_repeated_field_count_v2() const override { return REPEATED_COUNT_V2; } + static constexpr size_t FIELD_COUNT_V3 = 0; + static constexpr size_t REPEATED_COUNT_V3 = 0; + // V3 metadata getters + const FieldMetaV3 *get_field_metadata_v3() const override { return nullptr; } + size_t get_field_count_v3() const override { return FIELD_COUNT_V3; } + const RepeatedFieldMetaV3 *get_repeated_field_metadata_v3() const override { return nullptr; } + size_t get_repeated_field_count_v3() const override { return REPEATED_COUNT_V3; } #ifdef HAS_PROTO_MESSAGE_DUMP void dump_to(std::string &out) const override; #endif @@ -3135,15 +3135,15 @@ class VoiceAssistantConfigurationResponse : public ProtoMessage { std::vector available_wake_words{}; std::vector active_wake_words{}; uint32_t max_active_wake_words{0}; - static const FieldMetaV2 FIELDS_V2[1]; - static constexpr size_t FIELD_COUNT_V2 = 1; - static const RepeatedFieldMetaV2 REPEATED_FIELDS_V2[2]; - static constexpr size_t REPEATED_COUNT_V2 = 2; - // Virtual metadata getters - const FieldMetaV2 *get_field_metadata_v2() const override { return FIELDS_V2; } - size_t get_field_count_v2() const override { return FIELD_COUNT_V2; } - const RepeatedFieldMetaV2 *get_repeated_field_metadata_v2() const override { return REPEATED_FIELDS_V2; } - size_t get_repeated_field_count_v2() const override { return REPEATED_COUNT_V2; } + static const FieldMetaV3 FIELDS_V3[1]; + static constexpr size_t FIELD_COUNT_V3 = 1; + static const RepeatedFieldMetaV3 REPEATED_FIELDS_V3[2]; + static constexpr size_t REPEATED_COUNT_V3 = 2; + // V3 metadata getters + const FieldMetaV3 *get_field_metadata_v3() const override { return FIELDS_V3; } + size_t get_field_count_v3() const override { return FIELD_COUNT_V3; } + const RepeatedFieldMetaV3 *get_repeated_field_metadata_v3() const override { return REPEATED_FIELDS_V3; } + size_t get_repeated_field_count_v3() const override { return REPEATED_COUNT_V3; } #ifdef HAS_PROTO_MESSAGE_DUMP void dump_to(std::string &out) const override; #endif @@ -3158,14 +3158,14 @@ class VoiceAssistantSetConfiguration : public ProtoMessage { const char *message_name() const override { return "voice_assistant_set_configuration"; } #endif std::vector active_wake_words{}; - static constexpr size_t FIELD_COUNT_V2 = 0; - static const RepeatedFieldMetaV2 REPEATED_FIELDS_V2[1]; - static constexpr size_t REPEATED_COUNT_V2 = 1; - // Virtual metadata getters - const FieldMetaV2 *get_field_metadata_v2() const override { return nullptr; } - size_t get_field_count_v2() const override { return FIELD_COUNT_V2; } - const RepeatedFieldMetaV2 *get_repeated_field_metadata_v2() const override { return REPEATED_FIELDS_V2; } - size_t get_repeated_field_count_v2() const override { return REPEATED_COUNT_V2; } + static constexpr size_t FIELD_COUNT_V3 = 0; + static const RepeatedFieldMetaV3 REPEATED_FIELDS_V3[1]; + static constexpr size_t REPEATED_COUNT_V3 = 1; + // V3 metadata getters + const FieldMetaV3 *get_field_metadata_v3() const override { return nullptr; } + size_t get_field_count_v3() const override { return FIELD_COUNT_V3; } + const RepeatedFieldMetaV3 *get_repeated_field_metadata_v3() const override { return REPEATED_FIELDS_V3; } + size_t get_repeated_field_count_v3() const override { return REPEATED_COUNT_V3; } #ifdef HAS_PROTO_MESSAGE_DUMP void dump_to(std::string &out) const override; #endif @@ -3184,14 +3184,14 @@ class ListEntitiesAlarmControlPanelResponse : public InfoResponseProtoMessage { uint32_t supported_features{0}; bool requires_code{false}; bool requires_code_to_arm{false}; - static const FieldMetaV2 FIELDS_V2[11]; - static constexpr size_t FIELD_COUNT_V2 = 11; - static constexpr size_t REPEATED_COUNT_V2 = 0; - // Virtual metadata getters - const FieldMetaV2 *get_field_metadata_v2() const override { return FIELDS_V2; } - size_t get_field_count_v2() const override { return FIELD_COUNT_V2; } - const RepeatedFieldMetaV2 *get_repeated_field_metadata_v2() const override { return nullptr; } - size_t get_repeated_field_count_v2() const override { return REPEATED_COUNT_V2; } + static const FieldMetaV3 FIELDS_V3[11]; + static constexpr size_t FIELD_COUNT_V3 = 11; + static constexpr size_t REPEATED_COUNT_V3 = 0; + // V3 metadata getters + const FieldMetaV3 *get_field_metadata_v3() const override { return FIELDS_V3; } + size_t get_field_count_v3() const override { return FIELD_COUNT_V3; } + const RepeatedFieldMetaV3 *get_repeated_field_metadata_v3() const override { return nullptr; } + size_t get_repeated_field_count_v3() const override { return REPEATED_COUNT_V3; } #ifdef HAS_PROTO_MESSAGE_DUMP void dump_to(std::string &out) const override; #endif @@ -3206,14 +3206,14 @@ class AlarmControlPanelStateResponse : public StateResponseProtoMessage { const char *message_name() const override { return "alarm_control_panel_state_response"; } #endif enums::AlarmControlPanelState state{}; - static const FieldMetaV2 FIELDS_V2[3]; - static constexpr size_t FIELD_COUNT_V2 = 3; - static constexpr size_t REPEATED_COUNT_V2 = 0; - // Virtual metadata getters - const FieldMetaV2 *get_field_metadata_v2() const override { return FIELDS_V2; } - size_t get_field_count_v2() const override { return FIELD_COUNT_V2; } - const RepeatedFieldMetaV2 *get_repeated_field_metadata_v2() const override { return nullptr; } - size_t get_repeated_field_count_v2() const override { return REPEATED_COUNT_V2; } + static const FieldMetaV3 FIELDS_V3[3]; + static constexpr size_t FIELD_COUNT_V3 = 3; + static constexpr size_t REPEATED_COUNT_V3 = 0; + // V3 metadata getters + const FieldMetaV3 *get_field_metadata_v3() const override { return FIELDS_V3; } + size_t get_field_count_v3() const override { return FIELD_COUNT_V3; } + const RepeatedFieldMetaV3 *get_repeated_field_metadata_v3() const override { return nullptr; } + size_t get_repeated_field_count_v3() const override { return REPEATED_COUNT_V3; } #ifdef HAS_PROTO_MESSAGE_DUMP void dump_to(std::string &out) const override; #endif @@ -3230,14 +3230,14 @@ class AlarmControlPanelCommandRequest : public ProtoMessage { uint32_t key{0}; enums::AlarmControlPanelStateCommand command{}; std::string code{}; - static const FieldMetaV2 FIELDS_V2[3]; - static constexpr size_t FIELD_COUNT_V2 = 3; - static constexpr size_t REPEATED_COUNT_V2 = 0; - // Virtual metadata getters - const FieldMetaV2 *get_field_metadata_v2() const override { return FIELDS_V2; } - size_t get_field_count_v2() const override { return FIELD_COUNT_V2; } - const RepeatedFieldMetaV2 *get_repeated_field_metadata_v2() const override { return nullptr; } - size_t get_repeated_field_count_v2() const override { return REPEATED_COUNT_V2; } + static const FieldMetaV3 FIELDS_V3[3]; + static constexpr size_t FIELD_COUNT_V3 = 3; + static constexpr size_t REPEATED_COUNT_V3 = 0; + // V3 metadata getters + const FieldMetaV3 *get_field_metadata_v3() const override { return FIELDS_V3; } + size_t get_field_count_v3() const override { return FIELD_COUNT_V3; } + const RepeatedFieldMetaV3 *get_repeated_field_metadata_v3() const override { return nullptr; } + size_t get_repeated_field_count_v3() const override { return REPEATED_COUNT_V3; } #ifdef HAS_PROTO_MESSAGE_DUMP void dump_to(std::string &out) const override; #endif @@ -3257,14 +3257,14 @@ class ListEntitiesTextResponse : public InfoResponseProtoMessage { uint32_t max_length{0}; std::string pattern{}; enums::TextMode mode{}; - static const FieldMetaV2 FIELDS_V2[12]; - static constexpr size_t FIELD_COUNT_V2 = 12; - static constexpr size_t REPEATED_COUNT_V2 = 0; - // Virtual metadata getters - const FieldMetaV2 *get_field_metadata_v2() const override { return FIELDS_V2; } - size_t get_field_count_v2() const override { return FIELD_COUNT_V2; } - const RepeatedFieldMetaV2 *get_repeated_field_metadata_v2() const override { return nullptr; } - size_t get_repeated_field_count_v2() const override { return REPEATED_COUNT_V2; } + static const FieldMetaV3 FIELDS_V3[12]; + static constexpr size_t FIELD_COUNT_V3 = 12; + static constexpr size_t REPEATED_COUNT_V3 = 0; + // V3 metadata getters + const FieldMetaV3 *get_field_metadata_v3() const override { return FIELDS_V3; } + size_t get_field_count_v3() const override { return FIELD_COUNT_V3; } + const RepeatedFieldMetaV3 *get_repeated_field_metadata_v3() const override { return nullptr; } + size_t get_repeated_field_count_v3() const override { return REPEATED_COUNT_V3; } #ifdef HAS_PROTO_MESSAGE_DUMP void dump_to(std::string &out) const override; #endif @@ -3280,14 +3280,14 @@ class TextStateResponse : public StateResponseProtoMessage { #endif std::string state{}; bool missing_state{false}; - static const FieldMetaV2 FIELDS_V2[4]; - static constexpr size_t FIELD_COUNT_V2 = 4; - static constexpr size_t REPEATED_COUNT_V2 = 0; - // Virtual metadata getters - const FieldMetaV2 *get_field_metadata_v2() const override { return FIELDS_V2; } - size_t get_field_count_v2() const override { return FIELD_COUNT_V2; } - const RepeatedFieldMetaV2 *get_repeated_field_metadata_v2() const override { return nullptr; } - size_t get_repeated_field_count_v2() const override { return REPEATED_COUNT_V2; } + static const FieldMetaV3 FIELDS_V3[4]; + static constexpr size_t FIELD_COUNT_V3 = 4; + static constexpr size_t REPEATED_COUNT_V3 = 0; + // V3 metadata getters + const FieldMetaV3 *get_field_metadata_v3() const override { return FIELDS_V3; } + size_t get_field_count_v3() const override { return FIELD_COUNT_V3; } + const RepeatedFieldMetaV3 *get_repeated_field_metadata_v3() const override { return nullptr; } + size_t get_repeated_field_count_v3() const override { return REPEATED_COUNT_V3; } #ifdef HAS_PROTO_MESSAGE_DUMP void dump_to(std::string &out) const override; #endif @@ -3303,14 +3303,14 @@ class TextCommandRequest : public ProtoMessage { #endif uint32_t key{0}; std::string state{}; - static const FieldMetaV2 FIELDS_V2[2]; - static constexpr size_t FIELD_COUNT_V2 = 2; - static constexpr size_t REPEATED_COUNT_V2 = 0; - // Virtual metadata getters - const FieldMetaV2 *get_field_metadata_v2() const override { return FIELDS_V2; } - size_t get_field_count_v2() const override { return FIELD_COUNT_V2; } - const RepeatedFieldMetaV2 *get_repeated_field_metadata_v2() const override { return nullptr; } - size_t get_repeated_field_count_v2() const override { return REPEATED_COUNT_V2; } + static const FieldMetaV3 FIELDS_V3[2]; + static constexpr size_t FIELD_COUNT_V3 = 2; + static constexpr size_t REPEATED_COUNT_V3 = 0; + // V3 metadata getters + const FieldMetaV3 *get_field_metadata_v3() const override { return FIELDS_V3; } + size_t get_field_count_v3() const override { return FIELD_COUNT_V3; } + const RepeatedFieldMetaV3 *get_repeated_field_metadata_v3() const override { return nullptr; } + size_t get_repeated_field_count_v3() const override { return REPEATED_COUNT_V3; } #ifdef HAS_PROTO_MESSAGE_DUMP void dump_to(std::string &out) const override; #endif @@ -3326,14 +3326,14 @@ class ListEntitiesDateResponse : public InfoResponseProtoMessage { #ifdef HAS_PROTO_MESSAGE_DUMP const char *message_name() const override { return "list_entities_date_response"; } #endif - static const FieldMetaV2 FIELDS_V2[8]; - static constexpr size_t FIELD_COUNT_V2 = 8; - static constexpr size_t REPEATED_COUNT_V2 = 0; - // Virtual metadata getters - const FieldMetaV2 *get_field_metadata_v2() const override { return FIELDS_V2; } - size_t get_field_count_v2() const override { return FIELD_COUNT_V2; } - const RepeatedFieldMetaV2 *get_repeated_field_metadata_v2() const override { return nullptr; } - size_t get_repeated_field_count_v2() const override { return REPEATED_COUNT_V2; } + static const FieldMetaV3 FIELDS_V3[8]; + static constexpr size_t FIELD_COUNT_V3 = 8; + static constexpr size_t REPEATED_COUNT_V3 = 0; + // V3 metadata getters + const FieldMetaV3 *get_field_metadata_v3() const override { return FIELDS_V3; } + size_t get_field_count_v3() const override { return FIELD_COUNT_V3; } + const RepeatedFieldMetaV3 *get_repeated_field_metadata_v3() const override { return nullptr; } + size_t get_repeated_field_count_v3() const override { return REPEATED_COUNT_V3; } #ifdef HAS_PROTO_MESSAGE_DUMP void dump_to(std::string &out) const override; #endif @@ -3351,14 +3351,14 @@ class DateStateResponse : public StateResponseProtoMessage { uint32_t year{0}; uint32_t month{0}; uint32_t day{0}; - static const FieldMetaV2 FIELDS_V2[6]; - static constexpr size_t FIELD_COUNT_V2 = 6; - static constexpr size_t REPEATED_COUNT_V2 = 0; - // Virtual metadata getters - const FieldMetaV2 *get_field_metadata_v2() const override { return FIELDS_V2; } - size_t get_field_count_v2() const override { return FIELD_COUNT_V2; } - const RepeatedFieldMetaV2 *get_repeated_field_metadata_v2() const override { return nullptr; } - size_t get_repeated_field_count_v2() const override { return REPEATED_COUNT_V2; } + static const FieldMetaV3 FIELDS_V3[6]; + static constexpr size_t FIELD_COUNT_V3 = 6; + static constexpr size_t REPEATED_COUNT_V3 = 0; + // V3 metadata getters + const FieldMetaV3 *get_field_metadata_v3() const override { return FIELDS_V3; } + size_t get_field_count_v3() const override { return FIELD_COUNT_V3; } + const RepeatedFieldMetaV3 *get_repeated_field_metadata_v3() const override { return nullptr; } + size_t get_repeated_field_count_v3() const override { return REPEATED_COUNT_V3; } #ifdef HAS_PROTO_MESSAGE_DUMP void dump_to(std::string &out) const override; #endif @@ -3376,14 +3376,14 @@ class DateCommandRequest : public ProtoMessage { uint32_t year{0}; uint32_t month{0}; uint32_t day{0}; - static const FieldMetaV2 FIELDS_V2[4]; - static constexpr size_t FIELD_COUNT_V2 = 4; - static constexpr size_t REPEATED_COUNT_V2 = 0; - // Virtual metadata getters - const FieldMetaV2 *get_field_metadata_v2() const override { return FIELDS_V2; } - size_t get_field_count_v2() const override { return FIELD_COUNT_V2; } - const RepeatedFieldMetaV2 *get_repeated_field_metadata_v2() const override { return nullptr; } - size_t get_repeated_field_count_v2() const override { return REPEATED_COUNT_V2; } + static const FieldMetaV3 FIELDS_V3[4]; + static constexpr size_t FIELD_COUNT_V3 = 4; + static constexpr size_t REPEATED_COUNT_V3 = 0; + // V3 metadata getters + const FieldMetaV3 *get_field_metadata_v3() const override { return FIELDS_V3; } + size_t get_field_count_v3() const override { return FIELD_COUNT_V3; } + const RepeatedFieldMetaV3 *get_repeated_field_metadata_v3() const override { return nullptr; } + size_t get_repeated_field_count_v3() const override { return REPEATED_COUNT_V3; } #ifdef HAS_PROTO_MESSAGE_DUMP void dump_to(std::string &out) const override; #endif @@ -3399,14 +3399,14 @@ class ListEntitiesTimeResponse : public InfoResponseProtoMessage { #ifdef HAS_PROTO_MESSAGE_DUMP const char *message_name() const override { return "list_entities_time_response"; } #endif - static const FieldMetaV2 FIELDS_V2[8]; - static constexpr size_t FIELD_COUNT_V2 = 8; - static constexpr size_t REPEATED_COUNT_V2 = 0; - // Virtual metadata getters - const FieldMetaV2 *get_field_metadata_v2() const override { return FIELDS_V2; } - size_t get_field_count_v2() const override { return FIELD_COUNT_V2; } - const RepeatedFieldMetaV2 *get_repeated_field_metadata_v2() const override { return nullptr; } - size_t get_repeated_field_count_v2() const override { return REPEATED_COUNT_V2; } + static const FieldMetaV3 FIELDS_V3[8]; + static constexpr size_t FIELD_COUNT_V3 = 8; + static constexpr size_t REPEATED_COUNT_V3 = 0; + // V3 metadata getters + const FieldMetaV3 *get_field_metadata_v3() const override { return FIELDS_V3; } + size_t get_field_count_v3() const override { return FIELD_COUNT_V3; } + const RepeatedFieldMetaV3 *get_repeated_field_metadata_v3() const override { return nullptr; } + size_t get_repeated_field_count_v3() const override { return REPEATED_COUNT_V3; } #ifdef HAS_PROTO_MESSAGE_DUMP void dump_to(std::string &out) const override; #endif @@ -3424,14 +3424,14 @@ class TimeStateResponse : public StateResponseProtoMessage { uint32_t hour{0}; uint32_t minute{0}; uint32_t second{0}; - static const FieldMetaV2 FIELDS_V2[6]; - static constexpr size_t FIELD_COUNT_V2 = 6; - static constexpr size_t REPEATED_COUNT_V2 = 0; - // Virtual metadata getters - const FieldMetaV2 *get_field_metadata_v2() const override { return FIELDS_V2; } - size_t get_field_count_v2() const override { return FIELD_COUNT_V2; } - const RepeatedFieldMetaV2 *get_repeated_field_metadata_v2() const override { return nullptr; } - size_t get_repeated_field_count_v2() const override { return REPEATED_COUNT_V2; } + static const FieldMetaV3 FIELDS_V3[6]; + static constexpr size_t FIELD_COUNT_V3 = 6; + static constexpr size_t REPEATED_COUNT_V3 = 0; + // V3 metadata getters + const FieldMetaV3 *get_field_metadata_v3() const override { return FIELDS_V3; } + size_t get_field_count_v3() const override { return FIELD_COUNT_V3; } + const RepeatedFieldMetaV3 *get_repeated_field_metadata_v3() const override { return nullptr; } + size_t get_repeated_field_count_v3() const override { return REPEATED_COUNT_V3; } #ifdef HAS_PROTO_MESSAGE_DUMP void dump_to(std::string &out) const override; #endif @@ -3449,14 +3449,14 @@ class TimeCommandRequest : public ProtoMessage { uint32_t hour{0}; uint32_t minute{0}; uint32_t second{0}; - static const FieldMetaV2 FIELDS_V2[4]; - static constexpr size_t FIELD_COUNT_V2 = 4; - static constexpr size_t REPEATED_COUNT_V2 = 0; - // Virtual metadata getters - const FieldMetaV2 *get_field_metadata_v2() const override { return FIELDS_V2; } - size_t get_field_count_v2() const override { return FIELD_COUNT_V2; } - const RepeatedFieldMetaV2 *get_repeated_field_metadata_v2() const override { return nullptr; } - size_t get_repeated_field_count_v2() const override { return REPEATED_COUNT_V2; } + static const FieldMetaV3 FIELDS_V3[4]; + static constexpr size_t FIELD_COUNT_V3 = 4; + static constexpr size_t REPEATED_COUNT_V3 = 0; + // V3 metadata getters + const FieldMetaV3 *get_field_metadata_v3() const override { return FIELDS_V3; } + size_t get_field_count_v3() const override { return FIELD_COUNT_V3; } + const RepeatedFieldMetaV3 *get_repeated_field_metadata_v3() const override { return nullptr; } + size_t get_repeated_field_count_v3() const override { return REPEATED_COUNT_V3; } #ifdef HAS_PROTO_MESSAGE_DUMP void dump_to(std::string &out) const override; #endif @@ -3474,15 +3474,15 @@ class ListEntitiesEventResponse : public InfoResponseProtoMessage { #endif std::string device_class{}; std::vector event_types{}; - static const FieldMetaV2 FIELDS_V2[9]; - static constexpr size_t FIELD_COUNT_V2 = 9; - static const RepeatedFieldMetaV2 REPEATED_FIELDS_V2[1]; - static constexpr size_t REPEATED_COUNT_V2 = 1; - // Virtual metadata getters - const FieldMetaV2 *get_field_metadata_v2() const override { return FIELDS_V2; } - size_t get_field_count_v2() const override { return FIELD_COUNT_V2; } - const RepeatedFieldMetaV2 *get_repeated_field_metadata_v2() const override { return REPEATED_FIELDS_V2; } - size_t get_repeated_field_count_v2() const override { return REPEATED_COUNT_V2; } + static const FieldMetaV3 FIELDS_V3[9]; + static constexpr size_t FIELD_COUNT_V3 = 9; + static const RepeatedFieldMetaV3 REPEATED_FIELDS_V3[1]; + static constexpr size_t REPEATED_COUNT_V3 = 1; + // V3 metadata getters + const FieldMetaV3 *get_field_metadata_v3() const override { return FIELDS_V3; } + size_t get_field_count_v3() const override { return FIELD_COUNT_V3; } + const RepeatedFieldMetaV3 *get_repeated_field_metadata_v3() const override { return REPEATED_FIELDS_V3; } + size_t get_repeated_field_count_v3() const override { return REPEATED_COUNT_V3; } #ifdef HAS_PROTO_MESSAGE_DUMP void dump_to(std::string &out) const override; #endif @@ -3497,14 +3497,14 @@ class EventResponse : public StateResponseProtoMessage { const char *message_name() const override { return "event_response"; } #endif std::string event_type{}; - static const FieldMetaV2 FIELDS_V2[3]; - static constexpr size_t FIELD_COUNT_V2 = 3; - static constexpr size_t REPEATED_COUNT_V2 = 0; - // Virtual metadata getters - const FieldMetaV2 *get_field_metadata_v2() const override { return FIELDS_V2; } - size_t get_field_count_v2() const override { return FIELD_COUNT_V2; } - const RepeatedFieldMetaV2 *get_repeated_field_metadata_v2() const override { return nullptr; } - size_t get_repeated_field_count_v2() const override { return REPEATED_COUNT_V2; } + static const FieldMetaV3 FIELDS_V3[3]; + static constexpr size_t FIELD_COUNT_V3 = 3; + static constexpr size_t REPEATED_COUNT_V3 = 0; + // V3 metadata getters + const FieldMetaV3 *get_field_metadata_v3() const override { return FIELDS_V3; } + size_t get_field_count_v3() const override { return FIELD_COUNT_V3; } + const RepeatedFieldMetaV3 *get_repeated_field_metadata_v3() const override { return nullptr; } + size_t get_repeated_field_count_v3() const override { return REPEATED_COUNT_V3; } #ifdef HAS_PROTO_MESSAGE_DUMP void dump_to(std::string &out) const override; #endif @@ -3524,14 +3524,14 @@ class ListEntitiesValveResponse : public InfoResponseProtoMessage { bool assumed_state{false}; bool supports_position{false}; bool supports_stop{false}; - static const FieldMetaV2 FIELDS_V2[12]; - static constexpr size_t FIELD_COUNT_V2 = 12; - static constexpr size_t REPEATED_COUNT_V2 = 0; - // Virtual metadata getters - const FieldMetaV2 *get_field_metadata_v2() const override { return FIELDS_V2; } - size_t get_field_count_v2() const override { return FIELD_COUNT_V2; } - const RepeatedFieldMetaV2 *get_repeated_field_metadata_v2() const override { return nullptr; } - size_t get_repeated_field_count_v2() const override { return REPEATED_COUNT_V2; } + static const FieldMetaV3 FIELDS_V3[12]; + static constexpr size_t FIELD_COUNT_V3 = 12; + static constexpr size_t REPEATED_COUNT_V3 = 0; + // V3 metadata getters + const FieldMetaV3 *get_field_metadata_v3() const override { return FIELDS_V3; } + size_t get_field_count_v3() const override { return FIELD_COUNT_V3; } + const RepeatedFieldMetaV3 *get_repeated_field_metadata_v3() const override { return nullptr; } + size_t get_repeated_field_count_v3() const override { return REPEATED_COUNT_V3; } #ifdef HAS_PROTO_MESSAGE_DUMP void dump_to(std::string &out) const override; #endif @@ -3547,14 +3547,14 @@ class ValveStateResponse : public StateResponseProtoMessage { #endif float position{0.0f}; enums::ValveOperation current_operation{}; - static const FieldMetaV2 FIELDS_V2[4]; - static constexpr size_t FIELD_COUNT_V2 = 4; - static constexpr size_t REPEATED_COUNT_V2 = 0; - // Virtual metadata getters - const FieldMetaV2 *get_field_metadata_v2() const override { return FIELDS_V2; } - size_t get_field_count_v2() const override { return FIELD_COUNT_V2; } - const RepeatedFieldMetaV2 *get_repeated_field_metadata_v2() const override { return nullptr; } - size_t get_repeated_field_count_v2() const override { return REPEATED_COUNT_V2; } + static const FieldMetaV3 FIELDS_V3[4]; + static constexpr size_t FIELD_COUNT_V3 = 4; + static constexpr size_t REPEATED_COUNT_V3 = 0; + // V3 metadata getters + const FieldMetaV3 *get_field_metadata_v3() const override { return FIELDS_V3; } + size_t get_field_count_v3() const override { return FIELD_COUNT_V3; } + const RepeatedFieldMetaV3 *get_repeated_field_metadata_v3() const override { return nullptr; } + size_t get_repeated_field_count_v3() const override { return REPEATED_COUNT_V3; } #ifdef HAS_PROTO_MESSAGE_DUMP void dump_to(std::string &out) const override; #endif @@ -3572,14 +3572,14 @@ class ValveCommandRequest : public ProtoMessage { bool has_position{false}; float position{0.0f}; bool stop{false}; - static const FieldMetaV2 FIELDS_V2[4]; - static constexpr size_t FIELD_COUNT_V2 = 4; - static constexpr size_t REPEATED_COUNT_V2 = 0; - // Virtual metadata getters - const FieldMetaV2 *get_field_metadata_v2() const override { return FIELDS_V2; } - size_t get_field_count_v2() const override { return FIELD_COUNT_V2; } - const RepeatedFieldMetaV2 *get_repeated_field_metadata_v2() const override { return nullptr; } - size_t get_repeated_field_count_v2() const override { return REPEATED_COUNT_V2; } + static const FieldMetaV3 FIELDS_V3[4]; + static constexpr size_t FIELD_COUNT_V3 = 4; + static constexpr size_t REPEATED_COUNT_V3 = 0; + // V3 metadata getters + const FieldMetaV3 *get_field_metadata_v3() const override { return FIELDS_V3; } + size_t get_field_count_v3() const override { return FIELD_COUNT_V3; } + const RepeatedFieldMetaV3 *get_repeated_field_metadata_v3() const override { return nullptr; } + size_t get_repeated_field_count_v3() const override { return REPEATED_COUNT_V3; } #ifdef HAS_PROTO_MESSAGE_DUMP void dump_to(std::string &out) const override; #endif @@ -3595,14 +3595,14 @@ class ListEntitiesDateTimeResponse : public InfoResponseProtoMessage { #ifdef HAS_PROTO_MESSAGE_DUMP const char *message_name() const override { return "list_entities_date_time_response"; } #endif - static const FieldMetaV2 FIELDS_V2[8]; - static constexpr size_t FIELD_COUNT_V2 = 8; - static constexpr size_t REPEATED_COUNT_V2 = 0; - // Virtual metadata getters - const FieldMetaV2 *get_field_metadata_v2() const override { return FIELDS_V2; } - size_t get_field_count_v2() const override { return FIELD_COUNT_V2; } - const RepeatedFieldMetaV2 *get_repeated_field_metadata_v2() const override { return nullptr; } - size_t get_repeated_field_count_v2() const override { return REPEATED_COUNT_V2; } + static const FieldMetaV3 FIELDS_V3[8]; + static constexpr size_t FIELD_COUNT_V3 = 8; + static constexpr size_t REPEATED_COUNT_V3 = 0; + // V3 metadata getters + const FieldMetaV3 *get_field_metadata_v3() const override { return FIELDS_V3; } + size_t get_field_count_v3() const override { return FIELD_COUNT_V3; } + const RepeatedFieldMetaV3 *get_repeated_field_metadata_v3() const override { return nullptr; } + size_t get_repeated_field_count_v3() const override { return REPEATED_COUNT_V3; } #ifdef HAS_PROTO_MESSAGE_DUMP void dump_to(std::string &out) const override; #endif @@ -3618,14 +3618,14 @@ class DateTimeStateResponse : public StateResponseProtoMessage { #endif bool missing_state{false}; uint32_t epoch_seconds{0}; - static const FieldMetaV2 FIELDS_V2[4]; - static constexpr size_t FIELD_COUNT_V2 = 4; - static constexpr size_t REPEATED_COUNT_V2 = 0; - // Virtual metadata getters - const FieldMetaV2 *get_field_metadata_v2() const override { return FIELDS_V2; } - size_t get_field_count_v2() const override { return FIELD_COUNT_V2; } - const RepeatedFieldMetaV2 *get_repeated_field_metadata_v2() const override { return nullptr; } - size_t get_repeated_field_count_v2() const override { return REPEATED_COUNT_V2; } + static const FieldMetaV3 FIELDS_V3[4]; + static constexpr size_t FIELD_COUNT_V3 = 4; + static constexpr size_t REPEATED_COUNT_V3 = 0; + // V3 metadata getters + const FieldMetaV3 *get_field_metadata_v3() const override { return FIELDS_V3; } + size_t get_field_count_v3() const override { return FIELD_COUNT_V3; } + const RepeatedFieldMetaV3 *get_repeated_field_metadata_v3() const override { return nullptr; } + size_t get_repeated_field_count_v3() const override { return REPEATED_COUNT_V3; } #ifdef HAS_PROTO_MESSAGE_DUMP void dump_to(std::string &out) const override; #endif @@ -3641,14 +3641,14 @@ class DateTimeCommandRequest : public ProtoMessage { #endif uint32_t key{0}; uint32_t epoch_seconds{0}; - static const FieldMetaV2 FIELDS_V2[2]; - static constexpr size_t FIELD_COUNT_V2 = 2; - static constexpr size_t REPEATED_COUNT_V2 = 0; - // Virtual metadata getters - const FieldMetaV2 *get_field_metadata_v2() const override { return FIELDS_V2; } - size_t get_field_count_v2() const override { return FIELD_COUNT_V2; } - const RepeatedFieldMetaV2 *get_repeated_field_metadata_v2() const override { return nullptr; } - size_t get_repeated_field_count_v2() const override { return REPEATED_COUNT_V2; } + static const FieldMetaV3 FIELDS_V3[2]; + static constexpr size_t FIELD_COUNT_V3 = 2; + static constexpr size_t REPEATED_COUNT_V3 = 0; + // V3 metadata getters + const FieldMetaV3 *get_field_metadata_v3() const override { return FIELDS_V3; } + size_t get_field_count_v3() const override { return FIELD_COUNT_V3; } + const RepeatedFieldMetaV3 *get_repeated_field_metadata_v3() const override { return nullptr; } + size_t get_repeated_field_count_v3() const override { return REPEATED_COUNT_V3; } #ifdef HAS_PROTO_MESSAGE_DUMP void dump_to(std::string &out) const override; #endif @@ -3665,14 +3665,14 @@ class ListEntitiesUpdateResponse : public InfoResponseProtoMessage { const char *message_name() const override { return "list_entities_update_response"; } #endif std::string device_class{}; - static const FieldMetaV2 FIELDS_V2[9]; - static constexpr size_t FIELD_COUNT_V2 = 9; - static constexpr size_t REPEATED_COUNT_V2 = 0; - // Virtual metadata getters - const FieldMetaV2 *get_field_metadata_v2() const override { return FIELDS_V2; } - size_t get_field_count_v2() const override { return FIELD_COUNT_V2; } - const RepeatedFieldMetaV2 *get_repeated_field_metadata_v2() const override { return nullptr; } - size_t get_repeated_field_count_v2() const override { return REPEATED_COUNT_V2; } + static const FieldMetaV3 FIELDS_V3[9]; + static constexpr size_t FIELD_COUNT_V3 = 9; + static constexpr size_t REPEATED_COUNT_V3 = 0; + // V3 metadata getters + const FieldMetaV3 *get_field_metadata_v3() const override { return FIELDS_V3; } + size_t get_field_count_v3() const override { return FIELD_COUNT_V3; } + const RepeatedFieldMetaV3 *get_repeated_field_metadata_v3() const override { return nullptr; } + size_t get_repeated_field_count_v3() const override { return REPEATED_COUNT_V3; } #ifdef HAS_PROTO_MESSAGE_DUMP void dump_to(std::string &out) const override; #endif @@ -3695,14 +3695,14 @@ class UpdateStateResponse : public StateResponseProtoMessage { std::string title{}; std::string release_summary{}; std::string release_url{}; - static const FieldMetaV2 FIELDS_V2[11]; - static constexpr size_t FIELD_COUNT_V2 = 11; - static constexpr size_t REPEATED_COUNT_V2 = 0; - // Virtual metadata getters - const FieldMetaV2 *get_field_metadata_v2() const override { return FIELDS_V2; } - size_t get_field_count_v2() const override { return FIELD_COUNT_V2; } - const RepeatedFieldMetaV2 *get_repeated_field_metadata_v2() const override { return nullptr; } - size_t get_repeated_field_count_v2() const override { return REPEATED_COUNT_V2; } + static const FieldMetaV3 FIELDS_V3[11]; + static constexpr size_t FIELD_COUNT_V3 = 11; + static constexpr size_t REPEATED_COUNT_V3 = 0; + // V3 metadata getters + const FieldMetaV3 *get_field_metadata_v3() const override { return FIELDS_V3; } + size_t get_field_count_v3() const override { return FIELD_COUNT_V3; } + const RepeatedFieldMetaV3 *get_repeated_field_metadata_v3() const override { return nullptr; } + size_t get_repeated_field_count_v3() const override { return REPEATED_COUNT_V3; } #ifdef HAS_PROTO_MESSAGE_DUMP void dump_to(std::string &out) const override; #endif @@ -3718,14 +3718,14 @@ class UpdateCommandRequest : public ProtoMessage { #endif uint32_t key{0}; enums::UpdateCommand command{}; - static const FieldMetaV2 FIELDS_V2[2]; - static constexpr size_t FIELD_COUNT_V2 = 2; - static constexpr size_t REPEATED_COUNT_V2 = 0; - // Virtual metadata getters - const FieldMetaV2 *get_field_metadata_v2() const override { return FIELDS_V2; } - size_t get_field_count_v2() const override { return FIELD_COUNT_V2; } - const RepeatedFieldMetaV2 *get_repeated_field_metadata_v2() const override { return nullptr; } - size_t get_repeated_field_count_v2() const override { return REPEATED_COUNT_V2; } + static const FieldMetaV3 FIELDS_V3[2]; + static constexpr size_t FIELD_COUNT_V3 = 2; + static constexpr size_t REPEATED_COUNT_V3 = 0; + // V3 metadata getters + const FieldMetaV3 *get_field_metadata_v3() const override { return FIELDS_V3; } + size_t get_field_count_v3() const override { return FIELD_COUNT_V3; } + const RepeatedFieldMetaV3 *get_repeated_field_metadata_v3() const override { return nullptr; } + size_t get_repeated_field_count_v3() const override { return REPEATED_COUNT_V3; } #ifdef HAS_PROTO_MESSAGE_DUMP void dump_to(std::string &out) const override; #endif diff --git a/esphome/components/api/proto.cpp b/esphome/components/api/proto.cpp index f51d872e09..6cf5820ea8 100644 --- a/esphome/components/api/proto.cpp +++ b/esphome/components/api/proto.cpp @@ -10,434 +10,7 @@ namespace api { static const char *const TAG = "api.proto"; -// Message handler registry - populated by generated code -const MessageHandler MESSAGE_HANDLERS[] = { - // Will be populated with entries like: - // {encode_message_field, size_message_field, decode_message_field}, - // etc. -}; -const size_t MESSAGE_HANDLER_COUNT = 0; // Will be set by generated code - -const RepeatedMessageHandler REPEATED_MESSAGE_HANDLERS[] = { - // Will be populated with entries like: - // {encode_repeated_message_field, size_repeated_message_field, - // decode_repeated_message_field}, - // etc. -}; -const size_t REPEATED_MESSAGE_HANDLER_COUNT = 0; // Will be set by generated code - -void ProtoMessage::decode(const uint8_t *buffer, size_t length) { - // Check if V3 metadata is available - const FieldMetaV3 *fields_v3 = get_field_metadata_v3(); - if (fields_v3 != nullptr) { - decode_v3(buffer, length); - return; - } - - // Fall back to V2 - uint32_t i = 0; - bool error = false; - uint8_t *base = reinterpret_cast(this); - - // Get V2 metadata once at the start - const FieldMetaV2 *fields = get_field_metadata_v2(); - size_t field_count = get_field_count_v2(); - const RepeatedFieldMetaV2 *repeated_fields = get_repeated_field_metadata_v2(); - size_t repeated_count = get_repeated_field_count_v2(); - - while (i < length) { - uint32_t consumed; - auto res = ProtoVarInt::parse(&buffer[i], length - i, &consumed); - if (!res.has_value()) { - ESP_LOGV(TAG, "Invalid field start at %" PRIu32, i); - break; - } - - uint32_t field_type = (res->as_uint32()) & 0b111; - uint32_t field_id = (res->as_uint32()) >> 3; - i += consumed; - - switch (field_type) { - case 0: { // VarInt - res = ProtoVarInt::parse(&buffer[i], length - i, &consumed); - if (!res.has_value()) { - ESP_LOGV(TAG, "Invalid VarInt at %" PRIu32, i); - error = true; - break; - } - ProtoVarInt value = *res; - bool decoded = false; - - // Check regular fields - for (size_t j = 0; j < field_count; j++) { - if (fields[j].field_num == field_id && get_wire_type(fields[j].type) == 0) { - void *field_addr = base + fields[j].offset; - - switch (fields[j].type) { - case ProtoFieldType::TYPE_BOOL: - *static_cast(field_addr) = value.as_bool(); - decoded = true; - break; - case ProtoFieldType::TYPE_INT32: - *static_cast(field_addr) = value.as_int32(); - decoded = true; - break; - case ProtoFieldType::TYPE_UINT32: - *static_cast(field_addr) = value.as_uint32(); - decoded = true; - break; - case ProtoFieldType::TYPE_INT64: - *static_cast(field_addr) = value.as_int64(); - decoded = true; - break; - case ProtoFieldType::TYPE_UINT64: - *static_cast(field_addr) = value.as_uint64(); - decoded = true; - break; - case ProtoFieldType::TYPE_SINT32: - *static_cast(field_addr) = value.as_sint32(); - decoded = true; - break; - case ProtoFieldType::TYPE_SINT64: - *static_cast(field_addr) = value.as_sint64(); - decoded = true; - break; - case ProtoFieldType::TYPE_ENUM: - // For enums, we need to use the old metadata for now - // This will be fixed in Phase 5 - *static_cast(field_addr) = value.as_uint32(); - decoded = true; - break; - default: - break; - } - break; - } - } - - // Check repeated fields if not found - if (!decoded && repeated_fields) { - for (size_t j = 0; j < repeated_count; j++) { - if (repeated_fields[j].field_num == field_id && get_wire_type(repeated_fields[j].type) == 0) { - void *field_addr = base + repeated_fields[j].offset; - - switch (repeated_fields[j].type) { - case ProtoFieldType::TYPE_BOOL: { - auto *vec = static_cast *>(field_addr); - vec->push_back(value.as_bool()); - decoded = true; - break; - } - case ProtoFieldType::TYPE_INT32: { - auto *vec = static_cast *>(field_addr); - vec->push_back(value.as_int32()); - decoded = true; - break; - } - case ProtoFieldType::TYPE_UINT32: { - auto *vec = static_cast *>(field_addr); - vec->push_back(value.as_uint32()); - decoded = true; - break; - } - case ProtoFieldType::TYPE_INT64: { - auto *vec = static_cast *>(field_addr); - vec->push_back(value.as_int64()); - decoded = true; - break; - } - case ProtoFieldType::TYPE_UINT64: { - auto *vec = static_cast *>(field_addr); - vec->push_back(value.as_uint64()); - decoded = true; - break; - } - case ProtoFieldType::TYPE_SINT32: { - auto *vec = static_cast *>(field_addr); - vec->push_back(value.as_sint32()); - decoded = true; - break; - } - case ProtoFieldType::TYPE_SINT64: { - auto *vec = static_cast *>(field_addr); - vec->push_back(value.as_sint64()); - decoded = true; - break; - } - case ProtoFieldType::TYPE_ENUM: { - // For repeated enums, use old metadata for now - auto *vec = static_cast *>(field_addr); - vec->push_back(value.as_uint32()); - decoded = true; - break; - } - default: - break; - } - break; - } - } - } - - if (!decoded) { - ESP_LOGV(TAG, "Cannot decode VarInt field %" PRIu32 " with value %" PRIu32 "!", field_id, res->as_uint32()); - } - i += consumed; - break; - } - case 2: { // Length-delimited - res = ProtoVarInt::parse(&buffer[i], length - i, &consumed); - if (!res.has_value()) { - ESP_LOGV(TAG, "Invalid Length Delimited at %" PRIu32, i); - error = true; - break; - } - uint32_t field_length = res->as_uint32(); - i += consumed; - if (field_length > length - i) { - ESP_LOGV(TAG, "Out-of-bounds Length Delimited at %" PRIu32, i); - error = true; - break; - } - ProtoLengthDelimited value(&buffer[i], field_length); - bool decoded = false; - - // Check regular fields - for (size_t j = 0; j < field_count; j++) { - if (fields[j].field_num == field_id && get_wire_type(fields[j].type) == 2) { - void *field_addr = base + fields[j].offset; - - switch (fields[j].type) { - case ProtoFieldType::TYPE_STRING: - *static_cast(field_addr) = value.as_string(); - decoded = true; - break; - case ProtoFieldType::TYPE_BYTES: { - // ProtoLengthDelimited has protected members, use buffer directly - static_cast(field_addr) - ->assign(reinterpret_cast(&buffer[i]), field_length); - decoded = true; - break; - } - case ProtoFieldType::TYPE_MESSAGE: { - // Use function pointer from metadata - if (fields[j].handler.message.decode) { - decoded = fields[j].handler.message.decode(field_addr, value); - } - break; - } - default: - break; - } - break; - } - } - - // Check repeated fields if not found - if (!decoded && repeated_fields) { - for (size_t j = 0; j < repeated_count; j++) { - if (repeated_fields[j].field_num == field_id && get_wire_type(repeated_fields[j].type) == 2) { - void *field_addr = base + repeated_fields[j].offset; - - switch (repeated_fields[j].type) { - case ProtoFieldType::TYPE_STRING: { - auto *vec = static_cast *>(field_addr); - vec->push_back(value.as_string()); - decoded = true; - break; - } - case ProtoFieldType::TYPE_BYTES: { - auto *vec = static_cast *>(field_addr); - vec->emplace_back(reinterpret_cast(&buffer[i]), field_length); - decoded = true; - break; - } - case ProtoFieldType::TYPE_MESSAGE: { - // Use function pointer from metadata - if (repeated_fields[j].handler.message.decode) { - decoded = repeated_fields[j].handler.message.decode(field_addr, value); - } - break; - } - default: - break; - } - break; - } - } - } - - if (!decoded) { - ESP_LOGV(TAG, "Cannot decode Length field %" PRIu32, field_id); - } - i += field_length; - break; - } - case 5: { // 32-bit - if (length - i < 4) { - ESP_LOGV(TAG, "Invalid 32-bit at %" PRIu32, i); - error = true; - break; - } - uint32_t raw = (buffer[i]) | (buffer[i + 1] << 8) | (buffer[i + 2] << 16) | (buffer[i + 3] << 24); - Proto32Bit value(raw); - bool decoded = false; - - // Check regular fields - for (size_t j = 0; j < field_count; j++) { - if (fields[j].field_num == field_id && get_wire_type(fields[j].type) == 5) { - void *field_addr = base + fields[j].offset; - - switch (fields[j].type) { - case ProtoFieldType::TYPE_FLOAT: { - float *val = static_cast(field_addr); - *val = value.as_float(); - decoded = true; - break; - } - case ProtoFieldType::TYPE_FIXED32: - *static_cast(field_addr) = value.as_fixed32(); - decoded = true; - break; - case ProtoFieldType::TYPE_SFIXED32: - *static_cast(field_addr) = value.as_sfixed32(); - decoded = true; - break; - default: - break; - } - break; - } - } - - // Check repeated fields if not found - if (!decoded && repeated_fields) { - for (size_t j = 0; j < repeated_count; j++) { - if (repeated_fields[j].field_num == field_id && get_wire_type(repeated_fields[j].type) == 5) { - void *field_addr = base + repeated_fields[j].offset; - - switch (repeated_fields[j].type) { - case ProtoFieldType::TYPE_FLOAT: { - auto *vec = static_cast *>(field_addr); - vec->push_back(value.as_float()); - decoded = true; - break; - } - case ProtoFieldType::TYPE_FIXED32: { - auto *vec = static_cast *>(field_addr); - vec->push_back(value.as_fixed32()); - decoded = true; - break; - } - case ProtoFieldType::TYPE_SFIXED32: { - auto *vec = static_cast *>(field_addr); - vec->push_back(value.as_sfixed32()); - decoded = true; - break; - } - default: - break; - } - break; - } - } - } - - if (!decoded) { - ESP_LOGV(TAG, "Cannot decode 32-bit field %" PRIu32, field_id); - } - i += 4; - break; - } - case 1: { // 64-bit - if (length - i < 8) { - ESP_LOGV(TAG, "Invalid 64-bit at %" PRIu32, i); - error = true; - break; - } - uint64_t raw = uint64_t(buffer[i]) | (uint64_t(buffer[i + 1]) << 8) | (uint64_t(buffer[i + 2]) << 16) | - (uint64_t(buffer[i + 3]) << 24) | (uint64_t(buffer[i + 4]) << 32) | - (uint64_t(buffer[i + 5]) << 40) | (uint64_t(buffer[i + 6]) << 48) | - (uint64_t(buffer[i + 7]) << 56); - Proto64Bit value(raw); - bool decoded = false; - - // Check regular fields - for (size_t j = 0; j < field_count; j++) { - if (fields[j].field_num == field_id && get_wire_type(fields[j].type) == 1) { - void *field_addr = base + fields[j].offset; - - switch (fields[j].type) { - case ProtoFieldType::TYPE_DOUBLE: { - double *val = static_cast(field_addr); - *val = value.as_double(); - decoded = true; - break; - } - case ProtoFieldType::TYPE_FIXED64: - *static_cast(field_addr) = value.as_fixed64(); - decoded = true; - break; - case ProtoFieldType::TYPE_SFIXED64: - *static_cast(field_addr) = value.as_sfixed64(); - decoded = true; - break; - default: - break; - } - break; - } - } - - // Check repeated fields if not found - if (!decoded && repeated_fields) { - for (size_t j = 0; j < repeated_count; j++) { - if (repeated_fields[j].field_num == field_id && get_wire_type(repeated_fields[j].type) == 1) { - void *field_addr = base + repeated_fields[j].offset; - - switch (repeated_fields[j].type) { - case ProtoFieldType::TYPE_DOUBLE: { - auto *vec = static_cast *>(field_addr); - vec->push_back(value.as_double()); - decoded = true; - break; - } - case ProtoFieldType::TYPE_FIXED64: { - auto *vec = static_cast *>(field_addr); - vec->push_back(value.as_fixed64()); - decoded = true; - break; - } - case ProtoFieldType::TYPE_SFIXED64: { - auto *vec = static_cast *>(field_addr); - vec->push_back(value.as_sfixed64()); - decoded = true; - break; - } - default: - break; - } - break; - } - } - } - - if (!decoded) { - ESP_LOGV(TAG, "Cannot decode 64-bit field %" PRIu32, field_id); - } - i += 8; - break; - } - default: { - ESP_LOGV(TAG, "Invalid field type %" PRIu32 " at %" PRIu32, field_type, i); - return; - } - } - if (error) { - break; - } - } -} +// Message handler registries are defined in api_pb2.cpp #ifdef HAS_PROTO_MESSAGE_DUMP std::string ProtoMessage::dump() const { @@ -447,991 +20,57 @@ std::string ProtoMessage::dump() const { } #endif -// Type-specific encoding functions -void encode_string_field(ProtoWriteBuffer &buffer, const void *field_ptr, uint8_t field_num) { - const auto *str = static_cast(field_ptr); - buffer.encode_string(field_num, *str); -} +// Type-specific encoding functions removed - V3 inlines encoding directly -void encode_fixed32_field(ProtoWriteBuffer &buffer, const void *field_ptr, uint8_t field_num) { - const auto *val = static_cast(field_ptr); - buffer.encode_fixed32(field_num, *val); -} +// Type-specific size calculation functions removed - V3 inlines size calculation directly -void encode_bool_field(ProtoWriteBuffer &buffer, const void *field_ptr, uint8_t field_num) { - const auto *val = static_cast(field_ptr); - buffer.encode_bool(field_num, *val); -} - -void encode_float_field(ProtoWriteBuffer &buffer, const void *field_ptr, uint8_t field_num) { - const auto *val = static_cast(field_ptr); - buffer.encode_float(field_num, *val); -} - -void encode_int32_field(ProtoWriteBuffer &buffer, const void *field_ptr, uint8_t field_num) { - const auto *val = static_cast(field_ptr); - buffer.encode_int32(field_num, *val); -} - -void encode_uint32_field(ProtoWriteBuffer &buffer, const void *field_ptr, uint8_t field_num) { - const auto *val = static_cast(field_ptr); - buffer.encode_uint32(field_num, *val); -} - -void encode_int64_field(ProtoWriteBuffer &buffer, const void *field_ptr, uint8_t field_num) { - const auto *val = static_cast(field_ptr); - buffer.encode_int64(field_num, *val); -} - -void encode_uint64_field(ProtoWriteBuffer &buffer, const void *field_ptr, uint8_t field_num) { - const auto *val = static_cast(field_ptr); - buffer.encode_uint64(field_num, *val); -} - -void encode_sint32_field(ProtoWriteBuffer &buffer, const void *field_ptr, uint8_t field_num) { - const auto *val = static_cast(field_ptr); - buffer.encode_sint32(field_num, *val); -} - -void encode_sint64_field(ProtoWriteBuffer &buffer, const void *field_ptr, uint8_t field_num) { - const auto *val = static_cast(field_ptr); - buffer.encode_sint64(field_num, *val); -} - -void encode_fixed64_field(ProtoWriteBuffer &buffer, const void *field_ptr, uint8_t field_num) { - const auto *val = static_cast(field_ptr); - buffer.encode_fixed64(field_num, *val); -} - -void encode_double_field(ProtoWriteBuffer &buffer, const void *field_ptr, uint8_t field_num) { - const auto *val = static_cast(field_ptr); - union { - double value; - uint64_t raw; - } u{}; - u.value = *val; - buffer.encode_fixed64(field_num, u.raw); -} - -void encode_bytes_field(ProtoWriteBuffer &buffer, const void *field_ptr, uint8_t field_num) { - const auto *str = static_cast(field_ptr); - buffer.encode_bytes(field_num, reinterpret_cast(str->data()), str->size()); -} - -// Type-specific size calculation functions -void size_string_field(uint32_t &total_size, const void *field_ptr, uint8_t precalced_field_id_size, bool force) { - const auto *str = static_cast(field_ptr); - ProtoSize::add_string_field(total_size, precalced_field_id_size, *str, force); -} - -void size_fixed32_field(uint32_t &total_size, const void *field_ptr, uint8_t precalced_field_id_size, bool force) { - const auto *val = static_cast(field_ptr); - ProtoSize::add_fixed_field<4>(total_size, precalced_field_id_size, *val != 0 || force, force); -} - -void size_bool_field(uint32_t &total_size, const void *field_ptr, uint8_t precalced_field_id_size, bool force) { - const auto *val = static_cast(field_ptr); - ProtoSize::add_bool_field(total_size, precalced_field_id_size, *val, force); -} - -void size_float_field(uint32_t &total_size, const void *field_ptr, uint8_t precalced_field_id_size, bool force) { - const auto *val = static_cast(field_ptr); - ProtoSize::add_fixed_field<4>(total_size, precalced_field_id_size, *val != 0.0f || force, force); -} - -void size_int32_field(uint32_t &total_size, const void *field_ptr, uint8_t precalced_field_id_size, bool force) { - const auto *val = static_cast(field_ptr); - ProtoSize::add_int32_field(total_size, precalced_field_id_size, *val, force); -} - -void size_uint32_field(uint32_t &total_size, const void *field_ptr, uint8_t precalced_field_id_size, bool force) { - const auto *val = static_cast(field_ptr); - ProtoSize::add_uint32_field(total_size, precalced_field_id_size, *val, force); -} - -void size_int64_field(uint32_t &total_size, const void *field_ptr, uint8_t precalced_field_id_size, bool force) { - const auto *val = static_cast(field_ptr); - ProtoSize::add_int64_field(total_size, precalced_field_id_size, *val, force); -} - -void size_uint64_field(uint32_t &total_size, const void *field_ptr, uint8_t precalced_field_id_size, bool force) { - const auto *val = static_cast(field_ptr); - ProtoSize::add_uint64_field(total_size, precalced_field_id_size, *val, force); -} - -void size_sint32_field(uint32_t &total_size, const void *field_ptr, uint8_t precalced_field_id_size, bool force) { - const auto *val = static_cast(field_ptr); - ProtoSize::add_sint32_field(total_size, precalced_field_id_size, *val, force); -} - -void size_sint64_field(uint32_t &total_size, const void *field_ptr, uint8_t precalced_field_id_size, bool force) { - const auto *val = static_cast(field_ptr); - ProtoSize::add_sint64_field(total_size, precalced_field_id_size, *val, force); -} - -void size_fixed64_field(uint32_t &total_size, const void *field_ptr, uint8_t precalced_field_id_size, bool force) { - const auto *val = static_cast(field_ptr); - ProtoSize::add_fixed_field<8>(total_size, precalced_field_id_size, *val != 0 || force, force); -} - -void size_double_field(uint32_t &total_size, const void *field_ptr, uint8_t precalced_field_id_size, bool force) { - const auto *val = static_cast(field_ptr); - ProtoSize::add_fixed_field<8>(total_size, precalced_field_id_size, *val != 0.0 || force, force); -} - -void size_bytes_field(uint32_t &total_size, const void *field_ptr, uint8_t precalced_field_id_size, bool force) { - const auto *str = static_cast(field_ptr); - ProtoSize::add_string_field(total_size, precalced_field_id_size, *str, force); -} - -// Type-specific decode functions -bool decode_string_field(void *field_ptr, ProtoLengthDelimited value) { - auto *str = static_cast(field_ptr); - *str = value.as_string(); - return true; -} - -bool decode_fixed32_field(void *field_ptr, Proto32Bit value) { - auto *val = static_cast(field_ptr); - *val = value.as_fixed32(); - return true; -} - -bool decode_bool_field(void *field_ptr, ProtoVarInt value) { - auto *val = static_cast(field_ptr); - *val = value.as_bool(); - return true; -} - -bool decode_float_field(void *field_ptr, Proto32Bit value) { - auto *val = static_cast(field_ptr); - *val = value.as_float(); - return true; -} - -bool decode_int32_field(void *field_ptr, ProtoVarInt value) { - auto *val = static_cast(field_ptr); - *val = value.as_int32(); - return true; -} - -bool decode_uint32_field(void *field_ptr, ProtoVarInt value) { - auto *val = static_cast(field_ptr); - *val = value.as_uint32(); - return true; -} - -bool decode_int64_field(void *field_ptr, ProtoVarInt value) { - auto *val = static_cast(field_ptr); - *val = value.as_int64(); - return true; -} - -bool decode_uint64_field(void *field_ptr, ProtoVarInt value) { - auto *val = static_cast(field_ptr); - *val = value.as_uint64(); - return true; -} - -bool decode_sint32_field(void *field_ptr, ProtoVarInt value) { - auto *val = static_cast(field_ptr); - *val = value.as_sint32(); - return true; -} - -bool decode_sint64_field(void *field_ptr, ProtoVarInt value) { - auto *val = static_cast(field_ptr); - *val = value.as_sint64(); - return true; -} - -bool decode_fixed64_field(void *field_ptr, Proto64Bit value) { - auto *val = static_cast(field_ptr); - *val = value.as_fixed64(); - return true; -} - -bool decode_double_field(void *field_ptr, Proto64Bit value) { - auto *val = static_cast(field_ptr); - *val = value.as_double(); - return true; -} - -bool decode_bytes_field(void *field_ptr, ProtoLengthDelimited value) { - auto *str = static_cast(field_ptr); - *str = value.as_string(); - return true; -} +// Type-specific decode functions removed - V3 inlines decoding directly // Template functions are now in the header file for proper instantiation -// Repeated field encoding functions -void encode_repeated_string_field(ProtoWriteBuffer &buffer, const void *field_ptr, uint8_t field_num) { - const auto *vec = static_cast *>(field_ptr); - for (const auto &item : *vec) { - buffer.encode_string(field_num, item, true); - } -} - -void encode_repeated_bool_field(ProtoWriteBuffer &buffer, const void *field_ptr, uint8_t field_num) { - const auto *vec = static_cast *>(field_ptr); - for (bool val : *vec) { - buffer.encode_bool(field_num, val, true); - } -} - -void encode_repeated_uint32_field(ProtoWriteBuffer &buffer, const void *field_ptr, uint8_t field_num) { - const auto *vec = static_cast *>(field_ptr); - for (const auto &val : *vec) { - buffer.encode_uint32(field_num, val, true); - } -} - -void encode_repeated_int32_field(ProtoWriteBuffer &buffer, const void *field_ptr, uint8_t field_num) { - const auto *vec = static_cast *>(field_ptr); - for (const auto &val : *vec) { - buffer.encode_int32(field_num, val, true); - } -} - -void encode_repeated_uint64_field(ProtoWriteBuffer &buffer, const void *field_ptr, uint8_t field_num) { - const auto *vec = static_cast *>(field_ptr); - for (const auto &val : *vec) { - buffer.encode_uint64(field_num, val, true); - } -} - -void encode_repeated_int64_field(ProtoWriteBuffer &buffer, const void *field_ptr, uint8_t field_num) { - const auto *vec = static_cast *>(field_ptr); - for (const auto &val : *vec) { - buffer.encode_int64(field_num, val, true); - } -} - -void encode_repeated_sint32_field(ProtoWriteBuffer &buffer, const void *field_ptr, uint8_t field_num) { - const auto *vec = static_cast *>(field_ptr); - for (const auto &val : *vec) { - buffer.encode_sint32(field_num, val, true); - } -} - -void encode_repeated_sint64_field(ProtoWriteBuffer &buffer, const void *field_ptr, uint8_t field_num) { - const auto *vec = static_cast *>(field_ptr); - for (const auto &val : *vec) { - buffer.encode_sint64(field_num, val, true); - } -} - -void encode_repeated_fixed32_field(ProtoWriteBuffer &buffer, const void *field_ptr, uint8_t field_num) { - const auto *vec = static_cast *>(field_ptr); - for (const auto &val : *vec) { - buffer.encode_fixed32(field_num, val, true); - } -} - -void encode_repeated_fixed64_field(ProtoWriteBuffer &buffer, const void *field_ptr, uint8_t field_num) { - const auto *vec = static_cast *>(field_ptr); - for (const auto &val : *vec) { - buffer.encode_fixed64(field_num, val, true); - } -} - -void encode_repeated_float_field(ProtoWriteBuffer &buffer, const void *field_ptr, uint8_t field_num) { - const auto *vec = static_cast *>(field_ptr); - for (const auto &val : *vec) { - buffer.encode_float(field_num, val, true); - } -} - -void encode_repeated_double_field(ProtoWriteBuffer &buffer, const void *field_ptr, uint8_t field_num) { - const auto *vec = static_cast *>(field_ptr); - for (const auto &val : *vec) { - union { - double value; - uint64_t raw; - } u{}; - u.value = val; - buffer.encode_fixed64(field_num, u.raw, true); - } -} +// Repeated field encoding functions removed - V3 inlines encoding directly // Template repeated field functions moved to header -// Repeated field size calculation functions -void size_repeated_string_field(uint32_t &total_size, const void *field_ptr, uint8_t precalced_field_id_size) { - const auto *vec = static_cast *>(field_ptr); - for (const auto &item : *vec) { - ProtoSize::add_string_field(total_size, precalced_field_id_size, item, true); - } -} - -void size_repeated_bool_field(uint32_t &total_size, const void *field_ptr, uint8_t precalced_field_id_size) { - const auto *vec = static_cast *>(field_ptr); - for (bool val : *vec) { - ProtoSize::add_bool_field(total_size, precalced_field_id_size, val, true); - } -} - -void size_repeated_uint32_field(uint32_t &total_size, const void *field_ptr, uint8_t precalced_field_id_size) { - const auto *vec = static_cast *>(field_ptr); - for (const auto &val : *vec) { - ProtoSize::add_uint32_field(total_size, precalced_field_id_size, val, true); - } -} - -void size_repeated_int32_field(uint32_t &total_size, const void *field_ptr, uint8_t precalced_field_id_size) { - const auto *vec = static_cast *>(field_ptr); - for (const auto &val : *vec) { - ProtoSize::add_int32_field(total_size, precalced_field_id_size, val, true); - } -} - -void size_repeated_uint64_field(uint32_t &total_size, const void *field_ptr, uint8_t precalced_field_id_size) { - const auto *vec = static_cast *>(field_ptr); - for (const auto &val : *vec) { - ProtoSize::add_uint64_field(total_size, precalced_field_id_size, val, true); - } -} - -void size_repeated_int64_field(uint32_t &total_size, const void *field_ptr, uint8_t precalced_field_id_size) { - const auto *vec = static_cast *>(field_ptr); - for (const auto &val : *vec) { - ProtoSize::add_int64_field(total_size, precalced_field_id_size, val, true); - } -} - -void size_repeated_sint32_field(uint32_t &total_size, const void *field_ptr, uint8_t precalced_field_id_size) { - const auto *vec = static_cast *>(field_ptr); - for (const auto &val : *vec) { - ProtoSize::add_sint32_field(total_size, precalced_field_id_size, val, true); - } -} - -void size_repeated_sint64_field(uint32_t &total_size, const void *field_ptr, uint8_t precalced_field_id_size) { - const auto *vec = static_cast *>(field_ptr); - for (const auto &val : *vec) { - ProtoSize::add_sint64_field(total_size, precalced_field_id_size, val, true); - } -} - -void size_repeated_fixed32_field(uint32_t &total_size, const void *field_ptr, uint8_t precalced_field_id_size) { - const auto *vec = static_cast *>(field_ptr); - size_t count = vec->size(); - if (count > 0) { - total_size += count * (precalced_field_id_size + 4); // field tag + 4 bytes per item - } -} - -void size_repeated_fixed64_field(uint32_t &total_size, const void *field_ptr, uint8_t precalced_field_id_size) { - const auto *vec = static_cast *>(field_ptr); - size_t count = vec->size(); - if (count > 0) { - total_size += count * (precalced_field_id_size + 8); // field tag + 8 bytes per item - } -} - -void size_repeated_float_field(uint32_t &total_size, const void *field_ptr, uint8_t precalced_field_id_size) { - const auto *vec = static_cast *>(field_ptr); - size_t count = vec->size(); - if (count > 0) { - total_size += count * (precalced_field_id_size + 4); // field tag + 4 bytes per item - } -} - -void size_repeated_double_field(uint32_t &total_size, const void *field_ptr, uint8_t precalced_field_id_size) { - const auto *vec = static_cast *>(field_ptr); - size_t count = vec->size(); - if (count > 0) { - total_size += count * (precalced_field_id_size + 8); // field tag + 8 bytes per item - } -} +// Repeated field size calculation functions removed - V3 inlines size calculation directly // Template size functions moved to header -// Repeated field decode functions -bool decode_repeated_string_field(void *field_ptr, ProtoLengthDelimited value) { - auto *vec = static_cast *>(field_ptr); - vec->push_back(value.as_string()); - return true; -} - -bool decode_repeated_bool_field(void *field_ptr, ProtoVarInt value) { - auto *vec = static_cast *>(field_ptr); - vec->push_back(value.as_bool()); - return true; -} - -bool decode_repeated_uint32_field(void *field_ptr, ProtoVarInt value) { - auto *vec = static_cast *>(field_ptr); - vec->push_back(value.as_uint32()); - return true; -} - -bool decode_repeated_int32_field(void *field_ptr, ProtoVarInt value) { - auto *vec = static_cast *>(field_ptr); - vec->push_back(value.as_int32()); - return true; -} - -bool decode_repeated_uint64_field(void *field_ptr, ProtoVarInt value) { - auto *vec = static_cast *>(field_ptr); - vec->push_back(value.as_uint64()); - return true; -} - -bool decode_repeated_int64_field(void *field_ptr, ProtoVarInt value) { - auto *vec = static_cast *>(field_ptr); - vec->push_back(value.as_int64()); - return true; -} - -bool decode_repeated_sint32_field(void *field_ptr, ProtoVarInt value) { - auto *vec = static_cast *>(field_ptr); - vec->push_back(value.as_sint32()); - return true; -} - -bool decode_repeated_sint64_field(void *field_ptr, ProtoVarInt value) { - auto *vec = static_cast *>(field_ptr); - vec->push_back(value.as_sint64()); - return true; -} - -bool decode_repeated_fixed32_field(void *field_ptr, Proto32Bit value) { - auto *vec = static_cast *>(field_ptr); - vec->push_back(value.as_fixed32()); - return true; -} - -bool decode_repeated_fixed64_field(void *field_ptr, Proto64Bit value) { - auto *vec = static_cast *>(field_ptr); - vec->push_back(value.as_fixed64()); - return true; -} - -bool decode_repeated_float_field(void *field_ptr, Proto32Bit value) { - auto *vec = static_cast *>(field_ptr); - vec->push_back(value.as_float()); - return true; -} - -bool decode_repeated_double_field(void *field_ptr, Proto64Bit value) { - auto *vec = static_cast *>(field_ptr); - vec->push_back(value.as_double()); - return true; -} +// Repeated field decode functions removed - V3 inlines decoding directly // ProtoMessage implementations using metadata -void ProtoMessage::encode(ProtoWriteBuffer buffer) const { - // Check if V3 metadata is available - const FieldMetaV3 *fields_v3 = get_field_metadata_v3(); - if (fields_v3 != nullptr) { - encode_v3(buffer); +void ProtoMessage::decode(const uint8_t *buffer, size_t length) { + ESP_LOGD(TAG, "ProtoMessage::decode entered, buffer=%p, length=%zu", buffer, length); + + // Handle null buffer + if (buffer == nullptr && length > 0) { + ESP_LOGW(TAG, "decode called with nullptr buffer but length=%zu", length); return; } - const uint8_t *base = reinterpret_cast(this); - - // Get V2 metadata once at the start - const FieldMetaV2 *fields = get_field_metadata_v2(); - size_t field_count = get_field_count_v2(); - - // Encode regular fields - for (size_t i = 0; i < field_count; i++) { - const void *field_addr = base + fields[i].offset; - - switch (fields[i].type) { - case ProtoFieldType::TYPE_BOOL: { - const bool *val = static_cast(field_addr); - buffer.encode_bool(fields[i].field_num, *val, fields[i].force_encode); - break; - } - case ProtoFieldType::TYPE_INT32: { - const int32_t *val = static_cast(field_addr); - buffer.encode_int32(fields[i].field_num, *val, fields[i].force_encode); - break; - } - case ProtoFieldType::TYPE_UINT32: { - const uint32_t *val = static_cast(field_addr); - buffer.encode_uint32(fields[i].field_num, *val, fields[i].force_encode); - break; - } - case ProtoFieldType::TYPE_INT64: { - const int64_t *val = static_cast(field_addr); - buffer.encode_int64(fields[i].field_num, *val, fields[i].force_encode); - break; - } - case ProtoFieldType::TYPE_UINT64: { - const uint64_t *val = static_cast(field_addr); - buffer.encode_uint64(fields[i].field_num, *val, fields[i].force_encode); - break; - } - case ProtoFieldType::TYPE_SINT32: { - const int32_t *val = static_cast(field_addr); - buffer.encode_sint32(fields[i].field_num, *val, fields[i].force_encode); - break; - } - case ProtoFieldType::TYPE_SINT64: { - const int64_t *val = static_cast(field_addr); - buffer.encode_sint64(fields[i].field_num, *val, fields[i].force_encode); - break; - } - case ProtoFieldType::TYPE_ENUM: { - // For enums, treat as uint32 for now - const uint32_t *val = static_cast(field_addr); - buffer.encode_uint32(fields[i].field_num, *val, fields[i].force_encode); - break; - } - case ProtoFieldType::TYPE_STRING: { - const std::string *val = static_cast(field_addr); - buffer.encode_string(fields[i].field_num, *val, fields[i].force_encode); - break; - } - case ProtoFieldType::TYPE_BYTES: { - const std::string *val = static_cast(field_addr); - buffer.encode_bytes(fields[i].field_num, reinterpret_cast(val->data()), val->size(), - fields[i].force_encode); - break; - } - case ProtoFieldType::TYPE_FLOAT: { - const float *val = static_cast(field_addr); - buffer.encode_float(fields[i].field_num, *val, fields[i].force_encode); - break; - } - case ProtoFieldType::TYPE_FIXED32: { - const uint32_t *val = static_cast(field_addr); - buffer.encode_fixed32(fields[i].field_num, *val, fields[i].force_encode); - break; - } - case ProtoFieldType::TYPE_SFIXED32: { - const int32_t *val = static_cast(field_addr); - buffer.encode_sfixed32(fields[i].field_num, *val, fields[i].force_encode); - break; - } - case ProtoFieldType::TYPE_DOUBLE: { - const double *val = static_cast(field_addr); - buffer.encode_double(fields[i].field_num, *val, fields[i].force_encode); - break; - } - case ProtoFieldType::TYPE_FIXED64: { - const uint64_t *val = static_cast(field_addr); - buffer.encode_fixed64(fields[i].field_num, *val, fields[i].force_encode); - break; - } - case ProtoFieldType::TYPE_SFIXED64: { - const int64_t *val = static_cast(field_addr); - buffer.encode_sfixed64(fields[i].field_num, *val, fields[i].force_encode); - break; - } - case ProtoFieldType::TYPE_MESSAGE: { - // Use function pointer from metadata - if (fields[i].handler.message.encode) { - fields[i].handler.message.encode(buffer, field_addr, fields[i].field_num); - } - break; - } - } - } - - // Encode repeated fields - const RepeatedFieldMetaV2 *repeated_fields = get_repeated_field_metadata_v2(); - size_t repeated_count = get_repeated_field_count_v2(); - - for (size_t i = 0; i < repeated_count; i++) { - const void *field_addr = base + repeated_fields[i].offset; - - switch (repeated_fields[i].type) { - case ProtoFieldType::TYPE_BOOL: { - const auto *vec = static_cast *>(field_addr); - for (bool val : *vec) { - buffer.encode_bool(repeated_fields[i].field_num, val, true); - } - break; - } - case ProtoFieldType::TYPE_INT32: { - const auto *vec = static_cast *>(field_addr); - for (const auto &val : *vec) { - buffer.encode_int32(repeated_fields[i].field_num, val, true); - } - break; - } - case ProtoFieldType::TYPE_UINT32: { - const auto *vec = static_cast *>(field_addr); - for (const auto &val : *vec) { - buffer.encode_uint32(repeated_fields[i].field_num, val, true); - } - break; - } - case ProtoFieldType::TYPE_INT64: { - const auto *vec = static_cast *>(field_addr); - for (const auto &val : *vec) { - buffer.encode_int64(repeated_fields[i].field_num, val, true); - } - break; - } - case ProtoFieldType::TYPE_UINT64: { - const auto *vec = static_cast *>(field_addr); - for (const auto &val : *vec) { - buffer.encode_uint64(repeated_fields[i].field_num, val, true); - } - break; - } - case ProtoFieldType::TYPE_SINT32: { - const auto *vec = static_cast *>(field_addr); - for (const auto &val : *vec) { - buffer.encode_sint32(repeated_fields[i].field_num, val, true); - } - break; - } - case ProtoFieldType::TYPE_SINT64: { - const auto *vec = static_cast *>(field_addr); - for (const auto &val : *vec) { - buffer.encode_sint64(repeated_fields[i].field_num, val, true); - } - break; - } - case ProtoFieldType::TYPE_ENUM: { - // For repeated enums, treat as uint32 for now - const auto *vec = static_cast *>(field_addr); - for (const auto &val : *vec) { - buffer.encode_uint32(repeated_fields[i].field_num, val, true); - } - break; - } - case ProtoFieldType::TYPE_STRING: { - const auto *vec = static_cast *>(field_addr); - for (const auto &val : *vec) { - buffer.encode_string(repeated_fields[i].field_num, val, true); - } - break; - } - case ProtoFieldType::TYPE_BYTES: { - const auto *vec = static_cast *>(field_addr); - for (const auto &val : *vec) { - buffer.encode_bytes(repeated_fields[i].field_num, reinterpret_cast(val.data()), val.size(), - true); - } - break; - } - case ProtoFieldType::TYPE_FLOAT: { - const auto *vec = static_cast *>(field_addr); - for (const auto &val : *vec) { - buffer.encode_float(repeated_fields[i].field_num, val, true); - } - break; - } - case ProtoFieldType::TYPE_FIXED32: { - const auto *vec = static_cast *>(field_addr); - for (const auto &val : *vec) { - buffer.encode_fixed32(repeated_fields[i].field_num, val, true); - } - break; - } - case ProtoFieldType::TYPE_SFIXED32: { - const auto *vec = static_cast *>(field_addr); - for (const auto &val : *vec) { - buffer.encode_sfixed32(repeated_fields[i].field_num, val, true); - } - break; - } - case ProtoFieldType::TYPE_DOUBLE: { - const auto *vec = static_cast *>(field_addr); - for (const auto &val : *vec) { - union { - double value; - uint64_t raw; - } u{}; - u.value = val; - buffer.encode_fixed64(repeated_fields[i].field_num, u.raw, true); - } - break; - } - case ProtoFieldType::TYPE_FIXED64: { - const auto *vec = static_cast *>(field_addr); - for (const auto &val : *vec) { - buffer.encode_fixed64(repeated_fields[i].field_num, val, true); - } - break; - } - case ProtoFieldType::TYPE_SFIXED64: { - const auto *vec = static_cast *>(field_addr); - for (const auto &val : *vec) { - buffer.encode_sfixed64(repeated_fields[i].field_num, val, true); - } - break; - } - case ProtoFieldType::TYPE_MESSAGE: { - // Use function pointer from metadata - if (repeated_fields[i].handler.message.encode) { - repeated_fields[i].handler.message.encode(buffer, field_addr, repeated_fields[i].field_num); - } - break; - } - } - } -} - -void ProtoMessage::calculate_size(uint32_t &total_size) const { - // Check if V3 metadata is available - const FieldMetaV3 *fields_v3 = get_field_metadata_v3(); - if (fields_v3 != nullptr) { - calculate_size_v3(total_size); - return; - } - - const uint8_t *base = reinterpret_cast(this); - - // Get V2 metadata once at the start - const FieldMetaV2 *fields = get_field_metadata_v2(); - size_t field_count = get_field_count_v2(); - - // Calculate size for regular fields - for (size_t i = 0; i < field_count; i++) { - const void *field_addr = base + fields[i].offset; - - switch (fields[i].type) { - case ProtoFieldType::TYPE_BOOL: { - const bool *val = static_cast(field_addr); - ProtoSize::add_bool_field(total_size, fields[i].precalced_field_id_size, *val, fields[i].force_encode); - break; - } - case ProtoFieldType::TYPE_INT32: { - const int32_t *val = static_cast(field_addr); - ProtoSize::add_int32_field(total_size, fields[i].precalced_field_id_size, *val, fields[i].force_encode); - break; - } - case ProtoFieldType::TYPE_UINT32: { - const uint32_t *val = static_cast(field_addr); - ProtoSize::add_uint32_field(total_size, fields[i].precalced_field_id_size, *val, fields[i].force_encode); - break; - } - case ProtoFieldType::TYPE_INT64: { - const int64_t *val = static_cast(field_addr); - ProtoSize::add_int64_field(total_size, fields[i].precalced_field_id_size, *val, fields[i].force_encode); - break; - } - case ProtoFieldType::TYPE_UINT64: { - const uint64_t *val = static_cast(field_addr); - ProtoSize::add_uint64_field(total_size, fields[i].precalced_field_id_size, *val, fields[i].force_encode); - break; - } - case ProtoFieldType::TYPE_SINT32: { - const int32_t *val = static_cast(field_addr); - ProtoSize::add_sint32_field(total_size, fields[i].precalced_field_id_size, *val, fields[i].force_encode); - break; - } - case ProtoFieldType::TYPE_SINT64: { - const int64_t *val = static_cast(field_addr); - ProtoSize::add_sint64_field(total_size, fields[i].precalced_field_id_size, *val, fields[i].force_encode); - break; - } - case ProtoFieldType::TYPE_ENUM: { - // For enums, treat as uint32 for now - const uint32_t *val = static_cast(field_addr); - ProtoSize::add_enum_field(total_size, fields[i].precalced_field_id_size, *val, fields[i].force_encode); - break; - } - case ProtoFieldType::TYPE_STRING: { - const std::string *val = static_cast(field_addr); - ProtoSize::add_string_field(total_size, fields[i].precalced_field_id_size, *val, fields[i].force_encode); - break; - } - case ProtoFieldType::TYPE_BYTES: { - const std::string *val = static_cast(field_addr); - ProtoSize::add_string_field(total_size, fields[i].precalced_field_id_size, *val, fields[i].force_encode); - break; - } - case ProtoFieldType::TYPE_FLOAT: { - const float *val = static_cast(field_addr); - ProtoSize::add_fixed_field<4>(total_size, fields[i].precalced_field_id_size, - *val != 0.0f || fields[i].force_encode, fields[i].force_encode); - break; - } - case ProtoFieldType::TYPE_FIXED32: { - const uint32_t *val = static_cast(field_addr); - ProtoSize::add_fixed_field<4>(total_size, fields[i].precalced_field_id_size, - *val != 0 || fields[i].force_encode, fields[i].force_encode); - break; - } - case ProtoFieldType::TYPE_SFIXED32: { - const int32_t *val = static_cast(field_addr); - ProtoSize::add_fixed_field<4>(total_size, fields[i].precalced_field_id_size, - *val != 0 || fields[i].force_encode, fields[i].force_encode); - break; - } - case ProtoFieldType::TYPE_DOUBLE: { - const double *val = static_cast(field_addr); - ProtoSize::add_fixed_field<8>(total_size, fields[i].precalced_field_id_size, - *val != 0.0 || fields[i].force_encode, fields[i].force_encode); - break; - } - case ProtoFieldType::TYPE_FIXED64: { - const uint64_t *val = static_cast(field_addr); - ProtoSize::add_fixed_field<8>(total_size, fields[i].precalced_field_id_size, - *val != 0 || fields[i].force_encode, fields[i].force_encode); - break; - } - case ProtoFieldType::TYPE_SFIXED64: { - const int64_t *val = static_cast(field_addr); - ProtoSize::add_fixed_field<8>(total_size, fields[i].precalced_field_id_size, - *val != 0 || fields[i].force_encode, fields[i].force_encode); - break; - } - case ProtoFieldType::TYPE_MESSAGE: { - // Use function pointer from metadata - if (fields[i].handler.message.size) { - fields[i].handler.message.size(total_size, field_addr, fields[i].precalced_field_id_size, - fields[i].force_encode); - } - break; - } - } - } - - // Calculate size for repeated fields - const RepeatedFieldMetaV2 *repeated_fields = get_repeated_field_metadata_v2(); - size_t repeated_count = get_repeated_field_count_v2(); - - for (size_t i = 0; i < repeated_count; i++) { - const void *field_addr = base + repeated_fields[i].offset; - - switch (repeated_fields[i].type) { - case ProtoFieldType::TYPE_BOOL: { - const auto *vec = static_cast *>(field_addr); - for (bool val : *vec) { - ProtoSize::add_bool_field(total_size, repeated_fields[i].precalced_field_id_size, val, true); - } - break; - } - case ProtoFieldType::TYPE_INT32: { - const auto *vec = static_cast *>(field_addr); - for (const auto &val : *vec) { - ProtoSize::add_int32_field(total_size, repeated_fields[i].precalced_field_id_size, val, true); - } - break; - } - case ProtoFieldType::TYPE_UINT32: { - const auto *vec = static_cast *>(field_addr); - for (const auto &val : *vec) { - ProtoSize::add_uint32_field(total_size, repeated_fields[i].precalced_field_id_size, val, true); - } - break; - } - case ProtoFieldType::TYPE_INT64: { - const auto *vec = static_cast *>(field_addr); - for (const auto &val : *vec) { - ProtoSize::add_int64_field(total_size, repeated_fields[i].precalced_field_id_size, val, true); - } - break; - } - case ProtoFieldType::TYPE_UINT64: { - const auto *vec = static_cast *>(field_addr); - for (const auto &val : *vec) { - ProtoSize::add_uint64_field(total_size, repeated_fields[i].precalced_field_id_size, val, true); - } - break; - } - case ProtoFieldType::TYPE_SINT32: { - const auto *vec = static_cast *>(field_addr); - for (const auto &val : *vec) { - ProtoSize::add_sint32_field(total_size, repeated_fields[i].precalced_field_id_size, val, true); - } - break; - } - case ProtoFieldType::TYPE_SINT64: { - const auto *vec = static_cast *>(field_addr); - for (const auto &val : *vec) { - ProtoSize::add_sint64_field(total_size, repeated_fields[i].precalced_field_id_size, val, true); - } - break; - } - case ProtoFieldType::TYPE_ENUM: { - // For repeated enums, treat as uint32 for now - const auto *vec = static_cast *>(field_addr); - for (const auto &val : *vec) { - ProtoSize::add_enum_field(total_size, repeated_fields[i].precalced_field_id_size, val, true); - } - break; - } - case ProtoFieldType::TYPE_STRING: { - const auto *vec = static_cast *>(field_addr); - for (const auto &val : *vec) { - ProtoSize::add_string_field(total_size, repeated_fields[i].precalced_field_id_size, val, true); - } - break; - } - case ProtoFieldType::TYPE_BYTES: { - const auto *vec = static_cast *>(field_addr); - for (const auto &val : *vec) { - ProtoSize::add_string_field(total_size, repeated_fields[i].precalced_field_id_size, val, true); - } - break; - } - case ProtoFieldType::TYPE_FLOAT: { - const auto *vec = static_cast *>(field_addr); - for (const auto &val : *vec) { - ProtoSize::add_fixed_field<4>(total_size, repeated_fields[i].precalced_field_id_size, true, true); - } - break; - } - case ProtoFieldType::TYPE_FIXED32: { - const auto *vec = static_cast *>(field_addr); - for (const auto &val : *vec) { - ProtoSize::add_fixed_field<4>(total_size, repeated_fields[i].precalced_field_id_size, true, true); - } - break; - } - case ProtoFieldType::TYPE_SFIXED32: { - const auto *vec = static_cast *>(field_addr); - for (const auto &val : *vec) { - ProtoSize::add_fixed_field<4>(total_size, repeated_fields[i].precalced_field_id_size, true, true); - } - break; - } - case ProtoFieldType::TYPE_DOUBLE: { - const auto *vec = static_cast *>(field_addr); - for (const auto &val : *vec) { - ProtoSize::add_fixed_field<8>(total_size, repeated_fields[i].precalced_field_id_size, true, true); - } - break; - } - case ProtoFieldType::TYPE_FIXED64: { - const auto *vec = static_cast *>(field_addr); - for (const auto &val : *vec) { - ProtoSize::add_fixed_field<8>(total_size, repeated_fields[i].precalced_field_id_size, true, true); - } - break; - } - case ProtoFieldType::TYPE_SFIXED64: { - const auto *vec = static_cast *>(field_addr); - for (const auto &val : *vec) { - ProtoSize::add_fixed_field<8>(total_size, repeated_fields[i].precalced_field_id_size, true, true); - } - break; - } - case ProtoFieldType::TYPE_MESSAGE: { - // Use function pointer from metadata - if (repeated_fields[i].handler.message.size) { - repeated_fields[i].handler.message.size(total_size, field_addr, repeated_fields[i].precalced_field_id_size); - } - break; - } - } - } -} - -// V3 implementations -void ProtoMessage::decode_v3(const uint8_t *buffer, size_t length) { uint32_t i = 0; bool error = false; uint8_t *base = reinterpret_cast(this); // Get V3 metadata + ESP_LOGD(TAG, "Getting V3 metadata..."); const FieldMetaV3 *fields = get_field_metadata_v3(); size_t field_count = get_field_count_v3(); const RepeatedFieldMetaV3 *repeated_fields = get_repeated_field_metadata_v3(); size_t repeated_count = get_repeated_field_count_v3(); + ESP_LOGD(TAG, "decode: field_count=%zu, repeated_count=%zu, length=%zu, fields=%p, repeated_fields=%p", field_count, + repeated_count, length, fields, repeated_fields); + + // If message has no fields at all, just return (valid empty message) + if (field_count == 0 && repeated_count == 0) { + if (length > 0) { + ESP_LOGW(TAG, "Received data for message with no fields"); + } + ESP_LOGD(TAG, "Empty message handled, returning"); + return; + } + while (i < length) { uint32_t consumed; auto res = ProtoVarInt::parse(&buffer[i], length - i, &consumed); @@ -1456,55 +95,56 @@ void ProtoMessage::decode_v3(const uint8_t *buffer, size_t length) { bool decoded = false; // Check regular fields - for (size_t j = 0; j < field_count; j++) { - if (fields[j].field_num == field_id && get_wire_type(fields[j].get_type()) == 0) { - void *field_addr = base + fields[j].offset; + if (fields != nullptr) { + for (size_t j = 0; j < field_count; j++) { + if (fields[j].field_num == field_id && get_wire_type(fields[j].get_type()) == 0) { + void *field_addr = base + fields[j].get_offset(); - switch (fields[j].get_type()) { - case ProtoFieldType::TYPE_BOOL: - *static_cast(field_addr) = value.as_bool(); - decoded = true; - break; - case ProtoFieldType::TYPE_INT32: - *static_cast(field_addr) = value.as_int32(); - decoded = true; - break; - case ProtoFieldType::TYPE_UINT32: - *static_cast(field_addr) = value.as_uint32(); - decoded = true; - break; - case ProtoFieldType::TYPE_INT64: - *static_cast(field_addr) = value.as_int64(); - decoded = true; - break; - case ProtoFieldType::TYPE_UINT64: - *static_cast(field_addr) = value.as_uint64(); - decoded = true; - break; - case ProtoFieldType::TYPE_SINT32: - *static_cast(field_addr) = value.as_sint32(); - decoded = true; - break; - case ProtoFieldType::TYPE_SINT64: - *static_cast(field_addr) = value.as_sint64(); - decoded = true; - break; - case ProtoFieldType::TYPE_ENUM: - *static_cast(field_addr) = value.as_uint32(); - decoded = true; - break; - default: - break; + switch (fields[j].get_type()) { + case ProtoFieldType::TYPE_BOOL: + *static_cast(field_addr) = value.as_bool(); + decoded = true; + break; + case ProtoFieldType::TYPE_INT32: + *static_cast(field_addr) = value.as_int32(); + decoded = true; + break; + case ProtoFieldType::TYPE_UINT32: + *static_cast(field_addr) = value.as_uint32(); + decoded = true; + break; + case ProtoFieldType::TYPE_INT64: + *static_cast(field_addr) = value.as_int64(); + decoded = true; + break; + case ProtoFieldType::TYPE_UINT64: + *static_cast(field_addr) = value.as_uint64(); + decoded = true; + break; + case ProtoFieldType::TYPE_SINT32: + *static_cast(field_addr) = value.as_sint32(); + decoded = true; + break; + case ProtoFieldType::TYPE_SINT64: + *static_cast(field_addr) = value.as_sint64(); + decoded = true; + break; + case ProtoFieldType::TYPE_ENUM: + *static_cast(field_addr) = value.as_uint32(); + decoded = true; + break; + default: + break; + } + break; } - break; } } - // Check repeated fields if not found if (!decoded && repeated_fields) { for (size_t j = 0; j < repeated_count; j++) { if (repeated_fields[j].field_num == field_id && get_wire_type(repeated_fields[j].get_type()) == 0) { - void *field_addr = base + repeated_fields[j].offset; + void *field_addr = base + repeated_fields[j].get_offset(); switch (repeated_fields[j].get_type()) { case ProtoFieldType::TYPE_BOOL: { @@ -1590,34 +230,41 @@ void ProtoMessage::decode_v3(const uint8_t *buffer, size_t length) { bool decoded = false; // Check regular fields - for (size_t j = 0; j < field_count; j++) { - if (fields[j].field_num == field_id && get_wire_type(fields[j].get_type()) == 2) { - void *field_addr = base + fields[j].offset; + if (fields != nullptr) { + for (size_t j = 0; j < field_count; j++) { + if (fields[j].field_num == field_id && get_wire_type(fields[j].get_type()) == 2) { + void *field_addr = base + fields[j].get_offset(); - switch (fields[j].get_type()) { - case ProtoFieldType::TYPE_STRING: { - auto *str = static_cast(field_addr); - *str = value.as_string(); - decoded = true; - break; - } - case ProtoFieldType::TYPE_BYTES: { - auto *str = static_cast(field_addr); - *str = value.as_string(); - decoded = true; - break; - } - case ProtoFieldType::TYPE_MESSAGE: { - // Use message handler registry - if (fields[j].get_message_type_id() < MESSAGE_HANDLER_COUNT) { - decoded = MESSAGE_HANDLERS[fields[j].get_message_type_id()].decode(field_addr, value); + switch (fields[j].get_type()) { + case ProtoFieldType::TYPE_STRING: { + auto *str = static_cast(field_addr); + *str = value.as_string(); + decoded = true; + break; } - break; + case ProtoFieldType::TYPE_BYTES: { + auto *str = static_cast(field_addr); + *str = value.as_string(); + decoded = true; + break; + } + case ProtoFieldType::TYPE_MESSAGE: { + // Use message handler registry + uint8_t handler_id = fields[j].get_message_type_id(); + ESP_LOGD(TAG, "TYPE_MESSAGE field %d, handler_id=%d, MESSAGE_HANDLER_COUNT=%zu", field_id, handler_id, + MESSAGE_HANDLER_COUNT); + if (handler_id < MESSAGE_HANDLER_COUNT && MESSAGE_HANDLERS[handler_id].decode != nullptr) { + decoded = MESSAGE_HANDLERS[handler_id].decode(field_addr, value); + } else { + ESP_LOGW(TAG, "No handler for message type %d", handler_id); + } + break; + } + default: + break; } - default: - break; + break; } - break; } } @@ -1625,7 +272,7 @@ void ProtoMessage::decode_v3(const uint8_t *buffer, size_t length) { if (!decoded && repeated_fields) { for (size_t j = 0; j < repeated_count; j++) { if (repeated_fields[j].field_num == field_id && get_wire_type(repeated_fields[j].get_type()) == 2) { - void *field_addr = base + repeated_fields[j].offset; + void *field_addr = base + repeated_fields[j].get_offset(); switch (repeated_fields[j].get_type()) { case ProtoFieldType::TYPE_STRING: { @@ -1636,9 +283,14 @@ void ProtoMessage::decode_v3(const uint8_t *buffer, size_t length) { } case ProtoFieldType::TYPE_MESSAGE: { // Use repeated message handler registry - if (repeated_fields[j].get_message_type_id() < REPEATED_MESSAGE_HANDLER_COUNT) { - decoded = - REPEATED_MESSAGE_HANDLERS[repeated_fields[j].get_message_type_id()].decode(field_addr, value); + uint8_t handler_id = repeated_fields[j].get_message_type_id(); + ESP_LOGD(TAG, "Repeated TYPE_MESSAGE field %d, handler_id=%d, REPEATED_MESSAGE_HANDLER_COUNT=%zu", + field_id, handler_id, REPEATED_MESSAGE_HANDLER_COUNT); + if (handler_id < REPEATED_MESSAGE_HANDLER_COUNT && REPEATED_MESSAGE_HANDLERS[handler_id].decode != nullptr) { + decoded = REPEATED_MESSAGE_HANDLERS[handler_id].decode(field_addr, value); + ESP_LOGD(TAG, "Decoded repeated message field %d: %s", field_id, decoded ? "success" : "failed"); + } else { + ESP_LOGW(TAG, "No handler for repeated message type %d", handler_id); } break; } @@ -1673,27 +325,29 @@ void ProtoMessage::decode_v3(const uint8_t *buffer, size_t length) { bool decoded = false; // Check regular fields - for (size_t j = 0; j < field_count; j++) { - if (fields[j].field_num == field_id && get_wire_type(fields[j].get_type()) == 5) { - void *field_addr = base + fields[j].offset; + if (fields != nullptr) { + for (size_t j = 0; j < field_count; j++) { + if (fields[j].field_num == field_id && get_wire_type(fields[j].get_type()) == 5) { + void *field_addr = base + fields[j].get_offset(); - switch (fields[j].get_type()) { - case ProtoFieldType::TYPE_FLOAT: - *static_cast(field_addr) = value.as_float(); - decoded = true; - break; - case ProtoFieldType::TYPE_FIXED32: - *static_cast(field_addr) = value.as_fixed32(); - decoded = true; - break; - case ProtoFieldType::TYPE_SFIXED32: - *static_cast(field_addr) = value.as_sfixed32(); - decoded = true; - break; - default: - break; + switch (fields[j].get_type()) { + case ProtoFieldType::TYPE_FLOAT: + *static_cast(field_addr) = value.as_float(); + decoded = true; + break; + case ProtoFieldType::TYPE_FIXED32: + *static_cast(field_addr) = value.as_fixed32(); + decoded = true; + break; + case ProtoFieldType::TYPE_SFIXED32: + *static_cast(field_addr) = value.as_sfixed32(); + decoded = true; + break; + default: + break; + } + break; } - break; } } @@ -1701,7 +355,7 @@ void ProtoMessage::decode_v3(const uint8_t *buffer, size_t length) { if (!decoded && repeated_fields) { for (size_t j = 0; j < repeated_count; j++) { if (repeated_fields[j].field_num == field_id && get_wire_type(repeated_fields[j].get_type()) == 5) { - void *field_addr = base + repeated_fields[j].offset; + void *field_addr = base + repeated_fields[j].get_offset(); switch (repeated_fields[j].get_type()) { case ProtoFieldType::TYPE_FLOAT: { @@ -1757,27 +411,29 @@ void ProtoMessage::decode_v3(const uint8_t *buffer, size_t length) { bool decoded = false; // Check regular fields - for (size_t j = 0; j < field_count; j++) { - if (fields[j].field_num == field_id && get_wire_type(fields[j].get_type()) == 1) { - void *field_addr = base + fields[j].offset; + if (fields != nullptr) { + for (size_t j = 0; j < field_count; j++) { + if (fields[j].field_num == field_id && get_wire_type(fields[j].get_type()) == 1) { + void *field_addr = base + fields[j].get_offset(); - switch (fields[j].get_type()) { - case ProtoFieldType::TYPE_DOUBLE: - *static_cast(field_addr) = value.as_double(); - decoded = true; - break; - case ProtoFieldType::TYPE_FIXED64: - *static_cast(field_addr) = value.as_fixed64(); - decoded = true; - break; - case ProtoFieldType::TYPE_SFIXED64: - *static_cast(field_addr) = value.as_sfixed64(); - decoded = true; - break; - default: - break; + switch (fields[j].get_type()) { + case ProtoFieldType::TYPE_DOUBLE: + *static_cast(field_addr) = value.as_double(); + decoded = true; + break; + case ProtoFieldType::TYPE_FIXED64: + *static_cast(field_addr) = value.as_fixed64(); + decoded = true; + break; + case ProtoFieldType::TYPE_SFIXED64: + *static_cast(field_addr) = value.as_sfixed64(); + decoded = true; + break; + default: + break; + } + break; } - break; } } @@ -1785,7 +441,7 @@ void ProtoMessage::decode_v3(const uint8_t *buffer, size_t length) { if (!decoded && repeated_fields) { for (size_t j = 0; j < repeated_count; j++) { if (repeated_fields[j].field_num == field_id && get_wire_type(repeated_fields[j].get_type()) == 1) { - void *field_addr = base + repeated_fields[j].offset; + void *field_addr = base + repeated_fields[j].get_offset(); switch (repeated_fields[j].get_type()) { case ProtoFieldType::TYPE_DOUBLE: { @@ -1832,7 +488,7 @@ void ProtoMessage::decode_v3(const uint8_t *buffer, size_t length) { } } -void ProtoMessage::encode_v3(ProtoWriteBuffer buffer) const { +void ProtoMessage::encode(ProtoWriteBuffer buffer) const { const uint8_t *base = reinterpret_cast(this); // Get V3 metadata @@ -1840,234 +496,237 @@ void ProtoMessage::encode_v3(ProtoWriteBuffer buffer) const { size_t field_count = get_field_count_v3(); // Regular fields - for (size_t i = 0; i < field_count; i++) { - const void *field_addr = base + fields[i].offset; + if (fields != nullptr) { + for (size_t i = 0; i < field_count; i++) { + const void *field_addr = base + fields[i].get_offset(); - switch (fields[i].get_type()) { - case ProtoFieldType::TYPE_BOOL: { - const auto *val = static_cast(field_addr); - buffer.encode_bool(fields[i].field_num, *val, false); - break; - } - case ProtoFieldType::TYPE_INT32: { - const auto *val = static_cast(field_addr); - buffer.encode_int32(fields[i].field_num, *val, false); - break; - } - case ProtoFieldType::TYPE_UINT32: { - const auto *val = static_cast(field_addr); - buffer.encode_uint32(fields[i].field_num, *val, false); - break; - } - case ProtoFieldType::TYPE_INT64: { - const auto *val = static_cast(field_addr); - buffer.encode_int64(fields[i].field_num, *val, false); - break; - } - case ProtoFieldType::TYPE_UINT64: { - const auto *val = static_cast(field_addr); - buffer.encode_uint64(fields[i].field_num, *val, false); - break; - } - case ProtoFieldType::TYPE_SINT32: { - const auto *val = static_cast(field_addr); - buffer.encode_sint32(fields[i].field_num, *val, false); - break; - } - case ProtoFieldType::TYPE_SINT64: { - const auto *val = static_cast(field_addr); - buffer.encode_sint64(fields[i].field_num, *val, false); - break; - } - case ProtoFieldType::TYPE_ENUM: { - const auto *val = static_cast(field_addr); - buffer.encode_uint32(fields[i].field_num, *val, false); - break; - } - case ProtoFieldType::TYPE_STRING: { - const auto *val = static_cast(field_addr); - buffer.encode_string(fields[i].field_num, *val, false); - break; - } - case ProtoFieldType::TYPE_BYTES: { - const auto *str = static_cast(field_addr); - buffer.encode_bytes(fields[i].field_num, reinterpret_cast(str->data()), str->size(), false); - break; - } - case ProtoFieldType::TYPE_FLOAT: { - const auto *val = static_cast(field_addr); - buffer.encode_float(fields[i].field_num, *val, false); - break; - } - case ProtoFieldType::TYPE_FIXED32: { - const auto *val = static_cast(field_addr); - buffer.encode_fixed32(fields[i].field_num, *val, false); - break; - } - case ProtoFieldType::TYPE_SFIXED32: { - const auto *val = static_cast(field_addr); - buffer.encode_sfixed32(fields[i].field_num, *val, false); - break; - } - case ProtoFieldType::TYPE_DOUBLE: { - const auto *val = static_cast(field_addr); - buffer.encode_double(fields[i].field_num, *val, false); - break; - } - case ProtoFieldType::TYPE_FIXED64: { - const auto *val = static_cast(field_addr); - buffer.encode_fixed64(fields[i].field_num, *val, false); - break; - } - case ProtoFieldType::TYPE_SFIXED64: { - const auto *val = static_cast(field_addr); - buffer.encode_sfixed64(fields[i].field_num, *val, false); - break; - } - case ProtoFieldType::TYPE_MESSAGE: { - // Use message handler registry - if (fields[i].get_message_type_id() < MESSAGE_HANDLER_COUNT) { - MESSAGE_HANDLERS[fields[i].get_message_type_id()].encode(buffer, field_addr, fields[i].field_num); + switch (fields[i].get_type()) { + case ProtoFieldType::TYPE_BOOL: { + const auto *val = static_cast(field_addr); + buffer.encode_bool(fields[i].field_num, *val, false); + break; + } + case ProtoFieldType::TYPE_INT32: { + const auto *val = static_cast(field_addr); + buffer.encode_int32(fields[i].field_num, *val, false); + break; + } + case ProtoFieldType::TYPE_UINT32: { + const auto *val = static_cast(field_addr); + buffer.encode_uint32(fields[i].field_num, *val, false); + break; + } + case ProtoFieldType::TYPE_INT64: { + const auto *val = static_cast(field_addr); + buffer.encode_int64(fields[i].field_num, *val, false); + break; + } + case ProtoFieldType::TYPE_UINT64: { + const auto *val = static_cast(field_addr); + buffer.encode_uint64(fields[i].field_num, *val, false); + break; + } + case ProtoFieldType::TYPE_SINT32: { + const auto *val = static_cast(field_addr); + buffer.encode_sint32(fields[i].field_num, *val, false); + break; + } + case ProtoFieldType::TYPE_SINT64: { + const auto *val = static_cast(field_addr); + buffer.encode_sint64(fields[i].field_num, *val, false); + break; + } + case ProtoFieldType::TYPE_ENUM: { + const auto *val = static_cast(field_addr); + buffer.encode_uint32(fields[i].field_num, *val, false); + break; + } + case ProtoFieldType::TYPE_STRING: { + const auto *val = static_cast(field_addr); + buffer.encode_string(fields[i].field_num, *val, false); + break; + } + case ProtoFieldType::TYPE_BYTES: { + const auto *str = static_cast(field_addr); + buffer.encode_bytes(fields[i].field_num, reinterpret_cast(str->data()), str->size(), false); + break; + } + case ProtoFieldType::TYPE_FLOAT: { + const auto *val = static_cast(field_addr); + buffer.encode_float(fields[i].field_num, *val, false); + break; + } + case ProtoFieldType::TYPE_FIXED32: { + const auto *val = static_cast(field_addr); + buffer.encode_fixed32(fields[i].field_num, *val, false); + break; + } + case ProtoFieldType::TYPE_SFIXED32: { + const auto *val = static_cast(field_addr); + buffer.encode_sfixed32(fields[i].field_num, *val, false); + break; + } + case ProtoFieldType::TYPE_DOUBLE: { + const auto *val = static_cast(field_addr); + buffer.encode_double(fields[i].field_num, *val, false); + break; + } + case ProtoFieldType::TYPE_FIXED64: { + const auto *val = static_cast(field_addr); + buffer.encode_fixed64(fields[i].field_num, *val, false); + break; + } + case ProtoFieldType::TYPE_SFIXED64: { + const auto *val = static_cast(field_addr); + buffer.encode_sfixed64(fields[i].field_num, *val, false); + break; + } + case ProtoFieldType::TYPE_MESSAGE: { + // Use message handler registry + if (fields[i].get_message_type_id() < MESSAGE_HANDLER_COUNT) { + MESSAGE_HANDLERS[fields[i].get_message_type_id()].encode(buffer, field_addr, fields[i].field_num); + } + break; } - break; } } } - // Repeated fields const RepeatedFieldMetaV3 *repeated_fields = get_repeated_field_metadata_v3(); size_t repeated_count = get_repeated_field_count_v3(); - for (size_t i = 0; i < repeated_count; i++) { - const void *field_addr = base + repeated_fields[i].offset; + if (repeated_fields != nullptr) { + for (size_t i = 0; i < repeated_count; i++) { + const void *field_addr = base + repeated_fields[i].get_offset(); - switch (repeated_fields[i].get_type()) { - case ProtoFieldType::TYPE_BOOL: { - const auto *vec = static_cast *>(field_addr); - for (bool val : *vec) { - buffer.encode_bool(repeated_fields[i].field_num, val, true); + switch (repeated_fields[i].get_type()) { + case ProtoFieldType::TYPE_BOOL: { + const auto *vec = static_cast *>(field_addr); + for (bool val : *vec) { + buffer.encode_bool(repeated_fields[i].field_num, val, true); + } + break; } - break; - } - case ProtoFieldType::TYPE_INT32: { - const auto *vec = static_cast *>(field_addr); - for (const auto &val : *vec) { - buffer.encode_int32(repeated_fields[i].field_num, val, true); + case ProtoFieldType::TYPE_INT32: { + const auto *vec = static_cast *>(field_addr); + for (const auto &val : *vec) { + buffer.encode_int32(repeated_fields[i].field_num, val, true); + } + break; } - break; - } - case ProtoFieldType::TYPE_UINT32: { - const auto *vec = static_cast *>(field_addr); - for (const auto &val : *vec) { - buffer.encode_uint32(repeated_fields[i].field_num, val, true); + case ProtoFieldType::TYPE_UINT32: { + const auto *vec = static_cast *>(field_addr); + for (const auto &val : *vec) { + buffer.encode_uint32(repeated_fields[i].field_num, val, true); + } + break; } - break; - } - case ProtoFieldType::TYPE_INT64: { - const auto *vec = static_cast *>(field_addr); - for (const auto &val : *vec) { - buffer.encode_int64(repeated_fields[i].field_num, val, true); + case ProtoFieldType::TYPE_INT64: { + const auto *vec = static_cast *>(field_addr); + for (const auto &val : *vec) { + buffer.encode_int64(repeated_fields[i].field_num, val, true); + } + break; } - break; - } - case ProtoFieldType::TYPE_UINT64: { - const auto *vec = static_cast *>(field_addr); - for (const auto &val : *vec) { - buffer.encode_uint64(repeated_fields[i].field_num, val, true); + case ProtoFieldType::TYPE_UINT64: { + const auto *vec = static_cast *>(field_addr); + for (const auto &val : *vec) { + buffer.encode_uint64(repeated_fields[i].field_num, val, true); + } + break; } - break; - } - case ProtoFieldType::TYPE_SINT32: { - const auto *vec = static_cast *>(field_addr); - for (const auto &val : *vec) { - buffer.encode_sint32(repeated_fields[i].field_num, val, true); + case ProtoFieldType::TYPE_SINT32: { + const auto *vec = static_cast *>(field_addr); + for (const auto &val : *vec) { + buffer.encode_sint32(repeated_fields[i].field_num, val, true); + } + break; } - break; - } - case ProtoFieldType::TYPE_SINT64: { - const auto *vec = static_cast *>(field_addr); - for (const auto &val : *vec) { - buffer.encode_sint64(repeated_fields[i].field_num, val, true); + case ProtoFieldType::TYPE_SINT64: { + const auto *vec = static_cast *>(field_addr); + for (const auto &val : *vec) { + buffer.encode_sint64(repeated_fields[i].field_num, val, true); + } + break; } - break; - } - case ProtoFieldType::TYPE_ENUM: { - const auto *vec = static_cast *>(field_addr); - for (const auto &val : *vec) { - buffer.encode_uint32(repeated_fields[i].field_num, val, true); + case ProtoFieldType::TYPE_ENUM: { + const auto *vec = static_cast *>(field_addr); + for (const auto &val : *vec) { + buffer.encode_uint32(repeated_fields[i].field_num, val, true); + } + break; } - break; - } - case ProtoFieldType::TYPE_STRING: { - const auto *vec = static_cast *>(field_addr); - for (const auto &val : *vec) { - buffer.encode_string(repeated_fields[i].field_num, val, true); + case ProtoFieldType::TYPE_STRING: { + const auto *vec = static_cast *>(field_addr); + for (const auto &val : *vec) { + buffer.encode_string(repeated_fields[i].field_num, val, true); + } + break; } - break; - } - case ProtoFieldType::TYPE_BYTES: { - const auto *vec = static_cast *>(field_addr); - for (const auto &val : *vec) { - buffer.encode_bytes(repeated_fields[i].field_num, reinterpret_cast(val.data()), val.size(), - true); + case ProtoFieldType::TYPE_BYTES: { + const auto *vec = static_cast *>(field_addr); + for (const auto &val : *vec) { + buffer.encode_bytes(repeated_fields[i].field_num, reinterpret_cast(val.data()), val.size(), + true); + } + break; } - break; - } - case ProtoFieldType::TYPE_FLOAT: { - const auto *vec = static_cast *>(field_addr); - for (const auto &val : *vec) { - buffer.encode_float(repeated_fields[i].field_num, val, true); + case ProtoFieldType::TYPE_FLOAT: { + const auto *vec = static_cast *>(field_addr); + for (const auto &val : *vec) { + buffer.encode_float(repeated_fields[i].field_num, val, true); + } + break; } - break; - } - case ProtoFieldType::TYPE_FIXED32: { - const auto *vec = static_cast *>(field_addr); - for (const auto &val : *vec) { - buffer.encode_fixed32(repeated_fields[i].field_num, val, true); + case ProtoFieldType::TYPE_FIXED32: { + const auto *vec = static_cast *>(field_addr); + for (const auto &val : *vec) { + buffer.encode_fixed32(repeated_fields[i].field_num, val, true); + } + break; } - break; - } - case ProtoFieldType::TYPE_SFIXED32: { - const auto *vec = static_cast *>(field_addr); - for (const auto &val : *vec) { - buffer.encode_sfixed32(repeated_fields[i].field_num, val, true); + case ProtoFieldType::TYPE_SFIXED32: { + const auto *vec = static_cast *>(field_addr); + for (const auto &val : *vec) { + buffer.encode_sfixed32(repeated_fields[i].field_num, val, true); + } + break; } - break; - } - case ProtoFieldType::TYPE_DOUBLE: { - const auto *vec = static_cast *>(field_addr); - for (const auto &val : *vec) { - buffer.encode_double(repeated_fields[i].field_num, val, true); + case ProtoFieldType::TYPE_DOUBLE: { + const auto *vec = static_cast *>(field_addr); + for (const auto &val : *vec) { + buffer.encode_double(repeated_fields[i].field_num, val, true); + } + break; } - break; - } - case ProtoFieldType::TYPE_FIXED64: { - const auto *vec = static_cast *>(field_addr); - for (const auto &val : *vec) { - buffer.encode_fixed64(repeated_fields[i].field_num, val, true); + case ProtoFieldType::TYPE_FIXED64: { + const auto *vec = static_cast *>(field_addr); + for (const auto &val : *vec) { + buffer.encode_fixed64(repeated_fields[i].field_num, val, true); + } + break; } - break; - } - case ProtoFieldType::TYPE_SFIXED64: { - const auto *vec = static_cast *>(field_addr); - for (const auto &val : *vec) { - buffer.encode_sfixed64(repeated_fields[i].field_num, val, true); + case ProtoFieldType::TYPE_SFIXED64: { + const auto *vec = static_cast *>(field_addr); + for (const auto &val : *vec) { + buffer.encode_sfixed64(repeated_fields[i].field_num, val, true); + } + break; } - break; - } - case ProtoFieldType::TYPE_MESSAGE: { - // Use repeated message handler registry - if (repeated_fields[i].get_message_type_id() < REPEATED_MESSAGE_HANDLER_COUNT) { - REPEATED_MESSAGE_HANDLERS[repeated_fields[i].get_message_type_id()].encode(buffer, field_addr, - repeated_fields[i].field_num); + case ProtoFieldType::TYPE_MESSAGE: { + // Use repeated message handler registry + if (repeated_fields[i].get_message_type_id() < REPEATED_MESSAGE_HANDLER_COUNT) { + REPEATED_MESSAGE_HANDLERS[repeated_fields[i].get_message_type_id()].encode(buffer, field_addr, + repeated_fields[i].field_num); + } + break; } - break; } } } } -void ProtoMessage::calculate_size_v3(uint32_t &total_size) const { +void ProtoMessage::calculate_size(uint32_t &total_size) const { const uint8_t *base = reinterpret_cast(this); // Get V3 metadata @@ -2075,225 +734,235 @@ void ProtoMessage::calculate_size_v3(uint32_t &total_size) const { size_t field_count = get_field_count_v3(); // Regular fields - for (size_t i = 0; i < field_count; i++) { - const void *field_addr = base + fields[i].offset; + if (fields != nullptr) { + for (size_t i = 0; i < field_count; i++) { + const void *field_addr = base + fields[i].get_offset(); - switch (fields[i].get_type()) { - case ProtoFieldType::TYPE_BOOL: { - const auto *val = static_cast(field_addr); - ProtoSize::add_bool_field(total_size, fields[i].get_precalced_size(), *val, false); - break; - } - case ProtoFieldType::TYPE_INT32: { - const auto *val = static_cast(field_addr); - ProtoSize::add_int32_field(total_size, fields[i].get_precalced_size(), *val, false); - break; - } - case ProtoFieldType::TYPE_UINT32: { - const auto *val = static_cast(field_addr); - ProtoSize::add_uint32_field(total_size, fields[i].get_precalced_size(), *val, false); - break; - } - case ProtoFieldType::TYPE_INT64: { - const auto *val = static_cast(field_addr); - ProtoSize::add_int64_field(total_size, fields[i].get_precalced_size(), *val, false); - break; - } - case ProtoFieldType::TYPE_UINT64: { - const auto *val = static_cast(field_addr); - ProtoSize::add_uint64_field(total_size, fields[i].get_precalced_size(), *val, false); - break; - } - case ProtoFieldType::TYPE_SINT32: { - const auto *val = static_cast(field_addr); - ProtoSize::add_sint32_field(total_size, fields[i].get_precalced_size(), *val, false); - break; - } - case ProtoFieldType::TYPE_SINT64: { - const auto *val = static_cast(field_addr); - ProtoSize::add_sint64_field(total_size, fields[i].get_precalced_size(), *val, false); - break; - } - case ProtoFieldType::TYPE_ENUM: { - const auto *val = static_cast(field_addr); - ProtoSize::add_enum_field(total_size, fields[i].get_precalced_size(), *val, false); - break; - } - case ProtoFieldType::TYPE_STRING: { - const auto *val = static_cast(field_addr); - ProtoSize::add_string_field(total_size, fields[i].get_precalced_size(), *val, false); - break; - } - case ProtoFieldType::TYPE_BYTES: { - const auto *str = static_cast(field_addr); - ProtoSize::add_string_field(total_size, fields[i].get_precalced_size(), *str, false); - break; - } - case ProtoFieldType::TYPE_FLOAT: { - const auto *val = static_cast(field_addr); - ProtoSize::add_fixed_field<4>(total_size, fields[i].get_precalced_size(), *val != 0.0f, false); - break; - } - case ProtoFieldType::TYPE_FIXED32: { - const auto *val = static_cast(field_addr); - ProtoSize::add_fixed_field<4>(total_size, fields[i].get_precalced_size(), *val != 0, false); - break; - } - case ProtoFieldType::TYPE_SFIXED32: { - const auto *val = static_cast(field_addr); - ProtoSize::add_fixed_field<4>(total_size, fields[i].get_precalced_size(), *val != 0, false); - break; - } - case ProtoFieldType::TYPE_DOUBLE: { - const auto *val = static_cast(field_addr); - ProtoSize::add_fixed_field<8>(total_size, fields[i].get_precalced_size(), *val != 0.0, false); - break; - } - case ProtoFieldType::TYPE_FIXED64: { - const auto *val = static_cast(field_addr); - ProtoSize::add_fixed_field<8>(total_size, fields[i].get_precalced_size(), *val != 0, false); - break; - } - case ProtoFieldType::TYPE_SFIXED64: { - const auto *val = static_cast(field_addr); - ProtoSize::add_fixed_field<8>(total_size, fields[i].get_precalced_size(), *val != 0, false); - break; - } - case ProtoFieldType::TYPE_MESSAGE: { - // Use message handler registry - if (fields[i].get_message_type_id() < MESSAGE_HANDLER_COUNT) { - MESSAGE_HANDLERS[fields[i].get_message_type_id()].size(total_size, field_addr, fields[i].get_precalced_size(), - false); + switch (fields[i].get_type()) { + case ProtoFieldType::TYPE_BOOL: { + const auto *val = static_cast(field_addr); + ProtoSize::add_bool_field(total_size, fields[i].get_precalced_size(), *val, false); + break; + } + case ProtoFieldType::TYPE_INT32: { + const auto *val = static_cast(field_addr); + ProtoSize::add_int32_field(total_size, fields[i].get_precalced_size(), *val, false); + break; + } + case ProtoFieldType::TYPE_UINT32: { + const auto *val = static_cast(field_addr); + ProtoSize::add_uint32_field(total_size, fields[i].get_precalced_size(), *val, false); + break; + } + case ProtoFieldType::TYPE_INT64: { + const auto *val = static_cast(field_addr); + ProtoSize::add_int64_field(total_size, fields[i].get_precalced_size(), *val, false); + break; + } + case ProtoFieldType::TYPE_UINT64: { + const auto *val = static_cast(field_addr); + ProtoSize::add_uint64_field(total_size, fields[i].get_precalced_size(), *val, false); + break; + } + case ProtoFieldType::TYPE_SINT32: { + const auto *val = static_cast(field_addr); + ProtoSize::add_sint32_field(total_size, fields[i].get_precalced_size(), *val, false); + break; + } + case ProtoFieldType::TYPE_SINT64: { + const auto *val = static_cast(field_addr); + ProtoSize::add_sint64_field(total_size, fields[i].get_precalced_size(), *val, false); + break; + } + case ProtoFieldType::TYPE_ENUM: { + const auto *val = static_cast(field_addr); + ProtoSize::add_enum_field(total_size, fields[i].get_precalced_size(), *val, false); + break; + } + case ProtoFieldType::TYPE_STRING: { + const auto *val = static_cast(field_addr); + ProtoSize::add_string_field(total_size, fields[i].get_precalced_size(), *val, false); + break; + } + case ProtoFieldType::TYPE_BYTES: { + const auto *str = static_cast(field_addr); + ProtoSize::add_string_field(total_size, fields[i].get_precalced_size(), *str, false); + break; + } + case ProtoFieldType::TYPE_FLOAT: { + const auto *val = static_cast(field_addr); + ProtoSize::add_fixed_field<4>(total_size, fields[i].get_precalced_size(), *val != 0.0f, false); + break; + } + case ProtoFieldType::TYPE_FIXED32: { + const auto *val = static_cast(field_addr); + ProtoSize::add_fixed_field<4>(total_size, fields[i].get_precalced_size(), *val != 0, false); + break; + } + case ProtoFieldType::TYPE_SFIXED32: { + const auto *val = static_cast(field_addr); + ProtoSize::add_fixed_field<4>(total_size, fields[i].get_precalced_size(), *val != 0, false); + break; + } + case ProtoFieldType::TYPE_DOUBLE: { + const auto *val = static_cast(field_addr); + ProtoSize::add_fixed_field<8>(total_size, fields[i].get_precalced_size(), *val != 0.0, false); + break; + } + case ProtoFieldType::TYPE_FIXED64: { + const auto *val = static_cast(field_addr); + ProtoSize::add_fixed_field<8>(total_size, fields[i].get_precalced_size(), *val != 0, false); + break; + } + case ProtoFieldType::TYPE_SFIXED64: { + const auto *val = static_cast(field_addr); + ProtoSize::add_fixed_field<8>(total_size, fields[i].get_precalced_size(), *val != 0, false); + break; + } + case ProtoFieldType::TYPE_MESSAGE: { + // Use message handler registry + if (fields[i].get_message_type_id() < MESSAGE_HANDLER_COUNT) { + MESSAGE_HANDLERS[fields[i].get_message_type_id()].size(total_size, field_addr, + fields[i].get_precalced_size(), false); + } + break; } - break; } } } - // Repeated fields const RepeatedFieldMetaV3 *repeated_fields = get_repeated_field_metadata_v3(); size_t repeated_count = get_repeated_field_count_v3(); for (size_t i = 0; i < repeated_count; i++) { - const void *field_addr = base + repeated_fields[i].offset; + if (repeated_fields != nullptr) { + const void *field_addr = base + repeated_fields[i].get_offset(); - switch (repeated_fields[i].get_type()) { - case ProtoFieldType::TYPE_BOOL: { - const auto *vec = static_cast *>(field_addr); - for (bool val : *vec) { - ProtoSize::add_bool_field(total_size, repeated_fields[i].get_precalced_size(), val, true); + switch (repeated_fields[i].get_type()) { + case ProtoFieldType::TYPE_BOOL: { + const auto *vec = static_cast *>(field_addr); + for (bool val : *vec) { + ProtoSize::add_bool_field(total_size, repeated_fields[i].get_precalced_size(), val, true); + } + break; } - break; - } - case ProtoFieldType::TYPE_INT32: { - const auto *vec = static_cast *>(field_addr); - for (const auto &val : *vec) { - ProtoSize::add_int32_field(total_size, repeated_fields[i].get_precalced_size(), val, true); + case ProtoFieldType::TYPE_INT32: { + const auto *vec = static_cast *>(field_addr); + for (const auto &val : *vec) { + ProtoSize::add_int32_field(total_size, repeated_fields[i].get_precalced_size(), val, true); + } + break; } - break; - } - case ProtoFieldType::TYPE_UINT32: { - const auto *vec = static_cast *>(field_addr); - for (const auto &val : *vec) { - ProtoSize::add_uint32_field(total_size, repeated_fields[i].get_precalced_size(), val, true); + case ProtoFieldType::TYPE_UINT32: { + const auto *vec = static_cast *>(field_addr); + for (const auto &val : *vec) { + ProtoSize::add_uint32_field(total_size, repeated_fields[i].get_precalced_size(), val, true); + } + break; } - break; - } - case ProtoFieldType::TYPE_INT64: { - const auto *vec = static_cast *>(field_addr); - for (const auto &val : *vec) { - ProtoSize::add_int64_field(total_size, repeated_fields[i].get_precalced_size(), val, true); + case ProtoFieldType::TYPE_INT64: { + const auto *vec = static_cast *>(field_addr); + for (const auto &val : *vec) { + ProtoSize::add_int64_field(total_size, repeated_fields[i].get_precalced_size(), val, true); + } + break; } - break; - } - case ProtoFieldType::TYPE_UINT64: { - const auto *vec = static_cast *>(field_addr); - for (const auto &val : *vec) { - ProtoSize::add_uint64_field(total_size, repeated_fields[i].get_precalced_size(), val, true); + case ProtoFieldType::TYPE_UINT64: { + const auto *vec = static_cast *>(field_addr); + for (const auto &val : *vec) { + ProtoSize::add_uint64_field(total_size, repeated_fields[i].get_precalced_size(), val, true); + } + break; } - break; - } - case ProtoFieldType::TYPE_SINT32: { - const auto *vec = static_cast *>(field_addr); - for (const auto &val : *vec) { - ProtoSize::add_sint32_field(total_size, repeated_fields[i].get_precalced_size(), val, true); + case ProtoFieldType::TYPE_SINT32: { + const auto *vec = static_cast *>(field_addr); + for (const auto &val : *vec) { + ProtoSize::add_sint32_field(total_size, repeated_fields[i].get_precalced_size(), val, true); + } + break; } - break; - } - case ProtoFieldType::TYPE_SINT64: { - const auto *vec = static_cast *>(field_addr); - for (const auto &val : *vec) { - ProtoSize::add_sint64_field(total_size, repeated_fields[i].get_precalced_size(), val, true); + case ProtoFieldType::TYPE_SINT64: { + const auto *vec = static_cast *>(field_addr); + for (const auto &val : *vec) { + ProtoSize::add_sint64_field(total_size, repeated_fields[i].get_precalced_size(), val, true); + } + break; } - break; - } - case ProtoFieldType::TYPE_ENUM: { - const auto *vec = static_cast *>(field_addr); - for (const auto &val : *vec) { - ProtoSize::add_enum_field(total_size, repeated_fields[i].get_precalced_size(), val, true); + case ProtoFieldType::TYPE_ENUM: { + const auto *vec = static_cast *>(field_addr); + for (const auto &val : *vec) { + ProtoSize::add_enum_field(total_size, repeated_fields[i].get_precalced_size(), val, true); + } + break; } - break; - } - case ProtoFieldType::TYPE_STRING: { - const auto *vec = static_cast *>(field_addr); - for (const auto &val : *vec) { - ProtoSize::add_string_field(total_size, repeated_fields[i].get_precalced_size(), val, true); + case ProtoFieldType::TYPE_STRING: { + const auto *vec = static_cast *>(field_addr); + for (const auto &val : *vec) { + ProtoSize::add_string_field(total_size, repeated_fields[i].get_precalced_size(), val, true); + } + break; } - break; - } - case ProtoFieldType::TYPE_FLOAT: { - const auto *vec = static_cast *>(field_addr); - for (const auto &val : *vec) { - ProtoSize::add_fixed_field<4>(total_size, repeated_fields[i].get_precalced_size(), val != 0.0f, true); + case ProtoFieldType::TYPE_BYTES: { + const auto *vec = static_cast *>(field_addr); + for (const auto &val : *vec) { + ProtoSize::add_string_field(total_size, repeated_fields[i].get_precalced_size(), val, true); + } + break; } - break; - } - case ProtoFieldType::TYPE_FIXED32: { - const auto *vec = static_cast *>(field_addr); - size_t count = vec->size(); - if (count > 0) { - total_size += count * (repeated_fields[i].get_precalced_size() + 4); + case ProtoFieldType::TYPE_FLOAT: { + const auto *vec = static_cast *>(field_addr); + for (const auto &val : *vec) { + ProtoSize::add_fixed_field<4>(total_size, repeated_fields[i].get_precalced_size(), val != 0.0f, true); + } + break; } - break; - } - case ProtoFieldType::TYPE_SFIXED32: { - const auto *vec = static_cast *>(field_addr); - size_t count = vec->size(); - if (count > 0) { - total_size += count * (repeated_fields[i].get_precalced_size() + 4); + case ProtoFieldType::TYPE_FIXED32: { + const auto *vec = static_cast *>(field_addr); + size_t count = vec->size(); + if (count > 0) { + total_size += count * (repeated_fields[i].get_precalced_size() + 4); + } + break; } - break; - } - case ProtoFieldType::TYPE_DOUBLE: { - const auto *vec = static_cast *>(field_addr); - for (const auto &val : *vec) { - ProtoSize::add_fixed_field<8>(total_size, repeated_fields[i].get_precalced_size(), val != 0.0, true); + case ProtoFieldType::TYPE_SFIXED32: { + const auto *vec = static_cast *>(field_addr); + size_t count = vec->size(); + if (count > 0) { + total_size += count * (repeated_fields[i].get_precalced_size() + 4); + } + break; } - break; - } - case ProtoFieldType::TYPE_FIXED64: { - const auto *vec = static_cast *>(field_addr); - size_t count = vec->size(); - if (count > 0) { - total_size += count * (repeated_fields[i].get_precalced_size() + 8); + case ProtoFieldType::TYPE_DOUBLE: { + const auto *vec = static_cast *>(field_addr); + for (const auto &val : *vec) { + ProtoSize::add_fixed_field<8>(total_size, repeated_fields[i].get_precalced_size(), val != 0.0, true); + } + break; } - break; - } - case ProtoFieldType::TYPE_SFIXED64: { - const auto *vec = static_cast *>(field_addr); - size_t count = vec->size(); - if (count > 0) { - total_size += count * (repeated_fields[i].get_precalced_size() + 8); + case ProtoFieldType::TYPE_FIXED64: { + const auto *vec = static_cast *>(field_addr); + size_t count = vec->size(); + if (count > 0) { + total_size += count * (repeated_fields[i].get_precalced_size() + 8); + } + break; } - break; - } - case ProtoFieldType::TYPE_MESSAGE: { - // Use repeated message handler registry - if (repeated_fields[i].get_message_type_id() < REPEATED_MESSAGE_HANDLER_COUNT) { - REPEATED_MESSAGE_HANDLERS[repeated_fields[i].get_message_type_id()].size( - total_size, field_addr, repeated_fields[i].get_precalced_size()); + case ProtoFieldType::TYPE_SFIXED64: { + const auto *vec = static_cast *>(field_addr); + size_t count = vec->size(); + if (count > 0) { + total_size += count * (repeated_fields[i].get_precalced_size() + 8); + } + break; + } + case ProtoFieldType::TYPE_MESSAGE: { + // Use repeated message handler registry + if (repeated_fields[i].get_message_type_id() < REPEATED_MESSAGE_HANDLER_COUNT) { + REPEATED_MESSAGE_HANDLERS[repeated_fields[i].get_message_type_id()].size( + total_size, field_addr, repeated_fields[i].get_precalced_size()); + } + break; } - break; } } } diff --git a/esphome/components/api/proto.h b/esphome/components/api/proto.h index ee832bc5c3..516655a75e 100644 --- a/esphome/components/api/proto.h +++ b/esphome/components/api/proto.h @@ -305,24 +305,7 @@ struct FieldMetaV3 { uint8_t get_message_type_id() const { return message_type_id; } }; -// Keep V2 for now during transition -struct FieldMetaV2 { - uint8_t field_num; // Protobuf field number (1-255) - uint16_t offset; // offset of field in class - ProtoFieldType type; // Field type enum - bool force_encode; // If true, encode even if value is default/empty - uint8_t precalced_field_id_size; // Pre-calculated size of field tag in bytes - union { - // For TYPE_MESSAGE: function pointers (12 bytes on ESP32) - struct { - EncodeFunc encode; - SizeFunc size; - DecodeLengthFunc decode; - } message; - // For TYPE_ENUM: enum ID (1 byte) - uint8_t enum_id; - } handler; -}; +// V2 structures removed - we only use V3 now class ProtoWriteBuffer { public: @@ -508,35 +491,13 @@ struct RepeatedFieldMetaV3 { uint8_t get_message_type_id() const { return message_type_id; } }; -// Keep V2 for now during transition -struct RepeatedFieldMetaV2 { - uint8_t field_num; - uint16_t offset; - ProtoFieldType type; // Element type - uint8_t precalced_field_id_size; // Pre-calculated size of field tag in bytes - union { - // For TYPE_MESSAGE: function pointers - struct { - RepeatedEncodeFunc encode; - RepeatedSizeFunc size; - RepeatedDecodeLengthFunc decode; - } message; - // For TYPE_ENUM: enum ID - uint8_t enum_id; - } handler; -}; +// V2 structures removed - we only use V3 now class ProtoMessage { public: virtual ~ProtoMessage() = default; - // V2 metadata getters - must be implemented by derived classes - virtual const FieldMetaV2 *get_field_metadata_v2() const { return nullptr; } - virtual size_t get_field_count_v2() const { return 0; } - virtual const RepeatedFieldMetaV2 *get_repeated_field_metadata_v2() const { return nullptr; } - virtual size_t get_repeated_field_count_v2() const { return 0; } - - // V3 metadata getters - for optimized implementation + // V3 metadata getters - must be implemented by derived classes virtual const FieldMetaV3 *get_field_metadata_v3() const { return nullptr; } virtual size_t get_field_count_v3() const { return 0; } virtual const RepeatedFieldMetaV3 *get_repeated_field_metadata_v3() const { return nullptr; } @@ -617,117 +578,23 @@ class ProtoService { } }; -// Type-specific encoding functions -void encode_string_field(ProtoWriteBuffer &buffer, const void *field_ptr, uint8_t field_num); -void encode_fixed32_field(ProtoWriteBuffer &buffer, const void *field_ptr, uint8_t field_num); -void encode_bool_field(ProtoWriteBuffer &buffer, const void *field_ptr, uint8_t field_num); -void encode_float_field(ProtoWriteBuffer &buffer, const void *field_ptr, uint8_t field_num); -void encode_int32_field(ProtoWriteBuffer &buffer, const void *field_ptr, uint8_t field_num); -void encode_uint32_field(ProtoWriteBuffer &buffer, const void *field_ptr, uint8_t field_num); -void encode_int64_field(ProtoWriteBuffer &buffer, const void *field_ptr, uint8_t field_num); -void encode_uint64_field(ProtoWriteBuffer &buffer, const void *field_ptr, uint8_t field_num); -void encode_sint32_field(ProtoWriteBuffer &buffer, const void *field_ptr, uint8_t field_num); -void encode_sint64_field(ProtoWriteBuffer &buffer, const void *field_ptr, uint8_t field_num); -void encode_fixed64_field(ProtoWriteBuffer &buffer, const void *field_ptr, uint8_t field_num); -void encode_double_field(ProtoWriteBuffer &buffer, const void *field_ptr, uint8_t field_num); -void encode_bytes_field(ProtoWriteBuffer &buffer, const void *field_ptr, uint8_t field_num); +// Type-specific functions removed - V3 inlines all operations directly -// Type-specific decode functions -bool decode_string_field(void *field_ptr, ProtoLengthDelimited value); -bool decode_fixed32_field(void *field_ptr, Proto32Bit value); -bool decode_bool_field(void *field_ptr, ProtoVarInt value); -bool decode_float_field(void *field_ptr, Proto32Bit value); -bool decode_int32_field(void *field_ptr, ProtoVarInt value); -bool decode_uint32_field(void *field_ptr, ProtoVarInt value); -bool decode_int64_field(void *field_ptr, ProtoVarInt value); -bool decode_uint64_field(void *field_ptr, ProtoVarInt value); -bool decode_sint32_field(void *field_ptr, ProtoVarInt value); -bool decode_sint64_field(void *field_ptr, ProtoVarInt value); -bool decode_fixed64_field(void *field_ptr, Proto64Bit value); -bool decode_double_field(void *field_ptr, Proto64Bit value); -bool decode_bytes_field(void *field_ptr, ProtoLengthDelimited value); +// Template enum field functions removed - V3 inlines all operations directly -// Template enum decode function -template bool decode_enum_field(void *field_ptr, ProtoVarInt value); - -// Type-specific size calculation functions -void size_string_field(uint32_t &total_size, const void *field_ptr, uint8_t precalced_field_id_size, bool force); -void size_fixed32_field(uint32_t &total_size, const void *field_ptr, uint8_t precalced_field_id_size, bool force); -void size_bool_field(uint32_t &total_size, const void *field_ptr, uint8_t precalced_field_id_size, bool force); -void size_float_field(uint32_t &total_size, const void *field_ptr, uint8_t precalced_field_id_size, bool force); -void size_int32_field(uint32_t &total_size, const void *field_ptr, uint8_t precalced_field_id_size, bool force); -void size_uint32_field(uint32_t &total_size, const void *field_ptr, uint8_t precalced_field_id_size, bool force); -void size_int64_field(uint32_t &total_size, const void *field_ptr, uint8_t precalced_field_id_size, bool force); -void size_uint64_field(uint32_t &total_size, const void *field_ptr, uint8_t precalced_field_id_size, bool force); -void size_sint32_field(uint32_t &total_size, const void *field_ptr, uint8_t precalced_field_id_size, bool force); -void size_sint64_field(uint32_t &total_size, const void *field_ptr, uint8_t precalced_field_id_size, bool force); -void size_fixed64_field(uint32_t &total_size, const void *field_ptr, uint8_t precalced_field_id_size, bool force); -void size_double_field(uint32_t &total_size, const void *field_ptr, uint8_t precalced_field_id_size, bool force); -void size_bytes_field(uint32_t &total_size, const void *field_ptr, uint8_t precalced_field_id_size, bool force); - -// Template enum field functions -template void encode_enum_field(ProtoWriteBuffer &buffer, const void *field_ptr, uint8_t field_num); - -template -void size_enum_field(uint32_t &total_size, const void *field_ptr, uint8_t precalced_field_id_size, bool force); - -// Repeated field handling functions -void encode_repeated_string_field(ProtoWriteBuffer &buffer, const void *field_ptr, uint8_t field_num); -void encode_repeated_bool_field(ProtoWriteBuffer &buffer, const void *field_ptr, uint8_t field_num); -void encode_repeated_uint32_field(ProtoWriteBuffer &buffer, const void *field_ptr, uint8_t field_num); -void encode_repeated_int32_field(ProtoWriteBuffer &buffer, const void *field_ptr, uint8_t field_num); -void encode_repeated_uint64_field(ProtoWriteBuffer &buffer, const void *field_ptr, uint8_t field_num); -void encode_repeated_int64_field(ProtoWriteBuffer &buffer, const void *field_ptr, uint8_t field_num); -void encode_repeated_sint32_field(ProtoWriteBuffer &buffer, const void *field_ptr, uint8_t field_num); -void encode_repeated_sint64_field(ProtoWriteBuffer &buffer, const void *field_ptr, uint8_t field_num); -void encode_repeated_fixed32_field(ProtoWriteBuffer &buffer, const void *field_ptr, uint8_t field_num); -void encode_repeated_fixed64_field(ProtoWriteBuffer &buffer, const void *field_ptr, uint8_t field_num); -void encode_repeated_float_field(ProtoWriteBuffer &buffer, const void *field_ptr, uint8_t field_num); -void encode_repeated_double_field(ProtoWriteBuffer &buffer, const void *field_ptr, uint8_t field_num); - -template -void encode_repeated_enum_field(ProtoWriteBuffer &buffer, const void *field_ptr, uint8_t field_num); +// Repeated field handling functions removed - V3 inlines encoding directly +// Note: The template encode_repeated_message_field is still used by the message handler registry template void encode_repeated_message_field(ProtoWriteBuffer &buffer, const void *field_ptr, uint8_t field_num); -// Size calculation for repeated fields -void size_repeated_string_field(uint32_t &total_size, const void *field_ptr, uint8_t precalced_field_id_size); -void size_repeated_bool_field(uint32_t &total_size, const void *field_ptr, uint8_t precalced_field_id_size); -void size_repeated_uint32_field(uint32_t &total_size, const void *field_ptr, uint8_t precalced_field_id_size); -void size_repeated_int32_field(uint32_t &total_size, const void *field_ptr, uint8_t precalced_field_id_size); -void size_repeated_uint64_field(uint32_t &total_size, const void *field_ptr, uint8_t precalced_field_id_size); -void size_repeated_int64_field(uint32_t &total_size, const void *field_ptr, uint8_t precalced_field_id_size); -void size_repeated_sint32_field(uint32_t &total_size, const void *field_ptr, uint8_t precalced_field_id_size); -void size_repeated_sint64_field(uint32_t &total_size, const void *field_ptr, uint8_t precalced_field_id_size); -void size_repeated_fixed32_field(uint32_t &total_size, const void *field_ptr, uint8_t precalced_field_id_size); -void size_repeated_fixed64_field(uint32_t &total_size, const void *field_ptr, uint8_t precalced_field_id_size); -void size_repeated_float_field(uint32_t &total_size, const void *field_ptr, uint8_t precalced_field_id_size); -void size_repeated_double_field(uint32_t &total_size, const void *field_ptr, uint8_t precalced_field_id_size); - -template -void size_repeated_enum_field(uint32_t &total_size, const void *field_ptr, uint8_t precalced_field_id_size); +// Size calculation for repeated fields removed - V3 inlines size calculation directly +// Note: The template size_repeated_message_field is still used by the message handler registry template void size_repeated_message_field(uint32_t &total_size, const void *field_ptr, uint8_t precalced_field_id_size); -// Repeated field decode functions -bool decode_repeated_string_field(void *field_ptr, ProtoLengthDelimited value); -bool decode_repeated_bool_field(void *field_ptr, ProtoVarInt value); -bool decode_repeated_uint32_field(void *field_ptr, ProtoVarInt value); -bool decode_repeated_int32_field(void *field_ptr, ProtoVarInt value); -bool decode_repeated_uint64_field(void *field_ptr, ProtoVarInt value); -bool decode_repeated_int64_field(void *field_ptr, ProtoVarInt value); -bool decode_repeated_sint32_field(void *field_ptr, ProtoVarInt value); -bool decode_repeated_sint64_field(void *field_ptr, ProtoVarInt value); -bool decode_repeated_fixed32_field(void *field_ptr, Proto32Bit value); -bool decode_repeated_fixed64_field(void *field_ptr, Proto64Bit value); -bool decode_repeated_float_field(void *field_ptr, Proto32Bit value); -bool decode_repeated_double_field(void *field_ptr, Proto64Bit value); - -template bool decode_repeated_enum_field(void *field_ptr, ProtoVarInt value); - -template bool decode_repeated_message_field(void *field_ptr, ProtoLengthDelimited value); +// Repeated field decode functions removed - V3 inlines decoding directly // Forward declarations for message field template functions template @@ -736,7 +603,7 @@ void encode_message_field(ProtoWriteBuffer &buffer, const void *field_ptr, uint8 template void size_message_field(uint32_t &total_size, const void *field_ptr, uint8_t precalced_field_id_size, bool force); -template bool decode_message_field(void *field_ptr, ProtoLengthDelimited value); +// Template decode functions removed - V3 inlines decoding directly template void encode_repeated_message_field(ProtoWriteBuffer &buffer, const void *field_ptr, uint8_t field_num); diff --git a/script/api_protobuf/api_protobuf.py b/script/api_protobuf/api_protobuf.py index 59b7f47bad..bf4988582b 100755 --- a/script/api_protobuf/api_protobuf.py +++ b/script/api_protobuf/api_protobuf.py @@ -32,7 +32,11 @@ class WireType(IntEnum): # Message type registry - maps message names to type IDs MESSAGE_TYPE_REGISTRY = {} -NEXT_MESSAGE_TYPE_ID = 1 +NEXT_MESSAGE_TYPE_ID = 0 # Start at 0 for array indexing + +# Repeated message type registry - separate from regular messages +REPEATED_MESSAGE_TYPE_REGISTRY = {} +NEXT_REPEATED_MESSAGE_TYPE_ID = 0 # Start at 0 for array indexing def get_message_type_id(message_name): @@ -44,6 +48,15 @@ def get_message_type_id(message_name): return MESSAGE_TYPE_REGISTRY[message_name] +def get_repeated_message_type_id(message_name): + """Get or assign a type ID for a repeated message type.""" + global NEXT_REPEATED_MESSAGE_TYPE_ID + if message_name not in REPEATED_MESSAGE_TYPE_REGISTRY: + REPEATED_MESSAGE_TYPE_REGISTRY[message_name] = NEXT_REPEATED_MESSAGE_TYPE_ID + NEXT_REPEATED_MESSAGE_TYPE_ID += 1 + return REPEATED_MESSAGE_TYPE_REGISTRY[message_name] + + # Mapping from protobuf types to our ProtoFieldType enum PROTO_TYPE_MAP = { descriptor.FieldDescriptorProto.TYPE_BOOL: "ProtoFieldType::TYPE_BOOL", @@ -65,6 +78,27 @@ PROTO_TYPE_MAP = { descriptor.FieldDescriptorProto.TYPE_SFIXED64: "ProtoFieldType::TYPE_SFIXED64", } +# Mapping from protobuf types to numeric values (must match proto.h enum) +PROTO_TYPE_NUM_MAP = { + descriptor.FieldDescriptorProto.TYPE_BOOL: 0, + descriptor.FieldDescriptorProto.TYPE_INT32: 1, + descriptor.FieldDescriptorProto.TYPE_UINT32: 2, + descriptor.FieldDescriptorProto.TYPE_INT64: 3, + descriptor.FieldDescriptorProto.TYPE_UINT64: 4, + descriptor.FieldDescriptorProto.TYPE_SINT32: 5, + descriptor.FieldDescriptorProto.TYPE_SINT64: 6, + descriptor.FieldDescriptorProto.TYPE_ENUM: 7, + descriptor.FieldDescriptorProto.TYPE_STRING: 8, + descriptor.FieldDescriptorProto.TYPE_BYTES: 9, + descriptor.FieldDescriptorProto.TYPE_MESSAGE: 10, + descriptor.FieldDescriptorProto.TYPE_FLOAT: 11, + descriptor.FieldDescriptorProto.TYPE_FIXED32: 12, + descriptor.FieldDescriptorProto.TYPE_SFIXED32: 13, + descriptor.FieldDescriptorProto.TYPE_DOUBLE: 14, + descriptor.FieldDescriptorProto.TYPE_FIXED64: 15, + descriptor.FieldDescriptorProto.TYPE_SFIXED64: 16, +} + # Generate with # protoc --python_out=script/api_protobuf -I esphome/components/api/ api_options.proto @@ -1290,90 +1324,83 @@ def build_message_type( # Generate metadata arrays for all classes using metadata approach regular_fields = [] repeated_fields = [] + regular_fields_v3 = [] + repeated_fields_v3 = [] metadata_info = None if use_metadata: - # Generate V2 metadata + # V2 metadata generation removed - we only use V3 now + # Skip the old V2 generation code from lines 1322-1397 + + # Generate V3 metadata for field in desc.field: if field.label == 3: # Repeated field ti = RepeatedTypeInfo(field) field_type = PROTO_TYPE_MAP.get(field.type, None) if field_type: field_tag_size = ti.calculate_field_id_size() + # Pack type and size into type_and_size byte + type_num = PROTO_TYPE_NUM_MAP.get(field.type, 0) + type_and_size = (type_num & 0x1F) | ((field_tag_size - 1) << 5) + if field.type == descriptor.FieldDescriptorProto.TYPE_MESSAGE: - # For messages, generate function pointers - repeated_fields.append( - f"{{{field.number}, PROTO_FIELD_OFFSET({desc.name}, {ti.field_name}), " - f"{field_type}, {field_tag_size}, " - f"{{.message = {{&encode_repeated_message_field<{ti._ti.type_name}>, " - f"&size_repeated_message_field<{ti._ti.type_name}>, " - f"&decode_repeated_message_field<{ti._ti.type_name}>}}}}}}" + # For messages, use offset_low and message_type_id + message_type_id = get_repeated_message_type_id(ti._ti.type_name) + offset = f"PROTO_FIELD_OFFSET({desc.name}, {ti.field_name})" + repeated_fields_v3.append( + f"{{{field.number}, {type_and_size}, {{.offset_low = static_cast({offset}), .message_type_id = {message_type_id}}}}}" ) else: - # Non-message types don't need handler info - repeated_fields.append( - f"{{{field.number}, PROTO_FIELD_OFFSET({desc.name}, {ti.field_name}), " - f"{field_type}, {field_tag_size}, {{}}}}" + # Non-message types use full offset + repeated_fields_v3.append( + f"{{{field.number}, {type_and_size}, {{.offset = PROTO_FIELD_OFFSET({desc.name}, {ti.field_name})}}}}" ) - elif isinstance(ti._ti, EnumType): - enum_type_id = get_message_type_id(ti._ti.type_name) - repeated_fields.append( - f"{{{field.number}, PROTO_FIELD_OFFSET({desc.name}, {ti.field_name}), " - f"ProtoFieldType::TYPE_ENUM, {ti.calculate_field_id_size()}, {{.enum_id = {enum_type_id}}}}}" - ) - elif isinstance(ti._ti, MessageType): - repeated_fields.append( - f"{{{field.number}, PROTO_FIELD_OFFSET({desc.name}, {ti.field_name}), " - f"ProtoFieldType::TYPE_MESSAGE, {ti.calculate_field_id_size()}, " - f"{{.message = {{&encode_repeated_message_field<{ti._ti.type_name}>, " - f"&size_repeated_message_field<{ti._ti.type_name}>, " - f"&decode_repeated_message_field<{ti._ti.type_name}>}}}}}}" - ) else: ti = TYPE_INFO[field.type](field) field_type = PROTO_TYPE_MAP.get(field.type, None) - force = "true" if field.label == 2 else "false" # Required fields if field_type: field_tag_size = ti.calculate_field_id_size() + # Pack type and size into type_and_size byte + type_num = PROTO_TYPE_NUM_MAP.get(field.type, 0) + type_and_size = (type_num & 0x1F) | ((field_tag_size - 1) << 5) + if field.type == descriptor.FieldDescriptorProto.TYPE_MESSAGE: - # For messages, generate function pointers - regular_fields.append( - f"{{{field.number}, PROTO_FIELD_OFFSET({desc.name}, {ti.field_name}), " - f"{field_type}, {force}, {field_tag_size}, " - f"{{.message = {{&encode_message_field<{ti.type_name}>, " - f"&size_message_field<{ti.type_name}>, " - f"&decode_message_field<{ti.type_name}>}}}}}}" + # For messages, use offset_low and message_type_id + message_type_id = get_message_type_id(ti.type_name) + offset = f"PROTO_FIELD_OFFSET({desc.name}, {ti.field_name})" + # Check if offset fits in 8 bits + regular_fields_v3.append( + f"{{{field.number}, {type_and_size}, {{.offset_low = static_cast({offset}), .message_type_id = {message_type_id}}}}}" ) else: - # Non-message types don't need handler info - regular_fields.append( - f"{{{field.number}, PROTO_FIELD_OFFSET({desc.name}, {ti.field_name}), " - f"{field_type}, {force}, {field_tag_size}, {{}}}}" + # Non-message types use full offset + regular_fields_v3.append( + f"{{{field.number}, {type_and_size}, {{.offset = PROTO_FIELD_OFFSET({desc.name}, {ti.field_name})}}}}" ) elif isinstance(ti, EnumType): field_tag_size = ti.calculate_field_id_size() - # For enums, use the enum name as type ID - enum_type_id = get_message_type_id(ti.type_name) - regular_fields.append( - f"{{{field.number}, PROTO_FIELD_OFFSET({desc.name}, {ti.field_name}), " - f"ProtoFieldType::TYPE_ENUM, {force}, {field_tag_size}, {{.enum_id = {enum_type_id}}}}}" + # Enums are TYPE_ENUM (7) + type_and_size = (7 & 0x1F) | ((field_tag_size - 1) << 5) + regular_fields_v3.append( + f"{{{field.number}, {type_and_size}, {{.offset = PROTO_FIELD_OFFSET({desc.name}, {ti.field_name})}}}}" ) elif isinstance(ti, MessageType): field_tag_size = ti.calculate_field_id_size() - # For messages, generate function pointers - regular_fields.append( - f"{{{field.number}, PROTO_FIELD_OFFSET({desc.name}, {ti.field_name}), " - f"ProtoFieldType::TYPE_MESSAGE, {force}, {field_tag_size}, " - f"{{.message = {{&encode_message_field<{ti.type_name}>, " - f"&size_message_field<{ti.type_name}>, " - f"&decode_message_field<{ti.type_name}>}}}}}}" + # Messages are TYPE_MESSAGE (10) + type_and_size = (10 & 0x1F) | ((field_tag_size - 1) << 5) + message_type_id = get_message_type_id(ti.type_name) + offset = f"PROTO_FIELD_OFFSET({desc.name}, {ti.field_name})" + regular_fields_v3.append( + f"{{{field.number}, {type_and_size}, {{.offset_low = static_cast({offset}), .message_type_id = {message_type_id}}}}}" ) # Store metadata info for later generation outside the class metadata_info = { "regular_fields": regular_fields, "repeated_fields": repeated_fields, + "regular_fields_v3": regular_fields_v3, + "repeated_fields_v3": repeated_fields_v3, "class_name": desc.name, } @@ -1426,51 +1453,53 @@ def build_message_type( # Metadata arrays for classes using metadata are already generated above if use_metadata: - # Add static declarations inside the class (definitions will be in cpp file) - if regular_fields: - public_content.append( - f"static const FieldMetaV2 FIELDS_V2[{len(regular_fields)}];" - ) - public_content.append( - f"static constexpr size_t FIELD_COUNT_V2 = {len(regular_fields)};" - ) - else: - public_content.append("static constexpr size_t FIELD_COUNT_V2 = 0;") + # V2 metadata removed - we only use V3 now - if repeated_fields: + # Add V3 metadata declarations + if regular_fields_v3: public_content.append( - f"static const RepeatedFieldMetaV2 REPEATED_FIELDS_V2[{len(repeated_fields)}];" + f"static const FieldMetaV3 FIELDS_V3[{len(regular_fields_v3)}];" ) public_content.append( - f"static constexpr size_t REPEATED_COUNT_V2 = {len(repeated_fields)};" + f"static constexpr size_t FIELD_COUNT_V3 = {len(regular_fields_v3)};" ) else: - public_content.append("static constexpr size_t REPEATED_COUNT_V2 = 0;") + public_content.append("static constexpr size_t FIELD_COUNT_V3 = 0;") - # Add virtual getter methods that return the metadata - public_content.append("// Virtual metadata getters") - if regular_fields: + if repeated_fields_v3: public_content.append( - "const FieldMetaV2 *get_field_metadata_v2() const override { return FIELDS_V2; }" + f"static const RepeatedFieldMetaV3 REPEATED_FIELDS_V3[{len(repeated_fields_v3)}];" + ) + public_content.append( + f"static constexpr size_t REPEATED_COUNT_V3 = {len(repeated_fields_v3)};" + ) + else: + public_content.append("static constexpr size_t REPEATED_COUNT_V3 = 0;") + + # Add V3 virtual getter methods + public_content.append("// V3 metadata getters") + if regular_fields_v3: + public_content.append( + "const FieldMetaV3 *get_field_metadata_v3() const override { return FIELDS_V3; }" ) else: public_content.append( - "const FieldMetaV2 *get_field_metadata_v2() const override { return nullptr; }" + "const FieldMetaV3 *get_field_metadata_v3() const override { return nullptr; }" ) public_content.append( - "size_t get_field_count_v2() const override { return FIELD_COUNT_V2; }" + "size_t get_field_count_v3() const override { return FIELD_COUNT_V3; }" ) - if repeated_fields: + if repeated_fields_v3: public_content.append( - "const RepeatedFieldMetaV2 *get_repeated_field_metadata_v2() const override { return REPEATED_FIELDS_V2; }" + "const RepeatedFieldMetaV3 *get_repeated_field_metadata_v3() const override { return REPEATED_FIELDS_V3; }" ) else: public_content.append( - "const RepeatedFieldMetaV2 *get_repeated_field_metadata_v2() const override { return nullptr; }" + "const RepeatedFieldMetaV3 *get_repeated_field_metadata_v3() const override { return nullptr; }" ) public_content.append( - "size_t get_repeated_field_count_v2() const override { return REPEATED_COUNT_V2; }" + "size_t get_repeated_field_count_v3() const override { return REPEATED_COUNT_V3; }" ) # Only generate encode method if there are fields to encode @@ -1921,6 +1950,8 @@ namespace api { class_name = meta["class_name"] regular_fields = meta["regular_fields"] repeated_fields = meta["repeated_fields"] + regular_fields_v3 = meta.get("regular_fields_v3", []) + repeated_fields_v3 = meta.get("repeated_fields_v3", []) msg_ifdef = meta["ifdef"] # Handle ifdef changes @@ -1931,20 +1962,22 @@ namespace api { cpp += f"#ifdef {msg_ifdef}\n" current_ifdef = msg_ifdef - # Generate V2 metadata arrays - if regular_fields: - cpp += f"const FieldMetaV2 {class_name}::FIELDS_V2[{len(regular_fields)}] = {{\n" - for i, field in enumerate(regular_fields): - if i < len(regular_fields) - 1: + # V2 metadata arrays removed - we only use V3 now + + # Generate V3 metadata arrays + if regular_fields_v3: + cpp += f"const FieldMetaV3 {class_name}::FIELDS_V3[{len(regular_fields_v3)}] = {{\n" + for i, field in enumerate(regular_fields_v3): + if i < len(regular_fields_v3) - 1: cpp += f" {field},\n" else: cpp += f" {field}\n" cpp += "};\n" - if repeated_fields: - cpp += f"const RepeatedFieldMetaV2 {class_name}::REPEATED_FIELDS_V2[{len(repeated_fields)}] = {{\n" - for i, field in enumerate(repeated_fields): - if i < len(repeated_fields) - 1: + if repeated_fields_v3: + cpp += f"const RepeatedFieldMetaV3 {class_name}::REPEATED_FIELDS_V3[{len(repeated_fields_v3)}] = {{\n" + for i, field in enumerate(repeated_fields_v3): + if i < len(repeated_fields_v3) - 1: cpp += f" {field},\n" else: cpp += f" {field}\n" @@ -1954,6 +1987,136 @@ namespace api { if current_ifdef is not None: cpp += "#endif\n" + # Generate message handler registries for V3 + # We need to track which message types are used and respect their ifdefs + cpp += "\n// Message handler registries for V3\n" + + # Collect message types used in regular and repeated fields + message_types_with_ifdefs = {} + repeated_message_types_with_ifdefs = {} + + # Scan all message descriptors to find which message types are used + for desc in mt: + msg_ifdef = ifdefs.get(desc.name, None) or message_ifdef_map.get( + desc.name, None + ) + + # Check all fields in this message + for field in desc.field: + if field.type == descriptor.FieldDescriptorProto.TYPE_MESSAGE: + # Get the message type name (strip leading dot if present) + msg_type_name = field.type_name.lstrip(".") + + # Get the ifdef for the message type itself + msg_type_ifdef = ifdefs.get( + msg_type_name, None + ) or message_ifdef_map.get(msg_type_name, None) + + # Use the most specific ifdef available + final_ifdef = msg_type_ifdef or msg_ifdef + + if field.label == descriptor.FieldDescriptorProto.LABEL_REPEATED: + # This is a repeated message field + if msg_type_name not in repeated_message_types_with_ifdefs: + repeated_message_types_with_ifdefs[msg_type_name] = final_ifdef + elif ( + final_ifdef + and not repeated_message_types_with_ifdefs[msg_type_name] + ): + # Update if we found a more specific ifdef + repeated_message_types_with_ifdefs[msg_type_name] = final_ifdef + # This is a regular message field + elif msg_type_name not in message_types_with_ifdefs: + message_types_with_ifdefs[msg_type_name] = final_ifdef + elif final_ifdef and not message_types_with_ifdefs[msg_type_name]: + # Update if we found a more specific ifdef + message_types_with_ifdefs[msg_type_name] = final_ifdef + + # Sort message types for consistent ordering + sorted_message_types = sorted(message_types_with_ifdefs.keys()) + sorted_repeated_message_types = sorted(repeated_message_types_with_ifdefs.keys()) + + # Assign consistent IDs to message types + message_type_to_id = {} + for i, msg_type in enumerate(sorted_message_types): + message_type_to_id[msg_type] = i + + # Assign consistent IDs to repeated message types + repeated_message_type_to_id = {} + for i, msg_type in enumerate(sorted_repeated_message_types): + repeated_message_type_to_id[msg_type] = i + + # Sort message types by their assigned IDs to match the metadata + sorted_message_types_by_id = sorted( + MESSAGE_TYPE_REGISTRY.keys(), key=lambda x: MESSAGE_TYPE_REGISTRY[x] + ) + sorted_repeated_message_types_by_id = sorted( + REPEATED_MESSAGE_TYPE_REGISTRY.keys(), + key=lambda x: REPEATED_MESSAGE_TYPE_REGISTRY[x], + ) + + # Generate MESSAGE_HANDLERS array with proper ifdefs + cpp += f"const MessageHandler MESSAGE_HANDLERS[{len(MESSAGE_TYPE_REGISTRY) or 1}] = {{\n" + + # Generate entries in ID order + for msg_type in sorted_message_types_by_id: + if msg_type not in message_types_with_ifdefs: + # This message type is not used in regular fields, add null entry + cpp += " {nullptr, nullptr, nullptr},\n" + continue + + msg_ifdef = message_types_with_ifdefs[msg_type] + + # Each array element is independently ifdef'd + if msg_ifdef is not None: + cpp += f"#ifdef {msg_ifdef}\n" + + cpp += f" {{&encode_message_field<{msg_type}>, &size_message_field<{msg_type}>, &decode_message_field<{msg_type}>}}," + + # Add else clause to fill array slot when ifdef is not defined + if msg_ifdef is not None: + cpp += "\n#else\n {nullptr, nullptr, nullptr}," + cpp += "\n#endif" + + cpp += "\n" + + # Remove trailing comma and close array + if cpp.endswith(",\n"): + cpp = cpp[:-2] + "\n" + cpp += "};\n" + cpp += f"const size_t MESSAGE_HANDLER_COUNT = {len(MESSAGE_TYPE_REGISTRY)};\n" + + # Generate REPEATED_MESSAGE_HANDLERS array with same approach + cpp += f"\nconst RepeatedMessageHandler REPEATED_MESSAGE_HANDLERS[{len(REPEATED_MESSAGE_TYPE_REGISTRY) or 1}] = {{\n" + + # Generate entries in ID order + for msg_type in sorted_repeated_message_types_by_id: + if msg_type not in repeated_message_types_with_ifdefs: + # This message type is not used in repeated fields, add null entry + cpp += " {nullptr, nullptr, nullptr},\n" + continue + + msg_ifdef = repeated_message_types_with_ifdefs[msg_type] + + # Each array element is independently ifdef'd + if msg_ifdef is not None: + cpp += f"#ifdef {msg_ifdef}\n" + + cpp += f" {{&encode_repeated_message_field<{msg_type}>, &size_repeated_message_field<{msg_type}>, &decode_repeated_message_field<{msg_type}>}}," + + # Add else clause to fill array slot when ifdef is not defined + if msg_ifdef is not None: + cpp += "\n#else\n {nullptr, nullptr, nullptr}," + cpp += "\n#endif" + + cpp += "\n" + + # Remove trailing comma and close array + if cpp.endswith(",\n"): + cpp = cpp[:-2] + "\n" + cpp += "};\n" + cpp += f"const size_t REPEATED_MESSAGE_HANDLER_COUNT = {len(REPEATED_MESSAGE_TYPE_REGISTRY)};\n" + cpp += """\ } // namespace api