# -*- coding: utf-8 -*-
# Generated by the protocol buffer compiler.  DO NOT EDIT!
# source: test_platform/multibot/follower_transitions.proto
"""Generated protocol buffer code."""
from google.protobuf import descriptor as _descriptor
from google.protobuf import descriptor_pool as _descriptor_pool
from google.protobuf import symbol_database as _symbol_database
from google.protobuf.internal import builder as _builder
# @@protoc_insertion_point(imports)

_sym_db = _symbol_database.Default()


from chromite.api.gen_sdk.test_platform.skylab_local_state import multihost_pb2 as test__platform_dot_skylab__local__state_dot_multihost__pb2


DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n1test_platform/multibot/follower_transitions.proto\x12\x16test_platform.multibot\x1a\x30test_platform/skylab_local_state/multihost.proto\"\xee\x01\n\x13\x46ollowerStateChange\x12L\n\tnew_state\x18\x01 \x01(\x0e\x32\x39.test_platform.multibot.FollowerStateChange.FollowerState\"\x88\x01\n\rFollowerState\x12\x13\n\x0fSTATE_UNDEFINED\x10\x00\x12\x11\n\rSTATE_STARTED\x10\x10\x12 \n\x1cSTATE_WAITING_TO_RUN_PAYLOAD\x10 \x12\x19\n\x15STATE_RUNNING_PAYLOAD\x10\x30\x12\x12\n\x0eSTATE_CLEANING\x10@\"\xd2\x01\n\rFollowerEvent\x12O\n\x0f\x66inished_prejob\x18\x01 \x01(\x0b\x32\x34.test_platform.multibot.FollowerEvent.FinishedPrejobH\x00\x12\x0e\n\x04\x64ied\x18\x02 \x01(\x08H\x00\x1aW\n\x0e\x46inishedPrejob\x12\x45\n\thost_info\x18\x01 \x01(\x0b\x32\x32.test_platform.skylab_local_state.MultiBotHostInfoB\x07\n\x05\x65ventBBZ@go.chromium.org/chromiumos/infra/proto/go/test_platform/multibotb\x06proto3')

_globals = globals()
_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'test_platform.multibot.follower_transitions_pb2', _globals)
if _descriptor._USE_C_DESCRIPTORS == False:

  DESCRIPTOR._options = None
  DESCRIPTOR._serialized_options = b'Z@go.chromium.org/chromiumos/infra/proto/go/test_platform/multibot'
  _globals['_FOLLOWERSTATECHANGE']._serialized_start=128
  _globals['_FOLLOWERSTATECHANGE']._serialized_end=366
  _globals['_FOLLOWERSTATECHANGE_FOLLOWERSTATE']._serialized_start=230
  _globals['_FOLLOWERSTATECHANGE_FOLLOWERSTATE']._serialized_end=366
  _globals['_FOLLOWEREVENT']._serialized_start=369
  _globals['_FOLLOWEREVENT']._serialized_end=579
  _globals['_FOLLOWEREVENT_FINISHEDPREJOB']._serialized_start=483
  _globals['_FOLLOWEREVENT_FINISHEDPREJOB']._serialized_end=570
# @@protoc_insertion_point(module_scope)
