# Generated by the protocol buffer compiler.  DO NOT EDIT!
# source: chromiumos/payload_config.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
# @@protoc_insertion_point(imports)

_sym_db = _symbol_database.Default()




DESCRIPTOR = _descriptor.FileDescriptor(
  name='chromiumos/payload_config.proto',
  package='chromiumos',
  syntax='proto3',
  serialized_options=_b('Z4go.chromium.org/chromiumos/infra/proto/go/chromiumos'),
  serialized_pb=_b('\n\x1f\x63hromiumos/payload_config.proto\x12\nchromiumos\"=\n\rPayloadConfig\x12,\n\x05\x64\x65lta\x18\x01 \x03(\x0b\x32\x1d.chromiumos.PayloadProperties\"\xf1\x03\n\x11PayloadProperties\x12\x32\n\x05\x62oard\x18\x01 \x01(\x0b\x32#.chromiumos.PayloadProperties.Board\x12;\n\ndelta_type\x18\x02 \x01(\x0e\x32\'.chromiumos.PayloadProperties.DeltaType\x12\x0f\n\x07\x63hannel\x18\x03 \x01(\t\x12\x19\n\x11\x63hrome_os_version\x18\x04 \x01(\t\x12\x16\n\x0e\x63hrome_version\x18\x05 \x01(\t\x12\x11\n\tmilestone\x18\x06 \x01(\r\x12\x16\n\x0egenerate_delta\x18\x07 \x01(\x08\x12\x1b\n\x13\x64\x65lta_payload_tests\x18\x08 \x01(\x08\x12\x1a\n\x12\x66ull_payload_tests\x18\t \x01(\x08\x12\x19\n\x11\x61pplicable_models\x18\n \x03(\t\x1aI\n\x05\x42oard\x12\x17\n\x0fpublic_codename\x18\x01 \x01(\t\x12\x11\n\tis_active\x18\x02 \x01(\x08\x12\x14\n\x0c\x62uilder_name\x18\x03 \x01(\t\"]\n\tDeltaType\x12\x0b\n\x07NOT_SET\x10\x00\x12\x0c\n\x08NO_DELTA\x10\x01\x12\t\n\x05OMAHA\x10\x02\x12\x12\n\x0eSTEPPING_STONE\x10\x03\x12\r\n\tMILESTONE\x10\x04\x12\x07\n\x03\x46SI\x10\x05\x42\x36Z4go.chromium.org/chromiumos/infra/proto/go/chromiumosb\x06proto3')
)



_PAYLOADPROPERTIES_DELTATYPE = _descriptor.EnumDescriptor(
  name='DeltaType',
  full_name='chromiumos.PayloadProperties.DeltaType',
  filename=None,
  file=DESCRIPTOR,
  values=[
    _descriptor.EnumValueDescriptor(
      name='NOT_SET', index=0, number=0,
      serialized_options=None,
      type=None),
    _descriptor.EnumValueDescriptor(
      name='NO_DELTA', index=1, number=1,
      serialized_options=None,
      type=None),
    _descriptor.EnumValueDescriptor(
      name='OMAHA', index=2, number=2,
      serialized_options=None,
      type=None),
    _descriptor.EnumValueDescriptor(
      name='STEPPING_STONE', index=3, number=3,
      serialized_options=None,
      type=None),
    _descriptor.EnumValueDescriptor(
      name='MILESTONE', index=4, number=4,
      serialized_options=None,
      type=None),
    _descriptor.EnumValueDescriptor(
      name='FSI', index=5, number=5,
      serialized_options=None,
      type=None),
  ],
  containing_type=None,
  serialized_options=None,
  serialized_start=515,
  serialized_end=608,
)
_sym_db.RegisterEnumDescriptor(_PAYLOADPROPERTIES_DELTATYPE)


_PAYLOADCONFIG = _descriptor.Descriptor(
  name='PayloadConfig',
  full_name='chromiumos.PayloadConfig',
  filename=None,
  file=DESCRIPTOR,
  containing_type=None,
  fields=[
    _descriptor.FieldDescriptor(
      name='delta', full_name='chromiumos.PayloadConfig.delta', 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,
      serialized_options=None, file=DESCRIPTOR),
  ],
  extensions=[
  ],
  nested_types=[],
  enum_types=[
  ],
  serialized_options=None,
  is_extendable=False,
  syntax='proto3',
  extension_ranges=[],
  oneofs=[
  ],
  serialized_start=47,
  serialized_end=108,
)


