# Generated by the protocol buffer compiler.  DO NOT EDIT!
# source: test_platform/result_flow/common.proto

import sys
_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1'))
from google.protobuf.internal import enum_type_wrapper
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
# @@protoc_insertion_point(imports)

_sym_db = _symbol_database.Default()




DESCRIPTOR = _descriptor.FileDescriptor(
  name='test_platform/result_flow/common.proto',
  package='test_platform.result_flow',
  syntax='proto3',
  serialized_options=_b('ZCgo.chromium.org/chromiumos/infra/proto/go/test_platform/result_flow'),
  serialized_pb=_b('\n&test_platform/result_flow/common.proto\x12\x19test_platform.result_flow\"d\n\x0cPubSubConfig\x12\x0f\n\x07project\x18\x01 \x01(\t\x12\r\n\x05topic\x18\x02 \x01(\t\x12\x14\n\x0csubscription\x18\x03 \x01(\t\x12\x1e\n\x16max_receiving_messages\x18\x04 \x01(\x05\"S\n\x11\x42uildbucketConfig\x12\x0c\n\x04host\x18\x01 \x01(\t\x12\x0f\n\x07project\x18\x02 \x01(\t\x12\x0e\n\x06\x62ucket\x18\x03 \x01(\t\x12\x0f\n\x07\x62uilder\x18\x04 \x01(\t\"A\n\x0e\x42igqueryConfig\x12\x0f\n\x07project\x18\x01 \x01(\t\x12\x0f\n\x07\x64\x61taset\x18\x02 \x01(\t\x12\r\n\x05table\x18\x03 \x01(\t\"\x8b\x01\n\x06Source\x12\x37\n\x06pubsub\x18\x01 \x01(\x0b\x32\'.test_platform.result_flow.PubSubConfig\x12\x38\n\x02\x62\x62\x18\x02 \x01(\x0b\x32,.test_platform.result_flow.BuildbucketConfig\x12\x0e\n\x06\x66ields\x18\x03 \x03(\t\"?\n\x06Target\x12\x35\n\x02\x62q\x18\x01 \x01(\x0b\x32).test_platform.result_flow.BigqueryConfig*U\n\x05State\x12\x15\n\x11STATE_UNSPECIFIED\x10\x00\x12\r\n\tSUCCEEDED\x10\x01\x12\n\n\x06\x46\x41ILED\x10\x02\x12\r\n\tTIMED_OUT\x10\x03\x12\x0b\n\x07\x41\x42ORTED\x10\x04\x42\x45ZCgo.chromium.org/chromiumos/infra/proto/go/test_platform/result_flowb\x06proto3')
)

_STATE = _descriptor.EnumDescriptor(
  name='State',
  full_name='test_platform.result_flow.State',
  filename=None,
  file=DESCRIPTOR,
  values=[
    _descriptor.EnumValueDescriptor(
      name='STATE_UNSPECIFIED', index=0, number=0,
      serialized_options=None,
      type=None),
    _descriptor.EnumValueDescriptor(
      name='SUCCEEDED', index=1, number=1,
      serialized_options=None,
      type=None),
    _descriptor.EnumValueDescriptor(
      name='FAILED', index=2, number=2,
      serialized_options=None,
      type=None),
    _descriptor.EnumValueDescriptor(
      name='TIMED_OUT', index=3, number=3,
      serialized_options=None,
      type=None),
    _descriptor.EnumValueDescriptor(
      name='ABORTED', index=4, number=4,
      serialized_options=None,
      type=None),
  ],
  containing_type=None,
  serialized_options=None,
  serialized_start=530,
  serialized_end=615,
)
_sym_db.RegisterEnumDescriptor(_STATE)

State = enum_type_wrapper.EnumTypeWrapper(_STATE)
STATE_UNSPECIFIED = 0
SUCCEEDED = 1
FAILED = 2
TIMED_OUT = 3
ABORTED = 4



