def _varuint64bytesizenotag(uint64):
    """returns the number of bytes required to serialize a single varint
  using boundary value comparisons. (unrolled loop optimization -wpierce)
  uint64 must be unsigned.
  """
    if uint64 <= 0x7F:
        return 1
    if uint64 <= 0x3FFF:
        return 2
    if uint64 <= 0x1FFFFF:
        return 3
    if uint64 <= 0xFFFFFFF:
        return 4
    if uint64 <= 0x7FFFFFFFF:
        return 5
    if uint64 <= 0x3FFFFFFFFFF:
        return 6
    if uint64 <= 0x1FFFFFFFFFFFF:
        return 7
    if uint64 <= 0xFFFFFFFFFFFFFF:
        return 8
    if uint64 <= 0x7FFFFFFFFFFFFFFF:
        return 9
    if uint64 > uint64_max:
        raise message.encodeerror("value out of range: %d" % uint64)
    return 10
 def serializetostring(self):
   # check if the message has all of its required fields set.
   errors = []
   if not self.isinitialized():
     raise message_mod.encodeerror(
         'message %s is missing required fields: %s' % (
         self.descriptor.full_name, ','.join(self.findinitializationerrors())))
   return self.serializepartialtostring()
def packtag(field_number, wire_type):
    """returns an unsigned 32-bit integer that encodes the field number and
  wire type information in standard protocol message wire format.

  args:
    field_number: expected to be an integer in the range [1, 1 << 29)
    wire_type: one of the wiretype_* constants.
  """
    if not 0 <= wire_type <= _wiretype_max:
        raise message.encodeerror("unknown wire type: %d" % wire_type)
    return (field_number << tag_type_bits) | wire_type
def _bytesfornonrepeatedelement(value, field_number, field_type):
  """returns the number of bytes needed to serialize a non-repeated element.
  the returned byte count includes space for tag information and any
  other additional space associated with serializing value.

  args:
    value: value we're serializing.
    field_number: field number of this value.  (since the field number
      is stored as part of a varint-encoded tag, this has an impact
      on the total bytes required to serialize the value).
    field_type: the type of the field.  one of the type_* constants
      within fielddescriptor.
  """
  try:
    fn = type_checkers.type_to_byte_size_fn[field_type]
    return fn(field_number, value)
  except keyerror:
    raise message_mod.encodeerror('unrecognized field type: %d' % field_type)
 def serializetostring(self):
   if not self.isinitialized():
     raise message.encodeerror(
         'message %s is missing required fields: %s' % (
         self._cmsg.full_name, ','.join(self.findinitializationerrors())))
   return self._cmsg.serializetostring()