// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
// 	protoc-gen-go v1.25.0-devel
// 	protoc        v3.6.1
// source: chromite/api/build_api_test.proto

package api

import (
	chromiumos "go.chromium.org/chromiumos/infra/proto/go/chromiumos"
	protoreflect "google.golang.org/protobuf/reflect/protoreflect"
	protoimpl "google.golang.org/protobuf/runtime/protoimpl"
	reflect "reflect"
	sync "sync"
)

const (
	// Verify that this generated code is sufficiently up-to-date.
	_ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
	// Verify that runtime/protoimpl is sufficiently up-to-date.
	_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
)

type TestEnum int32

const (
	TestEnum_TEST_ENUM_UNSPECIFIED TestEnum = 0
	TestEnum_TEST_ENUM_FOO         TestEnum = 1
	TestEnum_TEST_ENUM_BAR         TestEnum = 2
	TestEnum_TEST_ENUM_BAZ         TestEnum = 3
)

// Enum value maps for TestEnum.
var (
	TestEnum_name = map[int32]string{
		0: "TEST_ENUM_UNSPECIFIED",
		1: "TEST_ENUM_FOO",
		2: "TEST_ENUM_BAR",
		3: "TEST_ENUM_BAZ",
	}
	TestEnum_value = map[string]int32{
		"TEST_ENUM_UNSPECIFIED": 0,
		"TEST_ENUM_FOO":         1,
		"TEST_ENUM_BAR":         2,
		"TEST_ENUM_BAZ":         3,
	}
)

func (x TestEnum) Enum() *TestEnum {
	p := new(TestEnum)
	*p = x
	return p
}

func (x TestEnum) String() string {
	return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
}

func (TestEnum) Descriptor() protoreflect.EnumDescriptor {
	return file_chromite_api_build_api_test_proto_enumTypes[0].Descriptor()
}

func (TestEnum) Type() protoreflect.EnumType {
	return &file_chromite_api_build_api_test_proto_enumTypes[0]
}

func (x TestEnum) Number() protoreflect.EnumNumber {
	return protoreflect.EnumNumber(x)
}

// Deprecated: Use TestEnum.Descriptor instead.
func (TestEnum) EnumDescriptor() ([]byte, []int) {
	return file_chromite_api_build_api_test_proto_rawDescGZIP(), []int{0}
}

type NestedPath struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	Path *chromiumos.Path `protobuf:"bytes,1,opt,name=path,proto3" json:"path,omitempty"`
}

func (x *NestedPath) Reset() {
	*x = NestedPath{}
	if protoimpl.UnsafeEnabled {
		mi := &file_chromite_api_build_api_test_proto_msgTypes[0]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *NestedPath) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*NestedPath) ProtoMessage() {}

func (x *NestedPath) ProtoReflect() protoreflect.Message {
	mi := &file_chromite_api_build_api_test_proto_msgTypes[0]
	if protoimpl.UnsafeEnabled && x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use NestedPath.ProtoReflect.Descriptor instead.
func (*NestedPath) Descriptor() ([]byte, []int) {
	return file_chromite_api_build_api_test_proto_rawDescGZIP(), []int{0}
}

func (x *NestedPath) GetPath() *chromiumos.Path {
	if x != nil {
		return x.Path
	}
	return nil
}

type MultiFieldMessage struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	Id       int32    `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"`
	Name     string   `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"`
	Flag     bool     `protobuf:"varint,3,opt,name=flag,proto3" json:"flag,omitempty"`
	TestEnum TestEnum `protobuf:"varint,4,opt,name=test_enum,json=testEnum,proto3,enum=chromite.api.TestEnum" json:"test_enum,omitempty"`
}

func (x *MultiFieldMessage) Reset() {
	*x = MultiFieldMessage{}
	if protoimpl.UnsafeEnabled {
		mi := &file_chromite_api_build_api_test_proto_msgTypes[1]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *MultiFieldMessage) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*MultiFieldMessage) ProtoMessage() {}

