Support max_data_length in get_max_encoded_size for string types

This commit is contained in:
J. Nick Koston
2026-04-08 23:42:08 -10:00
parent 24edb9c98e
commit 1279e6112a
+20
View File
@@ -854,6 +854,16 @@ class StringType(TypeInfo):
def get_estimated_size(self) -> int:
return self.calculate_field_id_size() + 8 # field ID + 8 bytes typical string
def get_max_encoded_size(self) -> int | None:
max_len = self.max_data_length
if max_len is not None:
return (
self.calculate_field_id_size()
+ _varint_max_size(max_len.bit_length())
+ max_len
)
return None # Unbounded
@register_type(11)
class MessageType(TypeInfo):
@@ -1169,6 +1179,16 @@ class PointerToStringBufferType(PointerToBufferTypeBase):
def get_estimated_size(self) -> int:
return self.calculate_field_id_size() + 8 # field ID + 8 bytes typical string
def get_max_encoded_size(self) -> int | None:
max_len = self.max_data_length
if max_len is not None:
return (
self.calculate_field_id_size()
+ _varint_max_size(max_len.bit_length())
+ max_len
)
return None
class PackedBufferTypeInfo(TypeInfo):
"""Type for packed repeated fields that expose raw buffer instead of decoding.