# -*- coding: utf-8 -*-
# Generated by the protocol buffer compiler.  DO NOT EDIT!
# source: chromiumos/test/api/provision_cli.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()


from chromite.api.gen.chromiumos.test.lab.api import dut_pb2 as chromiumos_dot_test_dot_lab_dot_api_dot_dut__pb2
from chromite.api.gen.chromiumos.test.api import provision_state_pb2 as chromiumos_dot_test_dot_api_dot_provision__state__pb2
from chromite.api.gen.chromiumos.test.api import provision_service_pb2 as chromiumos_dot_test_dot_api_dot_provision__service__pb2


DESCRIPTOR = _descriptor.FileDescriptor(
  name='chromiumos/test/api/provision_cli.proto',
  package='chromiumos.test.api',
  syntax='proto3',
  serialized_options=b'Z-go.chromium.org/chromiumos/config/go/test/api',
  create_key=_descriptor._internal_create_key,
  serialized_pb=b'\n\'chromiumos/test/api/provision_cli.proto\x12\x13\x63hromiumos.test.api\x1a!chromiumos/test/lab/api/dut.proto\x1a)chromiumos/test/api/provision_state.proto\x1a+chromiumos/test/api/provision_service.proto\"F\n\x11ProvisionCliInput\x12\x31\n\ndut_inputs\x18\x01 \x03(\x0b\x32\x1d.chromiumos.test.api.DutInput\"\x89\x01\n\x08\x44utInput\x12+\n\x02id\x18\x01 \x01(\x0b\x32\x1f.chromiumos.test.lab.api.Dut.Id\x12\x12\n\ndocker_tag\x18\x02 \x01(\t\x12<\n\x0fprovision_state\x18\x03 \x01(\x0b\x32#.chromiumos.test.api.ProvisionState\"I\n\x12ProvisionCliOutput\x12\x33\n\x0b\x64ut_outputs\x18\x01 \x03(\x0b\x32\x1e.chromiumos.test.api.DutOutput\"\xb3\x01\n\tDutOutput\x12+\n\x02id\x18\x01 \x01(\x0b\x32\x1f.chromiumos.test.lab.api.Dut.Id\x12\x36\n\x07success\x18\x02 \x01(\x0b\x32#.chromiumos.test.api.InstallSuccessH\x00\x12\x36\n\x07\x66\x61ilure\x18\x03 \x01(\x0b\x32#.chromiumos.test.api.InstallFailureH\x00\x42\t\n\x07outcomeB/Z-go.chromium.org/chromiumos/config/go/test/apib\x06proto3'
  ,
  dependencies=[chromiumos_dot_test_dot_lab_dot_api_dot_dut__pb2.DESCRIPTOR,chromiumos_dot_test_dot_api_dot_provision__state__pb2.DESCRIPTOR,chromiumos_dot_test_dot_api_dot_provision__service__pb2.DESCRIPTOR,])