_PUBSUBCONFIG = _descriptor.Descriptor(
  name='PubSubConfig',
  full_name='test_platform.result_flow.PubSubConfig',
  filename=None,
  file=DESCRIPTOR,
  containing_type=None,
  fields=[
    _descriptor.FieldDescriptor(
      name='project', full_name='test_platform.result_flow.PubSubConfig.project', index=0,
      number=1, type=9, cpp_type=9, label=1,
      has_default_value=False, default_value=_b("").decode('utf-8'),
      message_type=None, enum_type=None, containing_type=None,
      is_extension=False, extension_scope=None,
      serialized_options=None, file=DESCRIPTOR),
    _descriptor.FieldDescriptor(
      name='topic', full_name='test_platform.result_flow.PubSubConfig.topic', index=1,
      number=2, type=9, cpp_type=9, label=1,
      has_default_value=False, default_value=_b("").decode('utf-8'),
      message_type=None, enum_type=None, containing_type=None,
      is_extension=False, extension_scope=None,
      serialized_options=None, file=DESCRIPTOR),
    _descriptor.FieldDescriptor(
      name='subscription', full_name='test_platform.result_flow.PubSubConfig.subscription', index=2,
      number=3, type=9, cpp_type=9, label=1,
      has_default_value=False, default_value=_b("").decode('utf-8'),
      message_type=None, enum_type=None, containing_type=None,
      is_extension=False, extension_scope=None,
      serialized_options=None, file=DESCRIPTOR),
    _descriptor.FieldDescriptor(
      name='max_receiving_messages', full_name='test_platform.result_flow.PubSubConfig.max_receiving_messages', index=3,
      number=4, type=5, cpp_type=1, label=1,
      has_default_value=False, default_value=0,
      message_type=None, enum_type=None, containing_type=None,
      is_extension=False, extension_scope=None,
      serialized_options=None, file=DESCRIPTOR),
  ],
  extensions=[
  ],
  nested_types=[],
  enum_types=[
  ],
  serialized_options=None,
  is_extendable=False,
  syntax='proto3',
  extension_ranges=[],
  oneofs=[
  ],
  serialized_start=69,
  serialized_end=169,
)


_BUILDBUCKETCONFIG = _descriptor.Descriptor(
  name='BuildbucketConfig',
  full_name='test_platform.result_flow.BuildbucketConfig',
  filename=None,
  file=DESCRIPTOR,
  containing_type=None,
  fields=[
    _descriptor.FieldDescriptor(
      name='host', full_name='test_platform.result_flow.BuildbucketConfig.host', index=0,
      number=1, type=9, cpp_type=9, label=1,
      has_default_value=False, default_value=_b("").decode('utf-8'),
      message_type=None, enum_type=None, containing_type=None,
      is_extension=False, extension_scope=None,
      serialized_options=None, file=DESCRIPTOR),
    _descriptor.FieldDescriptor(
      name='project', full_name='test_platform.result_flow.BuildbucketConfig.project', index=1,
      number=2, type=9, cpp_type=9, label=1,
      has_default_value=False, default_value=_b("").decode('utf-8'),
      message_type=None, enum_type=None, containing_type=None,
      is_extension=False, extension_scope=None,
      serialized_options=None, file=DESCRIPTOR),
    _descriptor.FieldDescriptor(
      name='bucket', full_name='test_platform.result_flow.BuildbucketConfig.bucket', index=2,
      number=3, type=9, cpp_type=9, label=1,
      has_default_value=False, default_value=_b("").decode('utf-8'),
      message_type=None, enum_type=None, containing_type=None,
      is_extension=False, extension_scope=None,
      serialized_options=None, file=DESCRIPTOR),
    _descriptor.FieldDescriptor(
      name='builder', full_name='test_platform.result_flow.BuildbucketConfig.builder', index=3,
      number=4, type=9, cpp_type=9, label=1,
      has_default_value=False, default_value=_b("").decode('utf-8'),
      message_type=None, enum_type=None, containing_type=None,
      is_extension=False, extension_scope=None,
      serialized_options=None, file=DESCRIPTOR),
  ],
  extensions=[
  ],
  nested_types=[],
  enum_types=[
  ],
  serialized_options=None,
  is_extendable=False,
  syntax='proto3',
  extension_ranges=[],
  oneofs=[
  ],
  serialized_start=171,
  serialized_end=254,
)


_BIGQUERYCONFIG = _descriptor.Descriptor(
  name='BigqueryConfig',
  full_name='test_platform.result_flow.BigqueryConfig',
  filename=None,
  file=DESCRIPTOR,
  containing_type=None,
  fields=[
    _descriptor.FieldDescriptor(
      name='project', full_name='test_platform.result_flow.BigqueryConfig.project', index=0,
      number=1, type=9, cpp_type=9, label=1,
      has_default_value=False, default_value=_b("").decode('utf-8'),
      message_type=None, enum_type=None, containing_type=None,
      is_extension=False, extension_scope=None,
      serialized_options=None, file=DESCRIPTOR),
    _descriptor.FieldDescriptor(
      name='dataset', full_name='test_platform.result_flow.BigqueryConfig.dataset', index=1,
      number=2, type=9, cpp_type=9, label=1,
      has_default_value=False, default_value=_b("").decode('utf-8'),
      message_type=None, enum_type=None, containing_type=None,
      is_extension=False, extension_scope=None,
      serialized_options=None, file=DESCRIPTOR),
    _descriptor.FieldDescriptor(
      name='table', full_name='test_platform.result_flow.BigqueryConfig.table', index=2,
      number=3, type=9, cpp_type=9, label=1,
      has_default_value=False, default_value=_b("").decode('utf-8'),
      message_type=None, enum_type=None, containing_type=None,
      is_extension=False, extension_scope=None,
      serialized_options=None, file=DESCRIPTOR),
  ],
  extensions=[
  ],
  nested_types=[],
  enum_types=[
  ],
  serialized_options=None,
  is_extendable=False,
  syntax='proto3',
  extension_ranges=[],
  oneofs=[
  ],
  serialized_start=256,
  serialized_end=321,
)


