# Generated by the protocol buffer compiler.  DO NOT EDIT!
# source: MLDataFormats.proto

import sys
_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1'))
from google.protobuf import descriptor as _descriptor
from google.protobuf import message as _message
from google.protobuf import reflection as _reflection
from google.protobuf import symbol_database as _symbol_database
from google.protobuf import descriptor_pb2
# @@protoc_insertion_point(imports)

_sym_db = _symbol_database.Default()




DESCRIPTOR = _descriptor.FileDescriptor(
  name='MLDataFormats.proto',
  package='',
  serialized_pb=_b('\n\x13MLDataFormats.proto\"\xc9\x01\n\x11ManagedLedgerInfo\x12\x31\n\nledgerInfo\x18\x01 \x03(\x0b\x32\x1d.ManagedLedgerInfo.LedgerInfo\x12/\n\x12terminatedPosition\x18\x02 \x01(\x0b\x32\x13.NestedPositionInfo\x1aP\n\nLedgerInfo\x12\x10\n\x08ledgerId\x18\x01 \x02(\x03\x12\x0f\n\x07\x65ntries\x18\x02 \x01(\x03\x12\x0c\n\x04size\x18\x03 \x01(\x03\x12\x11\n\ttimestamp\x18\x04 \x01(\x03\"c\n\x0cPositionInfo\x12\x10\n\x08ledgerId\x18\x01 \x02(\x03\x12\x0f\n\x07\x65ntryId\x18\x02 \x02(\x03\x12\x30\n\x19individualDeletedMessages\x18\x03 \x03(\x0b\x32\r.MessageRange\"7\n\x12NestedPositionInfo\x12\x10\n\x08ledgerId\x18\x01 \x02(\x03\x12\x0f\n\x07\x65ntryId\x18\x02 \x02(\x03\"f\n\x0cMessageRange\x12*\n\rlowerEndpoint\x18\x01 \x02(\x0b\x32\x13.NestedPositionInfo\x12*\n\rupperEndpoint\x18\x02 \x02(\x0b\x32\x13.NestedPositionInfo\"\x95\x01\n\x11ManagedCursorInfo\x12\x17\n\x0f\x63ursorsLedgerId\x18\x01 \x02(\x03\x12\x1a\n\x12markDeleteLedgerId\x18\x02 \x01(\x03\x12\x19\n\x11markDeleteEntryId\x18\x03 \x01(\x03\x12\x30\n\x19individualDeletedMessages\x18\x04 \x03(\x0b\x32\r.MessageRangeB\'\n#org.apache.bookkeeper.mledger.protoH\x01')
)
_sym_db.RegisterFileDescriptor(DESCRIPTOR)




_MANAGEDLEDGERINFO_LEDGERINFO = _descriptor.Descriptor(
  name='LedgerInfo',
  full_name='ManagedLedgerInfo.LedgerInfo',
  filename=None,
  file=DESCRIPTOR,
  containing_type=None,
  fields=[
    _descriptor.FieldDescriptor(
      name='ledgerId', full_name='ManagedLedgerInfo.LedgerInfo.ledgerId', index=0,
      number=1, type=3, cpp_type=2, label=2,
      has_default_value=False, default_value=0,
      message_type=None, enum_type=None, containing_type=None,
      is_extension=False, extension_scope=None,
      options=None),
    _descriptor.FieldDescriptor(
      name='entries', full_name='ManagedLedgerInfo.LedgerInfo.entries', index=1,
      number=2, type=3, cpp_type=2, label=1,
      has_default_value=False, default_value=0,
      message_type=None, enum_type=None, containing_type=None,
      is_extension=False, extension_scope=None,
      options=None),
    _descriptor.FieldDescriptor(
      name='size', full_name='ManagedLedgerInfo.LedgerInfo.size', index=2,
      number=3, type=3, cpp_type=2, label=1,
      has_default_value=False, default_value=0,
      message_type=None, enum_type=None, containing_type=None,
      is_extension=False, extension_scope=None,
      options=None),
    _descriptor.FieldDescriptor(
      name='timestamp', full_name='ManagedLedgerInfo.LedgerInfo.timestamp', index=3,
      number=4, type=3, cpp_type=2, label=1,
      has_default_value=False, default_value=0,
      message_type=None, enum_type=None, containing_type=None,
      is_extension=False, extension_scope=None,
      options=None),
  ],
  extensions=[
  ],
  nested_types=[],
  enum_types=[
  ],
  options=None,
  is_extendable=False,
  extension_ranges=[],
  oneofs=[
  ],
  serialized_start=145,
  serialized_end=225,
)

