# -*- coding: utf-8 -*-
# Generated by the protocol buffer compiler.  DO NOT EDIT!
# source: chromiumos/container_metadata.proto
"""Generated protocol buffer code."""
from chromite.third_party.google.protobuf import descriptor as _descriptor
from chromite.third_party.google.protobuf import message as _message
from chromite.third_party.google.protobuf import reflection as _reflection
from chromite.third_party.google.protobuf import symbol_database as _symbol_database
# @@protoc_insertion_point(imports)

_sym_db = _symbol_database.Default()




DESCRIPTOR = _descriptor.FileDescriptor(
  name='chromiumos/container_metadata.proto',
  package='chromiumos',
  syntax='proto3',
  serialized_options=b'\n!com.google.chrome.crosinfra.protoZ4go.chromium.org/chromiumos/infra/proto/go/chromiumos',
  create_key=_descriptor._internal_create_key,
  serialized_pb=b'\n#chromiumos/container_metadata.proto\x12\nchromiumos\"2\n\rGcrRepository\x12\x10\n\x08hostname\x18\x01 \x01(\t\x12\x0f\n\x07project\x18\x02 \x01(\t\"o\n\x12\x43ontainerImageInfo\x12-\n\nrepository\x18\x01 \x01(\x0b\x32\x19.chromiumos.GcrRepository\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x0e\n\x06\x64igest\x18\x03 \x01(\t\x12\x0c\n\x04tags\x18\x04 \x03(\t\"\x9d\x01\n\x11\x43ontainerImageMap\x12\x39\n\x06images\x18\x01 \x03(\x0b\x32).chromiumos.ContainerImageMap.ImagesEntry\x1aM\n\x0bImagesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12-\n\x05value\x18\x02 \x01(\x0b\x32\x1e.chromiumos.ContainerImageInfo:\x02\x38\x01\"\xa8\x01\n\x11\x43ontainerMetadata\x12\x41\n\ncontainers\x18\x01 \x03(\x0b\x32-.chromiumos.ContainerMetadata.ContainersEntry\x1aP\n\x0f\x43ontainersEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12,\n\x05value\x18\x02 \x01(\x0b\x32\x1d.chromiumos.ContainerImageMap:\x02\x38\x01\x42Y\n!com.google.chrome.crosinfra.protoZ4go.chromium.org/chromiumos/infra/proto/go/chromiumosb\x06proto3'
)




