# -*- coding: utf-8 -*-
# Generated by the protocol buffer compiler.  DO NOT EDIT!
# source: chromiumos/config/prototype/release_target.proto

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()


from chromite.api.gen_sdk.chromiumos.config.prototype import release_target_id_pb2 as chromiumos_dot_config_dot_prototype_dot_release__target__id__pb2
from chromite.api.gen_sdk.chromiumos.build.api import system_image_pb2 as chromiumos_dot_build_dot_api_dot_system__image__pb2


DESCRIPTOR = _descriptor.FileDescriptor(
  name='chromiumos/config/prototype/release_target.proto',
  package='chromiumos.config.prototype',
  syntax='proto3',
  serialized_options=b'Z.go.chromium.org/chromiumos/config/go/prototype',
  serialized_pb=b'\n0chromiumos/config/prototype/release_target.proto\x12\x1b\x63hromiumos.config.prototype\x1a\x33\x63hromiumos/config/prototype/release_target_id.proto\x1a\'chromiumos/build/api/system_image.proto\"\xd9\x02\n\rReleaseTarget\x12\x38\n\x02id\x18\x01 \x01(\x0b\x32,.chromiumos.config.prototype.ReleaseTargetId\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x42\n\x0bmain_target\x18\x05 \x01(\x0b\x32-.chromiumos.build.api.SystemImage.BuildTarget\x12\x43\n\x0cuprev_target\x18\x06 \x01(\x0b\x32-.chromiumos.build.api.SystemImage.BuildTarget\x12\x43\n\x07signing\x18\x04 \x01(\x0b\x32\x32.chromiumos.config.prototype.ReleaseTarget.Signing\x1a\x32\n\x07Signing\x12\x14\n\x0cpremp_keyset\x18\x01 \x01(\t\x12\x11\n\tmp_keyset\x18\x02 \x01(\tB0Z.go.chromium.org/chromiumos/config/go/prototypeb\x06proto3'
  ,
  dependencies=[chromiumos_dot_config_dot_prototype_dot_release__target__id__pb2.DESCRIPTOR,chromiumos_dot_build_dot_api_dot_system__image__pb2.DESCRIPTOR,])




_RELEASETARGET_SIGNING = _descriptor.Descriptor(
  name='Signing',
  full_name='chromiumos.config.prototype.ReleaseTarget.Signing',
  filename=None,
  file=DESCRIPTOR,
  containing_type=None,
  fields=[
    _descriptor.FieldDescriptor(
      name='premp_keyset', full_name='chromiumos.config.prototype.ReleaseTarget.Signing.premp_keyset', 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='mp_keyset', full_name='chromiumos.config.prototype.ReleaseTarget.Signing.mp_keyset', 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),
  ],
  extensions=[
  ],
  nested_types=[],
  enum_types=[
  ],
  serialized_options=None,
  is_extendable=False,
  syntax='proto3',
  extension_ranges=[],
  oneofs=[
  ],
  serialized_start=471,
  serialized_end=521,
)

_RELEASETARGET = _descriptor.Descriptor(
  name='ReleaseTarget',
  full_name='chromiumos.config.prototype.ReleaseTarget',
  filename=None,
  file=DESCRIPTOR,
  containing_type=None,
  fields=[
    _descriptor.FieldDescriptor(
      name='id', full_name='chromiumos.config.prototype.ReleaseTarget.id', 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='name', full_name='chromiumos.config.prototype.ReleaseTarget.name', 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='main_target', full_name='chromiumos.config.prototype.ReleaseTarget.main_target', index=2,
      number=5, 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='uprev_target', full_name='chromiumos.config.prototype.ReleaseTarget.uprev_target', index=3,
      number=6, 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='signing', full_name='chromiumos.config.prototype.ReleaseTarget.signing', index=4,
      number=4, 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=[_RELEASETARGET_SIGNING, ],
  enum_types=[
  ],
  serialized_options=None,
  is_extendable=False,
  syntax='proto3',
  extension_ranges=[],
  oneofs=[
  ],
  serialized_start=176,
  serialized_end=521,
)

_RELEASETARGET_SIGNING.containing_type = _RELEASETARGET
_RELEASETARGET.fields_by_name['id'].message_type = chromiumos_dot_config_dot_prototype_dot_release__target__id__pb2._RELEASETARGETID
_RELEASETARGET.fields_by_name['main_target'].message_type = chromiumos_dot_build_dot_api_dot_system__image__pb2._SYSTEMIMAGE_BUILDTARGET
_RELEASETARGET.fields_by_name['uprev_target'].message_type = chromiumos_dot_build_dot_api_dot_system__image__pb2._SYSTEMIMAGE_BUILDTARGET
_RELEASETARGET.fields_by_name['signing'].message_type = _RELEASETARGET_SIGNING
DESCRIPTOR.message_types_by_name['ReleaseTarget'] = _RELEASETARGET
_sym_db.RegisterFileDescriptor(DESCRIPTOR)

ReleaseTarget = _reflection.GeneratedProtocolMessageType('ReleaseTarget', (_message.Message,), {

  'Signing' : _reflection.GeneratedProtocolMessageType('Signing', (_message.Message,), {
    'DESCRIPTOR' : _RELEASETARGET_SIGNING,
    '__module__' : 'chromiumos.config.prototype.release_target_pb2'
    # @@protoc_insertion_point(class_scope:chromiumos.config.prototype.ReleaseTarget.Signing)
    })
  ,
  'DESCRIPTOR' : _RELEASETARGET,
  '__module__' : 'chromiumos.config.prototype.release_target_pb2'
  # @@protoc_insertion_point(class_scope:chromiumos.config.prototype.ReleaseTarget)
  })
_sym_db.RegisterMessage(ReleaseTarget)
_sym_db.RegisterMessage(ReleaseTarget.Signing)


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