func (x *MultiFieldMessage) ProtoReflect() protoreflect.Message {
	mi := &file_chromite_api_build_api_test_proto_msgTypes[1]
	if protoimpl.UnsafeEnabled && x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use MultiFieldMessage.ProtoReflect.Descriptor instead.
func (*MultiFieldMessage) Descriptor() ([]byte, []int) {
	return file_chromite_api_build_api_test_proto_rawDescGZIP(), []int{1}
}

func (x *MultiFieldMessage) GetId() int32 {
	if x != nil {
		return x.Id
	}
	return 0
}

func (x *MultiFieldMessage) GetName() string {
	if x != nil {
		return x.Name
	}
	return ""
}

func (x *MultiFieldMessage) GetFlag() bool {
	if x != nil {
		return x.Flag
	}
	return false
}

func (x *MultiFieldMessage) GetTestEnum() TestEnum {
	if x != nil {
		return x.TestEnum
	}
	return TestEnum_TEST_ENUM_UNSPECIFIED
}

// Simple input message.
type TestRequestMessage struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
	// Chroot message for parsing and automatic chroot re-execution testing.
	Chroot *chromiumos.Chroot `protobuf:"bytes,2,opt,name=chroot,proto3" json:"chroot,omitempty"`
	// Path and ResultPath messages for insertion/extraction testing.
	Path        *chromiumos.Path       `protobuf:"bytes,3,opt,name=path,proto3" json:"path,omitempty"`
	AnotherPath *chromiumos.Path       `protobuf:"bytes,4,opt,name=another_path,json=anotherPath,proto3" json:"another_path,omitempty"`
	NestedPath  *NestedPath            `protobuf:"bytes,5,opt,name=nested_path,json=nestedPath,proto3" json:"nested_path,omitempty"`
	ResultPath  *chromiumos.ResultPath `protobuf:"bytes,6,opt,name=result_path,json=resultPath,proto3" json:"result_path,omitempty"`
	// BuildTarget messages for parsing tests.
	BuildTarget  *chromiumos.BuildTarget   `protobuf:"bytes,7,opt,name=build_target,json=buildTarget,proto3" json:"build_target,omitempty"`
	BuildTargets []*chromiumos.BuildTarget `protobuf:"bytes,8,rep,name=build_targets,json=buildTargets,proto3" json:"build_targets,omitempty"`
	// For SyncedDir syncing tests.
	SyncedDir  *chromiumos.SyncedDir   `protobuf:"bytes,9,opt,name=synced_dir,json=syncedDir,proto3" json:"synced_dir,omitempty"`
	SyncedDirs []*chromiumos.SyncedDir `protobuf:"bytes,10,rep,name=synced_dirs,json=syncedDirs,proto3" json:"synced_dirs,omitempty"`
	// Repeated message with multiple fields.
	Messages  []*MultiFieldMessage `protobuf:"bytes,11,rep,name=messages,proto3" json:"messages,omitempty"`
	TestEnum  TestEnum             `protobuf:"varint,12,opt,name=test_enum,json=testEnum,proto3,enum=chromite.api.TestEnum" json:"test_enum,omitempty"`
	TestEnums []TestEnum           `protobuf:"varint,13,rep,packed,name=test_enums,json=testEnums,proto3,enum=chromite.api.TestEnum" json:"test_enums,omitempty"`
	Number    int32                `protobuf:"varint,14,opt,name=number,proto3" json:"number,omitempty"`
	Numbers   []int32              `protobuf:"varint,15,rep,packed,name=numbers,proto3" json:"numbers,omitempty"`
}

func (x *TestRequestMessage) Reset() {
	*x = TestRequestMessage{}
	if protoimpl.UnsafeEnabled {
		mi := &file_chromite_api_build_api_test_proto_msgTypes[2]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *TestRequestMessage) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*TestRequestMessage) ProtoMessage() {}