_MANAGEDLEDGERINFO = _descriptor.Descriptor(
  name='ManagedLedgerInfo',
  full_name='ManagedLedgerInfo',
  filename=None,
  file=DESCRIPTOR,
  containing_type=None,
  fields=[
    _descriptor.FieldDescriptor(
      name='ledgerInfo', full_name='ManagedLedgerInfo.ledgerInfo', index=0,
      number=1, type=11, cpp_type=10, label=3,
      has_default_value=False, default_value=[],
      message_type=None, enum_type=None, containing_type=None,
      is_extension=False, extension_scope=None,
      options=None),
    _descriptor.FieldDescriptor(
      name='terminatedPosition', full_name='ManagedLedgerInfo.terminatedPosition', index=1,
      number=2, type=11, cpp_type=10, label=1,
      has_default_value=False, default_value=None,
      message_type=None, enum_type=None, containing_type=None,
      is_extension=False, extension_scope=None,
      options=None),
  ],
  extensions=[
  ],
  nested_types=[_MANAGEDLEDGERINFO_LEDGERINFO, ],
  enum_types=[
  ],
  options=None,
  is_extendable=False,
  extension_ranges=[],
  oneofs=[
  ],
  serialized_start=24,
  serialized_end=225,
)


_POSITIONINFO = _descriptor.Descriptor(
  name='PositionInfo',
  full_name='PositionInfo',
  filename=None,
  file=DESCRIPTOR,
  containing_type=None,
  fields=[
    _descriptor.FieldDescriptor(
      name='ledgerId', full_name='PositionInfo.ledgerId', index=0,
      number=1, type=3, cpp_type=2, label=2,
      has_default_value=False, default_value=0,
      message_type=None, enum_type=None, containing_type=None,
      is_extension=False, extension_scope=None,
      options=None),
    _descriptor.FieldDescriptor(
      name='entryId', full_name='PositionInfo.entryId', index=1,
      number=2, type=3, cpp_type=2, label=2,
      has_default_value=False, default_value=0,
      message_type=None, enum_type=None, containing_type=None,
      is_extension=False, extension_scope=None,
      options=None),
    _descriptor.FieldDescriptor(
      name='individualDeletedMessages', full_name='PositionInfo.individualDeletedMessages', index=2,
      number=3, type=11, cpp_type=10, label=3,
      has_default_value=False, default_value=[],
      message_type=None, enum_type=None, containing_type=None,
      is_extension=False, extension_scope=None,
      options=None),
  ],
  extensions=[
  ],
  nested_types=[],
  enum_types=[
  ],
  options=None,
  is_extendable=False,
  extension_ranges=[],
  oneofs=[
  ],
  serialized_start=227,
  serialized_end=326,
)