_PROVISIONCLIINPUT = _descriptor.Descriptor(
  name='ProvisionCliInput',
  full_name='chromiumos.test.api.ProvisionCliInput',
  filename=None,
  file=DESCRIPTOR,
  containing_type=None,
  create_key=_descriptor._internal_create_key,
  fields=[
    _descriptor.FieldDescriptor(
      name='dut_inputs', full_name='chromiumos.test.api.ProvisionCliInput.dut_inputs', 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=[],
  enum_types=[
  ],
  serialized_options=None,
  is_extendable=False,
  syntax='proto3',
  extension_ranges=[],
  oneofs=[
  ],
  serialized_start=187,
  serialized_end=257,
)


_DUTINPUT = _descriptor.Descriptor(
  name='DutInput',
  full_name='chromiumos.test.api.DutInput',
  filename=None,
  file=DESCRIPTOR,
  containing_type=None,
  create_key=_descriptor._internal_create_key,
  fields=[
    _descriptor.FieldDescriptor(
      name='id', full_name='chromiumos.test.api.DutInput.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,  create_key=_descriptor._internal_create_key),
    _descriptor.FieldDescriptor(
      name='docker_tag', full_name='chromiumos.test.api.DutInput.docker_tag', 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='provision_state', full_name='chromiumos.test.api.DutInput.provision_state', index=2,
      number=3, 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=None,
  is_extendable=False,
  syntax='proto3',
  extension_ranges=[],
  oneofs=[
  ],
  serialized_start=260,
  serialized_end=397,
)


_PROVISIONCLIOUTPUT = _descriptor.Descriptor(
  name='ProvisionCliOutput',
  full_name='chromiumos.test.api.ProvisionCliOutput',
  filename=None,
  file=DESCRIPTOR,
  containing_type=None,
  create_key=_descriptor._internal_create_key,
  fields=[
    _descriptor.FieldDescriptor(
      name='dut_outputs', full_name='chromiumos.test.api.ProvisionCliOutput.dut_outputs', 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=[],
  enum_types=[
  ],
  serialized_options=None,
  is_extendable=False,
  syntax='proto3',
  extension_ranges=[],
  oneofs=[
  ],
  serialized_start=399,
  serialized_end=472,
)


_DUTOUTPUT = _descriptor.Descriptor(
  name='DutOutput',
  full_name='chromiumos.test.api.DutOutput',
  filename=None,
  file=DESCRIPTOR,
  containing_type=None,
  create_key=_descriptor._internal_create_key,
  fields=[
    _descriptor.FieldDescriptor(
      name='id', full_name='chromiumos.test.api.DutOutput.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,  create_key=_descriptor._internal_create_key),
    _descriptor.FieldDescriptor(
      name='success', full_name='chromiumos.test.api.DutOutput.success', 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),
    _descriptor.FieldDescriptor(
      name='failure', full_name='chromiumos.test.api.DutOutput.failure', index=2,
      number=3, 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=None,
  is_extendable=False,
  syntax='proto3',
  extension_ranges=[],
  oneofs=[
    _descriptor.OneofDescriptor(
      name='outcome', full_name='chromiumos.test.api.DutOutput.outcome',
      index=0, containing_type=None,
      create_key=_descriptor._internal_create_key,
    fields=[]),
  ],
  serialized_start=475,
  serialized_end=654,
)

_PROVISIONCLIINPUT.fields_by_name['dut_inputs'].message_type = _DUTINPUT
_DUTINPUT.fields_by_name['id'].message_type = chromiumos_dot_test_dot_lab_dot_api_dot_dut__pb2._DUT_ID
_DUTINPUT.fields_by_name['provision_state'].message_type = chromiumos_dot_test_dot_api_dot_provision__state__pb2._PROVISIONSTATE
_PROVISIONCLIOUTPUT.fields_by_name['dut_outputs'].message_type = _DUTOUTPUT
_DUTOUTPUT.fields_by_name['id'].message_type = chromiumos_dot_test_dot_lab_dot_api_dot_dut__pb2._DUT_ID
_DUTOUTPUT.fields_by_name['success'].message_type = chromiumos_dot_test_dot_api_dot_provision__service__pb2._INSTALLSUCCESS
_DUTOUTPUT.fields_by_name['failure'].message_type = chromiumos_dot_test_dot_api_dot_provision__service__pb2._INSTALLFAILURE
_DUTOUTPUT.oneofs_by_name['outcome'].fields.append(
  _DUTOUTPUT.fields_by_name['success'])
_DUTOUTPUT.fields_by_name['success'].containing_oneof = _DUTOUTPUT.oneofs_by_name['outcome']
_DUTOUTPUT.oneofs_by_name['outcome'].fields.append(
  _DUTOUTPUT.fields_by_name['failure'])
_DUTOUTPUT.fields_by_name['failure'].containing_oneof = _DUTOUTPUT.oneofs_by_name['outcome']
DESCRIPTOR.message_types_by_name['ProvisionCliInput'] = _PROVISIONCLIINPUT
DESCRIPTOR.message_types_by_name['DutInput'] = _DUTINPUT
DESCRIPTOR.message_types_by_name['ProvisionCliOutput'] = _PROVISIONCLIOUTPUT
DESCRIPTOR.message_types_by_name['DutOutput'] = _DUTOUTPUT
_sym_db.RegisterFileDescriptor(DESCRIPTOR)

ProvisionCliInput = _reflection.GeneratedProtocolMessageType('ProvisionCliInput', (_message.Message,), {
  'DESCRIPTOR' : _PROVISIONCLIINPUT,
  '__module__' : 'chromiumos.test.api.provision_cli_pb2'
  # @@protoc_insertion_point(class_scope:chromiumos.test.api.ProvisionCliInput)
  })
_sym_db.RegisterMessage(ProvisionCliInput)

DutInput = _reflection.GeneratedProtocolMessageType('DutInput', (_message.Message,), {
  'DESCRIPTOR' : _DUTINPUT,
  '__module__' : 'chromiumos.test.api.provision_cli_pb2'
  # @@protoc_insertion_point(class_scope:chromiumos.test.api.DutInput)
  })
_sym_db.RegisterMessage(DutInput)

ProvisionCliOutput = _reflection.GeneratedProtocolMessageType('ProvisionCliOutput', (_message.Message,), {
  'DESCRIPTOR' : _PROVISIONCLIOUTPUT,
  '__module__' : 'chromiumos.test.api.provision_cli_pb2'
  # @@protoc_insertion_point(class_scope:chromiumos.test.api.ProvisionCliOutput)
  })
_sym_db.RegisterMessage(ProvisionCliOutput)

DutOutput = _reflection.GeneratedProtocolMessageType('DutOutput', (_message.Message,), {
  'DESCRIPTOR' : _DUTOUTPUT,
  '__module__' : 'chromiumos.test.api.provision_cli_pb2'
  # @@protoc_insertion_point(class_scope:chromiumos.test.api.DutOutput)
  })
_sym_db.RegisterMessage(DutOutput)


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