func (x *TestRequestMessage) ProtoReflect() protoreflect.Message {
	mi := &file_chromite_api_build_api_test_proto_msgTypes[2]
	if protoimpl.UnsafeEnabled && x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use TestRequestMessage.ProtoReflect.Descriptor instead.
func (*TestRequestMessage) Descriptor() ([]byte, []int) {
	return file_chromite_api_build_api_test_proto_rawDescGZIP(), []int{2}
}

func (x *TestRequestMessage) GetId() string {
	if x != nil {
		return x.Id
	}
	return ""
}

func (x *TestRequestMessage) GetChroot() *chromiumos.Chroot {
	if x != nil {
		return x.Chroot
	}
	return nil
}

func (x *TestRequestMessage) GetPath() *chromiumos.Path {
	if x != nil {
		return x.Path
	}
	return nil
}

func (x *TestRequestMessage) GetAnotherPath() *chromiumos.Path {
	if x != nil {
		return x.AnotherPath
	}
	return nil
}

func (x *TestRequestMessage) GetNestedPath() *NestedPath {
	if x != nil {
		return x.NestedPath
	}
	return nil
}

func (x *TestRequestMessage) GetResultPath() *chromiumos.ResultPath {
	if x != nil {
		return x.ResultPath
	}
	return nil
}

func (x *TestRequestMessage) GetBuildTarget() *chromiumos.BuildTarget {
	if x != nil {
		return x.BuildTarget
	}
	return nil
}

func (x *TestRequestMessage) GetBuildTargets() []*chromiumos.BuildTarget {
	if x != nil {
		return x.BuildTargets
	}
	return nil
}

func (x *TestRequestMessage) GetSyncedDir() *chromiumos.SyncedDir {
	if x != nil {
		return x.SyncedDir
	}
	return nil
}

func (x *TestRequestMessage) GetSyncedDirs() []*chromiumos.SyncedDir {
	if x != nil {
		return x.SyncedDirs
	}
	return nil
}

func (x *TestRequestMessage) GetMessages() []*MultiFieldMessage {
	if x != nil {
		return x.Messages
	}
	return nil
}

func (x *TestRequestMessage) GetTestEnum() TestEnum {
	if x != nil {
		return x.TestEnum
	}
	return TestEnum_TEST_ENUM_UNSPECIFIED
}

func (x *TestRequestMessage) GetTestEnums() []TestEnum {
	if x != nil {
		return x.TestEnums
	}
	return nil
}

func (x *TestRequestMessage) GetNumber() int32 {
	if x != nil {
		return x.Number
	}
	return 0
}

func (x *TestRequestMessage) GetNumbers() []int32 {
	if x != nil {
		return x.Numbers
	}
	return nil
}

// Simple output message.
type TestResultMessage struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	Result string `protobuf:"bytes,1,opt,name=result,proto3" json:"result,omitempty"`
	// Path messages for ResultPath testing.
	Artifact       *chromiumos.Path          `protobuf:"bytes,2,opt,name=artifact,proto3" json:"artifact,omitempty"`
	NestedArtifact *NestedPath               `protobuf:"bytes,3,opt,name=nested_artifact,json=nestedArtifact,proto3" json:"nested_artifact,omitempty"`
	Artifacts      []*chromiumos.Path        `protobuf:"bytes,4,rep,name=artifacts,proto3" json:"artifacts,omitempty"`
	Events         []*chromiumos.MetricEvent `protobuf:"bytes,5,rep,name=events,proto3" json:"events,omitempty"`
}

func (x *TestResultMessage) Reset() {
	*x = TestResultMessage{}
	if protoimpl.UnsafeEnabled {
		mi := &file_chromite_api_build_api_test_proto_msgTypes[3]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *TestResultMessage) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*TestResultMessage) ProtoMessage() {}