_NESTEDPOSITIONINFO = _descriptor.Descriptor(
  name='NestedPositionInfo',
  full_name='NestedPositionInfo',
  filename=None,
  file=DESCRIPTOR,
  containing_type=None,
  fields=[
    _descriptor.FieldDescriptor(
      name='ledgerId', full_name='NestedPositionInfo.ledgerId', index=0,
      number=1, type=3, cpp_type=2, label=2,
      has_default_value=False, default_value=0,
      message_type=None, enum_type=None, containing_type=None,
      is_extension=False, extension_scope=None,
      options=None),
    _descriptor.FieldDescriptor(
      name='entryId', full_name='NestedPositionInfo.entryId', index=1,
      number=2, type=3, cpp_type=2, label=2,
      has_default_value=False, default_value=0,
      message_type=None, enum_type=None, containing_type=None,
      is_extension=False, extension_scope=None,
      options=None),
  ],
  extensions=[
  ],
  nested_types=[],
  enum_types=[
  ],
  options=None,
  is_extendable=False,
  extension_ranges=[],
  oneofs=[
  ],
  serialized_start=328,
  serialized_end=383,
)


_MESSAGERANGE = _descriptor.Descriptor(
  name='MessageRange',
  full_name='MessageRange',
  filename=None,
  file=DESCRIPTOR,
  containing_type=None,
  fields=[
    _descriptor.FieldDescriptor(
      name='lowerEndpoint', full_name='MessageRange.lowerEndpoint', index=0,
      number=1, type=11, cpp_type=10, label=2,
      has_default_value=False, default_value=None,
      message_type=None, enum_type=None, containing_type=None,
      is_extension=False, extension_scope=None,
      options=None),
    _descriptor.FieldDescriptor(
      name='upperEndpoint', full_name='MessageRange.upperEndpoint', index=1,
      number=2, type=11, cpp_type=10, label=2,
      has_default_value=False, default_value=None,
      message_type=None, enum_type=None, containing_type=None,
      is_extension=False, extension_scope=None,
      options=None),
  ],
  extensions=[
  ],
  nested_types=[],
  enum_types=[
  ],
  options=None,
  is_extendable=False,
  extension_ranges=[],
  oneofs=[
  ],
  serialized_start=385,
  serialized_end=487,
)


_MANAGEDCURSORINFO = _descriptor.Descriptor(
  name='ManagedCursorInfo',
  full_name='ManagedCursorInfo',
  filename=None,
  file=DESCRIPTOR,
  containing_type=None,
  fields=[
    _descriptor.FieldDescriptor(
      name='cursorsLedgerId', full_name='ManagedCursorInfo.cursorsLedgerId', index=0,
      number=1, type=3, cpp_type=2, label=2,
      has_default_value=False, default_value=0,
      message_type=None, enum_type=None, containing_type=None,
      is_extension=False, extension_scope=None,
      options=None),
    _descriptor.FieldDescriptor(
      name='markDeleteLedgerId', full_name='ManagedCursorInfo.markDeleteLedgerId', index=1,
      number=2, type=3, cpp_type=2, label=1,
      has_default_value=False, default_value=0,
      message_type=None, enum_type=None, containing_type=None,
      is_extension=False, extension_scope=None,
      options=None),
    _descriptor.FieldDescriptor(
      name='markDeleteEntryId', full_name='ManagedCursorInfo.markDeleteEntryId', index=2,
      number=3, type=3, cpp_type=2, label=1,
      has_default_value=False, default_value=0,
      message_type=None, enum_type=None, containing_type=None,
      is_extension=False, extension_scope=None,
      options=None),
    _descriptor.FieldDescriptor(
      name='individualDeletedMessages', full_name='ManagedCursorInfo.individualDeletedMessages', index=3,
      number=4, type=11, cpp_type=10, label=3,
      has_default_value=False, default_value=[],
      message_type=None, enum_type=None, containing_type=None,
      is_extension=False, extension_scope=None,
      options=None),
  ],
  extensions=[
  ],
  nested_types=[],
  enum_types=[
  ],
  options=None,
  is_extendable=False,
  extension_ranges=[],
  oneofs=[
  ],
  serialized_start=490,
  serialized_end=639,
)