_SOURCE = _descriptor.Descriptor(
  name='Source',
  full_name='test_platform.result_flow.Source',
  filename=None,
  file=DESCRIPTOR,
  containing_type=None,
  fields=[
    _descriptor.FieldDescriptor(
      name='pubsub', full_name='test_platform.result_flow.Source.pubsub', index=0,
      number=1, 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,
      serialized_options=None, file=DESCRIPTOR),
    _descriptor.FieldDescriptor(
      name='bb', full_name='test_platform.result_flow.Source.bb', 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,
      serialized_options=None, file=DESCRIPTOR),
    _descriptor.FieldDescriptor(
      name='fields', full_name='test_platform.result_flow.Source.fields', index=2,
      number=3, type=9, cpp_type=9, label=3,
      has_default_value=False, default_value=[],
      message_type=None, enum_type=None, containing_type=None,
      is_extension=False, extension_scope=None,
      serialized_options=None, file=DESCRIPTOR),
  ],
  extensions=[
  ],
  nested_types=[],
  enum_types=[
  ],
  serialized_options=None,
  is_extendable=False,
  syntax='proto3',
  extension_ranges=[],
  oneofs=[
  ],
  serialized_start=324,
  serialized_end=463,
)


_TARGET = _descriptor.Descriptor(
  name='Target',
  full_name='test_platform.result_flow.Target',
  filename=None,
  file=DESCRIPTOR,
  containing_type=None,
  fields=[
    _descriptor.FieldDescriptor(
      name='bq', full_name='test_platform.result_flow.Target.bq', index=0,
      number=1, 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,
      serialized_options=None, file=DESCRIPTOR),
  ],
  extensions=[
  ],
  nested_types=[],
  enum_types=[
  ],
  serialized_options=None,
  is_extendable=False,
  syntax='proto3',
  extension_ranges=[],
  oneofs=[
  ],
  serialized_start=465,
  serialized_end=528,
)

_SOURCE.fields_by_name['pubsub'].message_type = _PUBSUBCONFIG
_SOURCE.fields_by_name['bb'].message_type = _BUILDBUCKETCONFIG
_TARGET.fields_by_name['bq'].message_type = _BIGQUERYCONFIG
DESCRIPTOR.message_types_by_name['PubSubConfig'] = _PUBSUBCONFIG
DESCRIPTOR.message_types_by_name['BuildbucketConfig'] = _BUILDBUCKETCONFIG
DESCRIPTOR.message_types_by_name['BigqueryConfig'] = _BIGQUERYCONFIG
DESCRIPTOR.message_types_by_name['Source'] = _SOURCE
DESCRIPTOR.message_types_by_name['Target'] = _TARGET
DESCRIPTOR.enum_types_by_name['State'] = _STATE
_sym_db.RegisterFileDescriptor(DESCRIPTOR)

PubSubConfig = _reflection.GeneratedProtocolMessageType('PubSubConfig', (_message.Message,), dict(
  DESCRIPTOR = _PUBSUBCONFIG,
  __module__ = 'test_platform.result_flow.common_pb2'
  # @@protoc_insertion_point(class_scope:test_platform.result_flow.PubSubConfig)
  ))
_sym_db.RegisterMessage(PubSubConfig)

BuildbucketConfig = _reflection.GeneratedProtocolMessageType('BuildbucketConfig', (_message.Message,), dict(
  DESCRIPTOR = _BUILDBUCKETCONFIG,
  __module__ = 'test_platform.result_flow.common_pb2'
  # @@protoc_insertion_point(class_scope:test_platform.result_flow.BuildbucketConfig)
  ))
_sym_db.RegisterMessage(BuildbucketConfig)

BigqueryConfig = _reflection.GeneratedProtocolMessageType('BigqueryConfig', (_message.Message,), dict(
  DESCRIPTOR = _BIGQUERYCONFIG,
  __module__ = 'test_platform.result_flow.common_pb2'
  # @@protoc_insertion_point(class_scope:test_platform.result_flow.BigqueryConfig)
  ))
_sym_db.RegisterMessage(BigqueryConfig)

Source = _reflection.GeneratedProtocolMessageType('Source', (_message.Message,), dict(
  DESCRIPTOR = _SOURCE,
  __module__ = 'test_platform.result_flow.common_pb2'
  # @@protoc_insertion_point(class_scope:test_platform.result_flow.Source)
  ))
_sym_db.RegisterMessage(Source)

Target = _reflection.GeneratedProtocolMessageType('Target', (_message.Message,), dict(
  DESCRIPTOR = _TARGET,
  __module__ = 'test_platform.result_flow.common_pb2'
  # @@protoc_insertion_point(class_scope:test_platform.result_flow.Target)
  ))
_sym_db.RegisterMessage(Target)


DESCRIPTOR._options = None
# @@protoc_insertion_point(module_scope)