_GCRREPOSITORY = _descriptor.Descriptor(
  name='GcrRepository',
  full_name='chromiumos.GcrRepository',
  filename=None,
  file=DESCRIPTOR,
  containing_type=None,
  create_key=_descriptor._internal_create_key,
  fields=[
    _descriptor.FieldDescriptor(
      name='hostname', full_name='chromiumos.GcrRepository.hostname', 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,  create_key=_descriptor._internal_create_key),
    _descriptor.FieldDescriptor(
      name='project', full_name='chromiumos.GcrRepository.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,  create_key=_descriptor._internal_create_key),
  ],
  extensions=[
  ],
  nested_types=[],
  enum_types=[
  ],
  serialized_options=None,
  is_extendable=False,
  syntax='proto3',
  extension_ranges=[],
  oneofs=[
  ],
  serialized_start=51,
  serialized_end=101,
)


_CONTAINERIMAGEINFO = _descriptor.Descriptor(
  name='ContainerImageInfo',
  full_name='chromiumos.ContainerImageInfo',
  filename=None,
  file=DESCRIPTOR,
  containing_type=None,
  create_key=_descriptor._internal_create_key,
  fields=[
    _descriptor.FieldDescriptor(
      name='repository', full_name='chromiumos.ContainerImageInfo.repository', 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,  create_key=_descriptor._internal_create_key),
    _descriptor.FieldDescriptor(
      name='name', full_name='chromiumos.ContainerImageInfo.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,  create_key=_descriptor._internal_create_key),
    _descriptor.FieldDescriptor(
      name='digest', full_name='chromiumos.ContainerImageInfo.digest', 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,  create_key=_descriptor._internal_create_key),
    _descriptor.FieldDescriptor(
      name='tags', full_name='chromiumos.ContainerImageInfo.tags', index=3,
      number=4, 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,  create_key=_descriptor._internal_create_key),
  ],
  extensions=[
  ],
  nested_types=[],
  enum_types=[
  ],
  serialized_options=None,
  is_extendable=False,
  syntax='proto3',
  extension_ranges=[],
  oneofs=[
  ],
  serialized_start=103,
  serialized_end=214,
)


_CONTAINERIMAGEMAP_IMAGESENTRY = _descriptor.Descriptor(
  name='ImagesEntry',
  full_name='chromiumos.ContainerImageMap.ImagesEntry',
  filename=None,
  file=DESCRIPTOR,
  containing_type=None,
  create_key=_descriptor._internal_create_key,
  fields=[
    _descriptor.FieldDescriptor(
      name='key', full_name='chromiumos.ContainerImageMap.ImagesEntry.key', 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,  create_key=_descriptor._internal_create_key),
    _descriptor.FieldDescriptor(
      name='value', full_name='chromiumos.ContainerImageMap.ImagesEntry.value', 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,  create_key=_descriptor._internal_create_key),
  ],
  extensions=[
  ],
  nested_types=[],
  enum_types=[
  ],
  serialized_options=b'8\001',
  is_extendable=False,
  syntax='proto3',
  extension_ranges=[],
  oneofs=[
  ],
  serialized_start=297,
  serialized_end=374,
)

_CONTAINERIMAGEMAP = _descriptor.Descriptor(
  name='ContainerImageMap',
  full_name='chromiumos.ContainerImageMap',
  filename=None,
  file=DESCRIPTOR,
  containing_type=None,
  create_key=_descriptor._internal_create_key,
  fields=[
    _descriptor.FieldDescriptor(
      name='images', full_name='chromiumos.ContainerImageMap.images', 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,  create_key=_descriptor._internal_create_key),
  ],
  extensions=[
  ],
  nested_types=[_CONTAINERIMAGEMAP_IMAGESENTRY, ],
  enum_types=[
  ],
  serialized_options=None,
  is_extendable=False,
  syntax='proto3',
  extension_ranges=[],
  oneofs=[
  ],
  serialized_start=217,
  serialized_end=374,
)


_CONTAINERMETADATA_CONTAINERSENTRY = _descriptor.Descriptor(
  name='ContainersEntry',
  full_name='chromiumos.ContainerMetadata.ContainersEntry',
  filename=None,
  file=DESCRIPTOR,
  containing_type=None,
  create_key=_descriptor._internal_create_key,
  fields=[
    _descriptor.FieldDescriptor(
      name='key', full_name='chromiumos.ContainerMetadata.ContainersEntry.key', 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,  create_key=_descriptor._internal_create_key),
    _descriptor.FieldDescriptor(
      name='value', full_name='chromiumos.ContainerMetadata.ContainersEntry.value', 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,  create_key=_descriptor._internal_create_key),
  ],
  extensions=[
  ],
  nested_types=[],
  enum_types=[
  ],
  serialized_options=b'8\001',
  is_extendable=False,
  syntax='proto3',
  extension_ranges=[],
  oneofs=[
  ],
  serialized_start=465,
  serialized_end=545,
)

_CONTAINERMETADATA = _descriptor.Descriptor(
  name='ContainerMetadata',
  full_name='chromiumos.ContainerMetadata',
  filename=None,
  file=DESCRIPTOR,
  containing_type=None,
  create_key=_descriptor._internal_create_key,
  fields=[
    _descriptor.FieldDescriptor(
      name='containers', full_name='chromiumos.ContainerMetadata.containers', 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,  create_key=_descriptor._internal_create_key),
  ],
  extensions=[
  ],
  nested_types=[_CONTAINERMETADATA_CONTAINERSENTRY, ],
  enum_types=[
  ],
  serialized_options=None,
  is_extendable=False,
  syntax='proto3',
  extension_ranges=[],
  oneofs=[
  ],
  serialized_start=377,
  serialized_end=545,
)

_CONTAINERIMAGEINFO.fields_by_name['repository'].message_type = _GCRREPOSITORY
_CONTAINERIMAGEMAP_IMAGESENTRY.fields_by_name['value'].message_type = _CONTAINERIMAGEINFO
_CONTAINERIMAGEMAP_IMAGESENTRY.containing_type = _CONTAINERIMAGEMAP
_CONTAINERIMAGEMAP.fields_by_name['images'].message_type = _CONTAINERIMAGEMAP_IMAGESENTRY
_CONTAINERMETADATA_CONTAINERSENTRY.fields_by_name['value'].message_type = _CONTAINERIMAGEMAP
_CONTAINERMETADATA_CONTAINERSENTRY.containing_type = _CONTAINERMETADATA
_CONTAINERMETADATA.fields_by_name['containers'].message_type = _CONTAINERMETADATA_CONTAINERSENTRY
DESCRIPTOR.message_types_by_name['GcrRepository'] = _GCRREPOSITORY
DESCRIPTOR.message_types_by_name['ContainerImageInfo'] = _CONTAINERIMAGEINFO
DESCRIPTOR.message_types_by_name['ContainerImageMap'] = _CONTAINERIMAGEMAP
DESCRIPTOR.message_types_by_name['ContainerMetadata'] = _CONTAINERMETADATA
_sym_db.RegisterFileDescriptor(DESCRIPTOR)

GcrRepository = _reflection.GeneratedProtocolMessageType('GcrRepository', (_message.Message,), {
  'DESCRIPTOR' : _GCRREPOSITORY,
  '__module__' : 'chromiumos.container_metadata_pb2'
  # @@protoc_insertion_point(class_scope:chromiumos.GcrRepository)
  })
_sym_db.RegisterMessage(GcrRepository)

ContainerImageInfo = _reflection.GeneratedProtocolMessageType('ContainerImageInfo', (_message.Message,), {
  'DESCRIPTOR' : _CONTAINERIMAGEINFO,
  '__module__' : 'chromiumos.container_metadata_pb2'
  # @@protoc_insertion_point(class_scope:chromiumos.ContainerImageInfo)
  })
_sym_db.RegisterMessage(ContainerImageInfo)

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

  'ImagesEntry' : _reflection.GeneratedProtocolMessageType('ImagesEntry', (_message.Message,), {
    'DESCRIPTOR' : _CONTAINERIMAGEMAP_IMAGESENTRY,
    '__module__' : 'chromiumos.container_metadata_pb2'
    # @@protoc_insertion_point(class_scope:chromiumos.ContainerImageMap.ImagesEntry)
    })
  ,
  'DESCRIPTOR' : _CONTAINERIMAGEMAP,
  '__module__' : 'chromiumos.container_metadata_pb2'
  # @@protoc_insertion_point(class_scope:chromiumos.ContainerImageMap)
  })
_sym_db.RegisterMessage(ContainerImageMap)
_sym_db.RegisterMessage(ContainerImageMap.ImagesEntry)

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

  'ContainersEntry' : _reflection.GeneratedProtocolMessageType('ContainersEntry', (_message.Message,), {
    'DESCRIPTOR' : _CONTAINERMETADATA_CONTAINERSENTRY,
    '__module__' : 'chromiumos.container_metadata_pb2'
    # @@protoc_insertion_point(class_scope:chromiumos.ContainerMetadata.ContainersEntry)
    })
  ,
  'DESCRIPTOR' : _CONTAINERMETADATA,
  '__module__' : 'chromiumos.container_metadata_pb2'
  # @@protoc_insertion_point(class_scope:chromiumos.ContainerMetadata)
  })
_sym_db.RegisterMessage(ContainerMetadata)
_sym_db.RegisterMessage(ContainerMetadata.ContainersEntry)


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