func (x *TestResultMessage) ProtoReflect() protoreflect.Message {
	mi := &file_chromite_api_build_api_test_proto_msgTypes[3]
	if protoimpl.UnsafeEnabled && x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use TestResultMessage.ProtoReflect.Descriptor instead.
func (*TestResultMessage) Descriptor() ([]byte, []int) {
	return file_chromite_api_build_api_test_proto_rawDescGZIP(), []int{3}
}

func (x *TestResultMessage) GetResult() string {
	if x != nil {
		return x.Result
	}
	return ""
}

func (x *TestResultMessage) GetArtifact() *chromiumos.Path {
	if x != nil {
		return x.Artifact
	}
	return nil
}

func (x *TestResultMessage) GetNestedArtifact() *NestedPath {
	if x != nil {
		return x.NestedArtifact
	}
	return nil
}

func (x *TestResultMessage) GetArtifacts() []*chromiumos.Path {
	if x != nil {
		return x.Artifacts
	}
	return nil
}

func (x *TestResultMessage) GetEvents() []*chromiumos.MetricEvent {
	if x != nil {
		return x.Events
	}
	return nil
}

var File_chromite_api_build_api_test_proto protoreflect.FileDescriptor

var file_chromite_api_build_api_test_proto_rawDesc = []byte{
	0x0a, 0x21, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x74, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x62,
	0x75, 0x69, 0x6c, 0x64, 0x5f, 0x61, 0x70, 0x69, 0x5f, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x70, 0x72,
	0x6f, 0x74, 0x6f, 0x12, 0x0c, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x74, 0x65, 0x2e, 0x61, 0x70,
	0x69, 0x1a, 0x1c, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x74, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f,
	0x62, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x61, 0x70, 0x69, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a,
	0x17, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x6f, 0x73, 0x2f, 0x63, 0x6f, 0x6d, 0x6d,
	0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x18, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69,
	0x75, 0x6d, 0x6f, 0x73, 0x2f, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x2e, 0x70, 0x72, 0x6f,
	0x74, 0x6f, 0x22, 0x32, 0x0a, 0x0a, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x50, 0x61, 0x74, 0x68,
	0x12, 0x24, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10,
	0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x6f, 0x73, 0x2e, 0x50, 0x61, 0x74, 0x68,
	0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x22, 0x80, 0x01, 0x0a, 0x11, 0x4d, 0x75, 0x6c, 0x74, 0x69,
	0x46, 0x69, 0x65, 0x6c, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x0e, 0x0a, 0x02,
	0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04,
	0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65,
	0x12, 0x12, 0x0a, 0x04, 0x66, 0x6c, 0x61, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x04,
	0x66, 0x6c, 0x61, 0x67, 0x12, 0x33, 0x0a, 0x09, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x65, 0x6e, 0x75,
	0x6d, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x16, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69,
	0x74, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x45, 0x6e, 0x75, 0x6d, 0x52,
	0x08, 0x74, 0x65, 0x73, 0x74, 0x45, 0x6e, 0x75, 0x6d, 0x22, 0xe2, 0x05, 0x0a, 0x12, 0x54, 0x65,
	0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65,
	0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64,
	0x12, 0x2a, 0x0a, 0x06, 0x63, 0x68, 0x72, 0x6f, 0x6f, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b,
	0x32, 0x12, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x6f, 0x73, 0x2e, 0x43, 0x68,
	0x72, 0x6f, 0x6f, 0x74, 0x52, 0x06, 0x63, 0x68, 0x72, 0x6f, 0x6f, 0x74, 0x12, 0x24, 0x0a, 0x04,
	0x70, 0x61, 0x74, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x63, 0x68, 0x72,
	0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x6f, 0x73, 0x2e, 0x50, 0x61, 0x74, 0x68, 0x52, 0x04, 0x70, 0x61,
	0x74, 0x68, 0x12, 0x33, 0x0a, 0x0c, 0x61, 0x6e, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x5f, 0x70, 0x61,
	0x74, 0x68, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d,
	0x69, 0x75, 0x6d, 0x6f, 0x73, 0x2e, 0x50, 0x61, 0x74, 0x68, 0x52, 0x0b, 0x61, 0x6e, 0x6f, 0x74,
	0x68, 0x65, 0x72, 0x50, 0x61, 0x74, 0x68, 0x12, 0x39, 0x0a, 0x0b, 0x6e, 0x65, 0x73, 0x74, 0x65,
	0x64, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x63,
	0x68, 0x72, 0x6f, 0x6d, 0x69, 0x74, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4e, 0x65, 0x73, 0x74,
	0x65, 0x64, 0x50, 0x61, 0x74, 0x68, 0x52, 0x0a, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x50, 0x61,
	0x74, 0x68, 0x12, 0x37, 0x0a, 0x0b, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x5f, 0x70, 0x61, 0x74,
	0x68, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69,
	0x75, 0x6d, 0x6f, 0x73, 0x2e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x50, 0x61, 0x74, 0x68, 0x52,
	0x0a, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x50, 0x61, 0x74, 0x68, 0x12, 0x3a, 0x0a, 0x0c, 0x62,
	0x75, 0x69, 0x6c, 0x64, 0x5f, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28,
	0x0b, 0x32, 0x17, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x6f, 0x73, 0x2e, 0x42,
	0x75, 0x69, 0x6c, 0x64, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x52, 0x0b, 0x62, 0x75, 0x69, 0x6c,
	0x64, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x12, 0x3c, 0x0a, 0x0d, 0x62, 0x75, 0x69, 0x6c, 0x64,
	0x5f, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17,
	0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x6f, 0x73, 0x2e, 0x42, 0x75, 0x69, 0x6c,
	0x64, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x52, 0x0c, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x54, 0x61,
	0x72, 0x67, 0x65, 0x74, 0x73, 0x12, 0x34, 0x0a, 0x0a, 0x73, 0x79, 0x6e, 0x63, 0x65, 0x64, 0x5f,
	0x64, 0x69, 0x72, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x63, 0x68, 0x72, 0x6f,
	0x6d, 0x69, 0x75, 0x6d, 0x6f, 0x73, 0x2e, 0x53, 0x79, 0x6e, 0x63, 0x65, 0x64, 0x44, 0x69, 0x72,
	0x52, 0x09, 0x73, 0x79, 0x6e, 0x63, 0x65, 0x64, 0x44, 0x69, 0x72, 0x12, 0x36, 0x0a, 0x0b, 0x73,
	0x79, 0x6e, 0x63, 0x65, 0x64, 0x5f, 0x64, 0x69, 0x72, 0x73, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x0b,
	0x32, 0x15, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x6f, 0x73, 0x2e, 0x53, 0x79,
	0x6e, 0x63, 0x65, 0x64, 0x44, 0x69, 0x72, 0x52, 0x0a, 0x73, 0x79, 0x6e, 0x63, 0x65, 0x64, 0x44,
	0x69, 0x72, 0x73, 0x12, 0x3b, 0x0a, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x18,
	0x0b, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x74, 0x65,
	0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4d,
	0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73,
	0x12, 0x33, 0x0a, 0x09, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x18, 0x0c, 0x20,
	0x01, 0x28, 0x0e, 0x32, 0x16, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x74, 0x65, 0x2e, 0x61,
	0x70, 0x69, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x08, 0x74, 0x65, 0x73,
	0x74, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x35, 0x0a, 0x0a, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x65, 0x6e,
	0x75, 0x6d, 0x73, 0x18, 0x0d, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x16, 0x2e, 0x63, 0x68, 0x72, 0x6f,
	0x6d, 0x69, 0x74, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x45, 0x6e, 0x75,
	0x6d, 0x52, 0x09, 0x74, 0x65, 0x73, 0x74, 0x45, 0x6e, 0x75, 0x6d, 0x73, 0x12, 0x16, 0x0a, 0x06,
	0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x6e, 0x75,
	0x6d, 0x62, 0x65, 0x72, 0x12, 0x18, 0x0a, 0x07, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x18,
	0x0f, 0x20, 0x03, 0x28, 0x05, 0x52, 0x07, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x22, 0xfd,
	0x01, 0x0a, 0x11, 0x54, 0x65, 0x73, 0x74, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x4d, 0x65, 0x73,
	0x73, 0x61, 0x67, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x01,
	0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x2c, 0x0a, 0x08,
	0x61, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10,
	0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x6f, 0x73, 0x2e, 0x50, 0x61, 0x74, 0x68,
	0x52, 0x08, 0x61, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x12, 0x41, 0x0a, 0x0f, 0x6e, 0x65,
	0x73, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x18, 0x03, 0x20,
	0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x74, 0x65, 0x2e, 0x61,
	0x70, 0x69, 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x50, 0x61, 0x74, 0x68, 0x52, 0x0e, 0x6e,
	0x65, 0x73, 0x74, 0x65, 0x64, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x12, 0x2e, 0x0a,
	0x09, 0x61, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b,
	0x32, 0x10, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x6f, 0x73, 0x2e, 0x50, 0x61,
	0x74, 0x68, 0x52, 0x09, 0x61, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x73, 0x12, 0x2f, 0x0a,
	0x06, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e,
	0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x6f, 0x73, 0x2e, 0x4d, 0x65, 0x74, 0x72, 0x69,
	0x63, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, 0x06, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x2a, 0x5e,
	0x0a, 0x08, 0x54, 0x65, 0x73, 0x74, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x19, 0x0a, 0x15, 0x54, 0x45,
	0x53, 0x54, 0x5f, 0x45, 0x4e, 0x55, 0x4d, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46,
	0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x11, 0x0a, 0x0d, 0x54, 0x45, 0x53, 0x54, 0x5f, 0x45, 0x4e,
	0x55, 0x4d, 0x5f, 0x46, 0x4f, 0x4f, 0x10, 0x01, 0x12, 0x11, 0x0a, 0x0d, 0x54, 0x45, 0x53, 0x54,
	0x5f, 0x45, 0x4e, 0x55, 0x4d, 0x5f, 0x42, 0x41, 0x52, 0x10, 0x02, 0x12, 0x11, 0x0a, 0x0d, 0x54,
	0x45, 0x53, 0x54, 0x5f, 0x45, 0x4e, 0x55, 0x4d, 0x5f, 0x42, 0x41, 0x5a, 0x10, 0x03, 0x32, 0xc0,
	0x02, 0x0a, 0x0e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x70, 0x69, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63,
	0x65, 0x12, 0x56, 0x0a, 0x11, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74,
	0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x12, 0x20, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x74,
	0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
	0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x1f, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d,
	0x69, 0x74, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x52, 0x65, 0x73, 0x75,
	0x6c, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x65, 0x0a, 0x0d, 0x52, 0x65, 0x6e,
	0x61, 0x6d, 0x65, 0x64, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x12, 0x20, 0x2e, 0x63, 0x68, 0x72,
	0x6f, 0x6d, 0x69, 0x74, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x52, 0x65,
	0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x1f, 0x2e, 0x63,
	0x68, 0x72, 0x6f, 0x6d, 0x69, 0x74, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x54, 0x65, 0x73, 0x74,
	0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x11, 0xc2,
	0xed, 0x1a, 0x0d, 0x0a, 0x0b, 0x43, 0x6f, 0x72, 0x72, 0x65, 0x63, 0x74, 0x4e, 0x61, 0x6d, 0x65,
	0x12, 0x59, 0x0a, 0x0c, 0x48, 0x69, 0x64, 0x64, 0x65, 0x6e, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64,
	0x12, 0x20, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x74, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e,
	0x54, 0x65, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61,
	0x67, 0x65, 0x1a, 0x1f, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x74, 0x65, 0x2e, 0x61, 0x70,
	0x69, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x4d, 0x65, 0x73, 0x73,
	0x61, 0x67, 0x65, 0x22, 0x06, 0xc2, 0xed, 0x1a, 0x02, 0x18, 0x02, 0x1a, 0x14, 0xc2, 0xed, 0x1a,
	0x10, 0x0a, 0x0e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x61, 0x70, 0x69, 0x5f, 0x74, 0x65, 0x73,
	0x74, 0x32, 0xf9, 0x01, 0x0a, 0x16, 0x49, 0x6e, 0x73, 0x69, 0x64, 0x65, 0x43, 0x68, 0x72, 0x6f,
	0x6f, 0x74, 0x41, 0x70, 0x69, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x5e, 0x0a, 0x19,
	0x49, 0x6e, 0x73, 0x69, 0x64, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x49, 0x6e, 0x73,
	0x69, 0x64, 0x65, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x12, 0x20, 0x2e, 0x63, 0x68, 0x72, 0x6f,
	0x6d, 0x69, 0x74, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x52, 0x65, 0x71,
	0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x1f, 0x2e, 0x63, 0x68,
	0x72, 0x6f, 0x6d, 0x69, 0x74, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x52,
	0x65, 0x73, 0x75, 0x6c, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x67, 0x0a, 0x1a,
	0x49, 0x6e, 0x73, 0x69, 0x64, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4f, 0x75, 0x74,
	0x73, 0x69, 0x64, 0x65, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x12, 0x20, 0x2e, 0x63, 0x68, 0x72,
	0x6f, 0x6d, 0x69, 0x74, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x52, 0x65,
	0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x1f, 0x2e, 0x63,
	0x68, 0x72, 0x6f, 0x6d, 0x69, 0x74, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x54, 0x65, 0x73, 0x74,
	0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x06, 0xc2,
	0xed, 0x1a, 0x02, 0x10, 0x02, 0x1a, 0x16, 0xc2, 0xed, 0x1a, 0x12, 0x0a, 0x0e, 0x62, 0x75, 0x69,
	0x6c, 0x64, 0x5f, 0x61, 0x70, 0x69, 0x5f, 0x74, 0x65, 0x73, 0x74, 0x10, 0x01, 0x32, 0xfc, 0x01,
	0x0a, 0x17, 0x4f, 0x75, 0x74, 0x73, 0x69, 0x64, 0x65, 0x43, 0x68, 0x72, 0x6f, 0x6f, 0x74, 0x41,
	0x70, 0x69, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x60, 0x0a, 0x1b, 0x4f, 0x75, 0x74,
	0x73, 0x69, 0x64, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4f, 0x75, 0x74, 0x73, 0x69,
	0x64, 0x65, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x12, 0x20, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d,
	0x69, 0x74, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75,
	0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x1f, 0x2e, 0x63, 0x68, 0x72,
	0x6f, 0x6d, 0x69, 0x74, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x52, 0x65,
	0x73, 0x75, 0x6c, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x67, 0x0a, 0x1a, 0x4f,
	0x75, 0x74, 0x73, 0x69, 0x64, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x49, 0x6e, 0x73,
	0x69, 0x64, 0x65, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x12, 0x20, 0x2e, 0x63, 0x68, 0x72, 0x6f,
	0x6d, 0x69, 0x74, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x52, 0x65, 0x71,
	0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x1f, 0x2e, 0x63, 0x68,
	0x72, 0x6f, 0x6d, 0x69, 0x74, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x52,
	0x65, 0x73, 0x75, 0x6c, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x06, 0xc2, 0xed,
	0x1a, 0x02, 0x10, 0x01, 0x1a, 0x16, 0xc2, 0xed, 0x1a, 0x12, 0x0a, 0x0e, 0x62, 0x75, 0x69, 0x6c,
	0x64, 0x5f, 0x61, 0x70, 0x69, 0x5f, 0x74, 0x65, 0x73, 0x74, 0x10, 0x02, 0x32, 0x7c, 0x0a, 0x0d,
	0x48, 0x69, 0x64, 0x64, 0x65, 0x6e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x51, 0x0a,
	0x0c, 0x48, 0x69, 0x64, 0x64, 0x65, 0x6e, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x12, 0x20, 0x2e,
	0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x74, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x54, 0x65, 0x73,
	0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a,
	0x1f, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x74, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x54,
	0x65, 0x73, 0x74, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65,
	0x1a, 0x18, 0xc2, 0xed, 0x1a, 0x14, 0x0a, 0x0e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x61, 0x70,
	0x69, 0x5f, 0x74, 0x65, 0x73, 0x74, 0x10, 0x02, 0x18, 0x02, 0x42, 0x38, 0x5a, 0x36, 0x67, 0x6f,
	0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x63, 0x68,
	0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x6f, 0x73, 0x2f, 0x69, 0x6e, 0x66, 0x72, 0x61, 0x2f, 0x70,
	0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6f, 0x2f, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x74, 0x65,
	0x2f, 0x61, 0x70, 0x69, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
}

var (
	file_chromite_api_build_api_test_proto_rawDescOnce sync.Once
	file_chromite_api_build_api_test_proto_rawDescData = file_chromite_api_build_api_test_proto_rawDesc
)

func file_chromite_api_build_api_test_proto_rawDescGZIP() []byte {
	file_chromite_api_build_api_test_proto_rawDescOnce.Do(func() {
		file_chromite_api_build_api_test_proto_rawDescData = protoimpl.X.CompressGZIP(file_chromite_api_build_api_test_proto_rawDescData)
	})
	return file_chromite_api_build_api_test_proto_rawDescData
}

var file_chromite_api_build_api_test_proto_enumTypes = make([]protoimpl.EnumInfo, 1)
var file_chromite_api_build_api_test_proto_msgTypes = make([]protoimpl.MessageInfo, 4)
var file_chromite_api_build_api_test_proto_goTypes = []interface{}{
	(TestEnum)(0),                  // 0: chromite.api.TestEnum
	(*NestedPath)(nil),             // 1: chromite.api.NestedPath
	(*MultiFieldMessage)(nil),      // 2: chromite.api.MultiFieldMessage
	(*TestRequestMessage)(nil),     // 3: chromite.api.TestRequestMessage
	(*TestResultMessage)(nil),      // 4: chromite.api.TestResultMessage
	(*chromiumos.Path)(nil),        // 5: chromiumos.Path
	(*chromiumos.Chroot)(nil),      // 6: chromiumos.Chroot
	(*chromiumos.ResultPath)(nil),  // 7: chromiumos.ResultPath
	(*chromiumos.BuildTarget)(nil), // 8: chromiumos.BuildTarget
	(*chromiumos.SyncedDir)(nil),   // 9: chromiumos.SyncedDir
	(*chromiumos.MetricEvent)(nil), // 10: chromiumos.MetricEvent
}
var file_chromite_api_build_api_test_proto_depIdxs = []int32{
	5,  // 0: chromite.api.NestedPath.path:type_name -> chromiumos.Path
	0,  // 1: chromite.api.MultiFieldMessage.test_enum:type_name -> chromite.api.TestEnum
	6,  // 2: chromite.api.TestRequestMessage.chroot:type_name -> chromiumos.Chroot
	5,  // 3: chromite.api.TestRequestMessage.path:type_name -> chromiumos.Path
	5,  // 4: chromite.api.TestRequestMessage.another_path:type_name -> chromiumos.Path
	1,  // 5: chromite.api.TestRequestMessage.nested_path:type_name -> chromite.api.NestedPath
	7,  // 6: chromite.api.TestRequestMessage.result_path:type_name -> chromiumos.ResultPath
	8,  // 7: chromite.api.TestRequestMessage.build_target:type_name -> chromiumos.BuildTarget
	8,  // 8: chromite.api.TestRequestMessage.build_targets:type_name -> chromiumos.BuildTarget
	9,  // 9: chromite.api.TestRequestMessage.synced_dir:type_name -> chromiumos.SyncedDir
	9,  // 10: chromite.api.TestRequestMessage.synced_dirs:type_name -> chromiumos.SyncedDir
	2,  // 11: chromite.api.TestRequestMessage.messages:type_name -> chromite.api.MultiFieldMessage
	0,  // 12: chromite.api.TestRequestMessage.test_enum:type_name -> chromite.api.TestEnum
	0,  // 13: chromite.api.TestRequestMessage.test_enums:type_name -> chromite.api.TestEnum
	5,  // 14: chromite.api.TestResultMessage.artifact:type_name -> chromiumos.Path
	1,  // 15: chromite.api.TestResultMessage.nested_artifact:type_name -> chromite.api.NestedPath
	5,  // 16: chromite.api.TestResultMessage.artifacts:type_name -> chromiumos.Path
	10, // 17: chromite.api.TestResultMessage.events:type_name -> chromiumos.MetricEvent
	3,  // 18: chromite.api.TestApiService.InputOutputMethod:input_type -> chromite.api.TestRequestMessage
	3,  // 19: chromite.api.TestApiService.RenamedMethod:input_type -> chromite.api.TestRequestMessage
	3,  // 20: chromite.api.TestApiService.HiddenMethod:input_type -> chromite.api.TestRequestMessage
	3,  // 21: chromite.api.InsideChrootApiService.InsideServiceInsideMethod:input_type -> chromite.api.TestRequestMessage
	3,  // 22: chromite.api.InsideChrootApiService.InsideServiceOutsideMethod:input_type -> chromite.api.TestRequestMessage
	3,  // 23: chromite.api.OutsideChrootApiService.OutsideServiceOutsideMethod:input_type -> chromite.api.TestRequestMessage
	3,  // 24: chromite.api.OutsideChrootApiService.OutsideServiceInsideMethod:input_type -> chromite.api.TestRequestMessage
	3,  // 25: chromite.api.HiddenService.HiddenMethod:input_type -> chromite.api.TestRequestMessage
	4,  // 26: chromite.api.TestApiService.InputOutputMethod:output_type -> chromite.api.TestResultMessage
	4,  // 27: chromite.api.TestApiService.RenamedMethod:output_type -> chromite.api.TestResultMessage
	4,  // 28: chromite.api.TestApiService.HiddenMethod:output_type -> chromite.api.TestResultMessage
	4,  // 29: chromite.api.InsideChrootApiService.InsideServiceInsideMethod:output_type -> chromite.api.TestResultMessage
	4,  // 30: chromite.api.InsideChrootApiService.InsideServiceOutsideMethod:output_type -> chromite.api.TestResultMessage
	4,  // 31: chromite.api.OutsideChrootApiService.OutsideServiceOutsideMethod:output_type -> chromite.api.TestResultMessage
	4,  // 32: chromite.api.OutsideChrootApiService.OutsideServiceInsideMethod:output_type -> chromite.api.TestResultMessage
	4,  // 33: chromite.api.HiddenService.HiddenMethod:output_type -> chromite.api.TestResultMessage
	26, // [26:34] is the sub-list for method output_type
	18, // [18:26] is the sub-list for method input_type
	18, // [18:18] is the sub-list for extension type_name
	18, // [18:18] is the sub-list for extension extendee
	0,  // [0:18] is the sub-list for field type_name
}

func init() { file_chromite_api_build_api_test_proto_init() }
func file_chromite_api_build_api_test_proto_init() {
	if File_chromite_api_build_api_test_proto != nil {
		return
	}
	file_chromite_api_build_api_proto_init()
	if !protoimpl.UnsafeEnabled {
		file_chromite_api_build_api_test_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*NestedPath); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_chromite_api_build_api_test_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*MultiFieldMessage); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_chromite_api_build_api_test_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*TestRequestMessage); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_chromite_api_build_api_test_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*TestResultMessage); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
	}
	type x struct{}
	out := protoimpl.TypeBuilder{
		File: protoimpl.DescBuilder{
			GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
			RawDescriptor: file_chromite_api_build_api_test_proto_rawDesc,
			NumEnums:      1,
			NumMessages:   4,
			NumExtensions: 0,
			NumServices:   4,
		},
		GoTypes:           file_chromite_api_build_api_test_proto_goTypes,
		DependencyIndexes: file_chromite_api_build_api_test_proto_depIdxs,
		EnumInfos:         file_chromite_api_build_api_test_proto_enumTypes,
		MessageInfos:      file_chromite_api_build_api_test_proto_msgTypes,
	}.Build()
	File_chromite_api_build_api_test_proto = out.File
	file_chromite_api_build_api_test_proto_rawDesc = nil
	file_chromite_api_build_api_test_proto_goTypes = nil
	file_chromite_api_build_api_test_proto_depIdxs = nil
}