_PAYLOADPROPERTIES_BOARD = _descriptor.Descriptor(
  name='Board',
  full_name='chromiumos.PayloadProperties.Board',
  filename=None,
  file=DESCRIPTOR,
  containing_type=None,
  fields=[
    _descriptor.FieldDescriptor(
      name='public_codename', full_name='chromiumos.PayloadProperties.Board.public_codename', 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='is_active', full_name='chromiumos.PayloadProperties.Board.is_active', index=1,
      number=2, type=8, cpp_type=7, label=1,
      has_default_value=False, default_value=False,
      message_type=None, enum_type=None, containing_type=None,
      is_extension=False, extension_scope=None,
      serialized_options=None, file=DESCRIPTOR),
    _descriptor.FieldDescriptor(
      name='builder_name', full_name='chromiumos.PayloadProperties.Board.builder_name', 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=440,
  serialized_end=513,
)

_PAYLOADPROPERTIES = _descriptor.Descriptor(
  name='PayloadProperties',
  full_name='chromiumos.PayloadProperties',
  filename=None,
  file=DESCRIPTOR,
  containing_type=None,
  fields=[
    _descriptor.FieldDescriptor(
      name='board', full_name='chromiumos.PayloadProperties.board', 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='delta_type', full_name='chromiumos.PayloadProperties.delta_type', index=1,
      number=2, type=14, cpp_type=8, 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),
    _descriptor.FieldDescriptor(
      name='channel', full_name='chromiumos.PayloadProperties.channel', 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='chrome_os_version', full_name='chromiumos.PayloadProperties.chrome_os_version', 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),
    _descriptor.FieldDescriptor(
      name='chrome_version', full_name='chromiumos.PayloadProperties.chrome_version', index=4,
      number=5, 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='milestone', full_name='chromiumos.PayloadProperties.milestone', index=5,
      number=6, type=13, cpp_type=3, 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),
    _descriptor.FieldDescriptor(
      name='generate_delta', full_name='chromiumos.PayloadProperties.generate_delta', index=6,
      number=7, type=8, cpp_type=7, label=1,
      has_default_value=False, default_value=False,
      message_type=None, enum_type=None, containing_type=None,
      is_extension=False, extension_scope=None,
      serialized_options=None, file=DESCRIPTOR),
    _descriptor.FieldDescriptor(
      name='delta_payload_tests', full_name='chromiumos.PayloadProperties.delta_payload_tests', index=7,
      number=8, type=8, cpp_type=7, label=1,
      has_default_value=False, default_value=False,
      message_type=None, enum_type=None, containing_type=None,
      is_extension=False, extension_scope=None,
      serialized_options=None, file=DESCRIPTOR),
    _descriptor.FieldDescriptor(
      name='full_payload_tests', full_name='chromiumos.PayloadProperties.full_payload_tests', index=8,
      number=9, type=8, cpp_type=7, label=1,
      has_default_value=False, default_value=False,
      message_type=None, enum_type=None, containing_type=None,
      is_extension=False, extension_scope=None,
      serialized_options=None, file=DESCRIPTOR),
    _descriptor.FieldDescriptor(
      name='applicable_models', full_name='chromiumos.PayloadProperties.applicable_models', index=9,
      number=10, 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=[_PAYLOADPROPERTIES_BOARD, ],
  enum_types=[
    _PAYLOADPROPERTIES_DELTATYPE,
  ],
  serialized_options=None,
  is_extendable=False,
  syntax='proto3',
  extension_ranges=[],
  oneofs=[
  ],
  serialized_start=111,
  serialized_end=608,
)

_PAYLOADCONFIG.fields_by_name['delta'].message_type = _PAYLOADPROPERTIES
_PAYLOADPROPERTIES_BOARD.containing_type = _PAYLOADPROPERTIES
_PAYLOADPROPERTIES.fields_by_name['board'].message_type = _PAYLOADPROPERTIES_BOARD
_PAYLOADPROPERTIES.fields_by_name['delta_type'].enum_type = _PAYLOADPROPERTIES_DELTATYPE
_PAYLOADPROPERTIES_DELTATYPE.containing_type = _PAYLOADPROPERTIES
DESCRIPTOR.message_types_by_name['PayloadConfig'] = _PAYLOADCONFIG
DESCRIPTOR.message_types_by_name['PayloadProperties'] = _PAYLOADPROPERTIES
_sym_db.RegisterFileDescriptor(DESCRIPTOR)

PayloadConfig = _reflection.GeneratedProtocolMessageType('PayloadConfig', (_message.Message,), dict(
  DESCRIPTOR = _PAYLOADCONFIG,
  __module__ = 'chromiumos.payload_config_pb2'
  # @@protoc_insertion_point(class_scope:chromiumos.PayloadConfig)
  ))
_sym_db.RegisterMessage(PayloadConfig)

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

  Board = _reflection.GeneratedProtocolMessageType('Board', (_message.Message,), dict(
    DESCRIPTOR = _PAYLOADPROPERTIES_BOARD,
    __module__ = 'chromiumos.payload_config_pb2'
    # @@protoc_insertion_point(class_scope:chromiumos.PayloadProperties.Board)
    ))
  ,
  DESCRIPTOR = _PAYLOADPROPERTIES,
  __module__ = 'chromiumos.payload_config_pb2'
  # @@protoc_insertion_point(class_scope:chromiumos.PayloadProperties)
  ))
_sym_db.RegisterMessage(PayloadProperties)
_sym_db.RegisterMessage(PayloadProperties.Board)


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