_MANAGEDLEDGERINFO_LEDGERINFO.containing_type = _MANAGEDLEDGERINFO
_MANAGEDLEDGERINFO.fields_by_name['ledgerInfo'].message_type = _MANAGEDLEDGERINFO_LEDGERINFO
_MANAGEDLEDGERINFO.fields_by_name['terminatedPosition'].message_type = _NESTEDPOSITIONINFO
_POSITIONINFO.fields_by_name['individualDeletedMessages'].message_type = _MESSAGERANGE
_MESSAGERANGE.fields_by_name['lowerEndpoint'].message_type = _NESTEDPOSITIONINFO
_MESSAGERANGE.fields_by_name['upperEndpoint'].message_type = _NESTEDPOSITIONINFO
_MANAGEDCURSORINFO.fields_by_name['individualDeletedMessages'].message_type = _MESSAGERANGE
DESCRIPTOR.message_types_by_name['ManagedLedgerInfo'] = _MANAGEDLEDGERINFO
DESCRIPTOR.message_types_by_name['PositionInfo'] = _POSITIONINFO
DESCRIPTOR.message_types_by_name['NestedPositionInfo'] = _NESTEDPOSITIONINFO
DESCRIPTOR.message_types_by_name['MessageRange'] = _MESSAGERANGE
DESCRIPTOR.message_types_by_name['ManagedCursorInfo'] = _MANAGEDCURSORINFO

ManagedLedgerInfo = _reflection.GeneratedProtocolMessageType('ManagedLedgerInfo', (_message.Message,), dict(

  LedgerInfo = _reflection.GeneratedProtocolMessageType('LedgerInfo', (_message.Message,), dict(
    DESCRIPTOR = _MANAGEDLEDGERINFO_LEDGERINFO,
    __module__ = 'MLDataFormats_pb2'
    # @@protoc_insertion_point(class_scope:ManagedLedgerInfo.LedgerInfo)
    ))
  ,
  DESCRIPTOR = _MANAGEDLEDGERINFO,
  __module__ = 'MLDataFormats_pb2'
  # @@protoc_insertion_point(class_scope:ManagedLedgerInfo)
  ))
_sym_db.RegisterMessage(ManagedLedgerInfo)
_sym_db.RegisterMessage(ManagedLedgerInfo.LedgerInfo)

PositionInfo = _reflection.GeneratedProtocolMessageType('PositionInfo', (_message.Message,), dict(
  DESCRIPTOR = _POSITIONINFO,
  __module__ = 'MLDataFormats_pb2'
  # @@protoc_insertion_point(class_scope:PositionInfo)
  ))
_sym_db.RegisterMessage(PositionInfo)

NestedPositionInfo = _reflection.GeneratedProtocolMessageType('NestedPositionInfo', (_message.Message,), dict(
  DESCRIPTOR = _NESTEDPOSITIONINFO,
  __module__ = 'MLDataFormats_pb2'
  # @@protoc_insertion_point(class_scope:NestedPositionInfo)
  ))
_sym_db.RegisterMessage(NestedPositionInfo)

MessageRange = _reflection.GeneratedProtocolMessageType('MessageRange', (_message.Message,), dict(
  DESCRIPTOR = _MESSAGERANGE,
  __module__ = 'MLDataFormats_pb2'
  # @@protoc_insertion_point(class_scope:MessageRange)
  ))
_sym_db.RegisterMessage(MessageRange)

ManagedCursorInfo = _reflection.GeneratedProtocolMessageType('ManagedCursorInfo', (_message.Message,), dict(
  DESCRIPTOR = _MANAGEDCURSORINFO,
  __module__ = 'MLDataFormats_pb2'
  # @@protoc_insertion_point(class_scope:ManagedCursorInfo)
  ))
_sym_db.RegisterMessage(ManagedCursorInfo)


DESCRIPTOR.has_options = True
DESCRIPTOR._options = _descriptor._ParseOptions(descriptor_pb2.FileOptions(), _b('\n#org.apache.bookkeeper.mledger.protoH\001'))
# @@protoc_insertion_point(module_scope)
