// Copyright 2023 The ChromiumOS Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
// 	protoc-gen-go v1.27.1
// 	protoc        v3.17.1
// source: chromite/api/sdk_subtools.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)
)

// Installs and/or updates additional "subtools" packages into an SDK along with
// their dependencies (rebuilding if dependencies have changed). All available
// subtools that are configured are then bundled to be relocatable.
type BuildSdkSubtoolsRequest struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// The chroot to use to execute the endpoint. If this chroot is not already
	// set up as a "subtools" chroot, it will be converted into one.
	Chroot *chromiumos.Chroot `protobuf:"bytes,1,opt,name=chroot,proto3" json:"chroot,omitempty"`
	// Which packages should be built.  The default is
	// ["virtual/target-sdk-subtools"].
	Packages []*chromiumos.PackageInfo `protobuf:"bytes,2,rep,name=packages,proto3" json:"packages,omitempty"`
	// A ResultPath to communicate to the build API how to map paths.
	ResultPath *chromiumos.ResultPath `protobuf:"bytes,3,opt,name=result_path,json=resultPath,proto3" json:"result_path,omitempty"`
}

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

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

func (*BuildSdkSubtoolsRequest) ProtoMessage() {}

func (x *BuildSdkSubtoolsRequest) ProtoReflect() protoreflect.Message {
	mi := &file_chromite_api_sdk_subtools_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 BuildSdkSubtoolsRequest.ProtoReflect.Descriptor instead.
func (*BuildSdkSubtoolsRequest) Descriptor() ([]byte, []int) {
	return file_chromite_api_sdk_subtools_proto_rawDescGZIP(), []int{0}
}

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

func (x *BuildSdkSubtoolsRequest) GetPackages() []*chromiumos.PackageInfo {
	if x != nil {
		return x.Packages
	}
	return nil
}

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

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

	// Packages that failed to install or update during the update phase.
	FailedPackageData []*FailedPackageData `protobuf:"bytes,1,rep,name=failed_package_data,json=failedPackageData,proto3" json:"failed_package_data,omitempty"`
	// The bundled paths, each with upload metadata.
	BundlePaths []*chromiumos.Path `protobuf:"bytes,2,rep,name=bundle_paths,json=bundlePaths,proto3" json:"bundle_paths,omitempty"`
}

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

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

func (*BuildSdkSubtoolsResponse) ProtoMessage() {}

func (x *BuildSdkSubtoolsResponse) ProtoReflect() protoreflect.Message {
	mi := &file_chromite_api_sdk_subtools_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 BuildSdkSubtoolsResponse.ProtoReflect.Descriptor instead.
func (*BuildSdkSubtoolsResponse) Descriptor() ([]byte, []int) {
	return file_chromite_api_sdk_subtools_proto_rawDescGZIP(), []int{1}
}

func (x *BuildSdkSubtoolsResponse) GetFailedPackageData() []*FailedPackageData {
	if x != nil {
		return x.FailedPackageData
	}
	return nil
}

func (x *BuildSdkSubtoolsResponse) GetBundlePaths() []*chromiumos.Path {
	if x != nil {
		return x.BundlePaths
	}
	return nil
}

// Bundles previously created by a BuildSdkSubtoolsRequest are uploaded to a
// storage bucket (e.g., CIPD), after verifying whether they have changed.
type UploadSdkSubtoolsRequest struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// Whether to upload to production environments. When false, uploads will be
	// done to staging environments instead.
	UseProduction bool `protobuf:"varint,1,opt,name=use_production,json=useProduction,proto3" json:"use_production,omitempty"`
	// The pre-bundled paths to upload, each with upload metadata.
	BundlePaths []*chromiumos.Path `protobuf:"bytes,2,rep,name=bundle_paths,json=bundlePaths,proto3" json:"bundle_paths,omitempty"`
}

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

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

func (*UploadSdkSubtoolsRequest) ProtoMessage() {}

func (x *UploadSdkSubtoolsRequest) ProtoReflect() protoreflect.Message {
	mi := &file_chromite_api_sdk_subtools_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 UploadSdkSubtoolsRequest.ProtoReflect.Descriptor instead.
func (*UploadSdkSubtoolsRequest) Descriptor() ([]byte, []int) {
	return file_chromite_api_sdk_subtools_proto_rawDescGZIP(), []int{2}
}

func (x *UploadSdkSubtoolsRequest) GetUseProduction() bool {
	if x != nil {
		return x.UseProduction
	}
	return false
}

func (x *UploadSdkSubtoolsRequest) GetBundlePaths() []*chromiumos.Path {
	if x != nil {
		return x.BundlePaths
	}
	return nil
}

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

	// Text to associate with the step in the luci UI.
	StepText string `protobuf:"bytes,1,opt,name=step_text,json=stepText,proto3" json:"step_text,omitempty"`
	// Summary text in markdown format to use for the overall subtools build.
	SummaryMarkdown string `protobuf:"bytes,2,opt,name=summary_markdown,json=summaryMarkdown,proto3" json:"summary_markdown,omitempty"`
}

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

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

func (*UploadSdkSubtoolsResponse) ProtoMessage() {}

func (x *UploadSdkSubtoolsResponse) ProtoReflect() protoreflect.Message {
	mi := &file_chromite_api_sdk_subtools_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 UploadSdkSubtoolsResponse.ProtoReflect.Descriptor instead.
func (*UploadSdkSubtoolsResponse) Descriptor() ([]byte, []int) {
	return file_chromite_api_sdk_subtools_proto_rawDescGZIP(), []int{3}
}

func (x *UploadSdkSubtoolsResponse) GetStepText() string {
	if x != nil {
		return x.StepText
	}
	return ""
}

func (x *UploadSdkSubtoolsResponse) GetSummaryMarkdown() string {
	if x != nil {
		return x.SummaryMarkdown
	}
	return ""
}

var File_chromite_api_sdk_subtools_proto protoreflect.FileDescriptor

var file_chromite_api_sdk_subtools_proto_rawDesc = []byte{
	0x0a, 0x1f, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x74, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x73,
	0x64, 0x6b, 0x5f, 0x73, 0x75, 0x62, 0x74, 0x6f, 0x6f, 0x6c, 0x73, 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, 0x1a, 0x63,
	0x68, 0x72, 0x6f, 0x6d, 0x69, 0x74, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x73, 0x79, 0x73, 0x72,
	0x6f, 0x6f, 0x74, 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, 0x22, 0xb3, 0x01, 0x0a, 0x17, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x53, 0x64, 0x6b, 0x53,
	0x75, 0x62, 0x74, 0x6f, 0x6f, 0x6c, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2a,
	0x0a, 0x06, 0x63, 0x68, 0x72, 0x6f, 0x6f, 0x74, 0x18, 0x01, 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, 0x33, 0x0a, 0x08, 0x70, 0x61,
	0x63, 0x6b, 0x61, 0x67, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x63,
	0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x6f, 0x73, 0x2e, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67,
	0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x08, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x73, 0x12,
	0x37, 0x0a, 0x0b, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x18, 0x03,
	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, 0x22, 0xa0, 0x01, 0x0a, 0x18, 0x42, 0x75, 0x69,
	0x6c, 0x64, 0x53, 0x64, 0x6b, 0x53, 0x75, 0x62, 0x74, 0x6f, 0x6f, 0x6c, 0x73, 0x52, 0x65, 0x73,
	0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4f, 0x0a, 0x13, 0x66, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x5f,
	0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x03,
	0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x74, 0x65, 0x2e, 0x61, 0x70,
	0x69, 0x2e, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x44,
	0x61, 0x74, 0x61, 0x52, 0x11, 0x66, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x50, 0x61, 0x63, 0x6b, 0x61,
	0x67, 0x65, 0x44, 0x61, 0x74, 0x61, 0x12, 0x33, 0x0a, 0x0c, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65,
	0x5f, 0x70, 0x61, 0x74, 0x68, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x63,
	0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x6f, 0x73, 0x2e, 0x50, 0x61, 0x74, 0x68, 0x52, 0x0b,
	0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x50, 0x61, 0x74, 0x68, 0x73, 0x22, 0x76, 0x0a, 0x18, 0x55,
	0x70, 0x6c, 0x6f, 0x61, 0x64, 0x53, 0x64, 0x6b, 0x53, 0x75, 0x62, 0x74, 0x6f, 0x6f, 0x6c, 0x73,
	0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x25, 0x0a, 0x0e, 0x75, 0x73, 0x65, 0x5f, 0x70,
	0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52,
	0x0d, 0x75, 0x73, 0x65, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x33,
	0x0a, 0x0c, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x73, 0x18, 0x02,
	0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x6f,
	0x73, 0x2e, 0x50, 0x61, 0x74, 0x68, 0x52, 0x0b, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x50, 0x61,
	0x74, 0x68, 0x73, 0x22, 0x63, 0x0a, 0x19, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x53, 0x64, 0x6b,
	0x53, 0x75, 0x62, 0x74, 0x6f, 0x6f, 0x6c, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
	0x12, 0x1b, 0x0a, 0x09, 0x73, 0x74, 0x65, 0x70, 0x5f, 0x74, 0x65, 0x78, 0x74, 0x18, 0x01, 0x20,
	0x01, 0x28, 0x09, 0x52, 0x08, 0x73, 0x74, 0x65, 0x70, 0x54, 0x65, 0x78, 0x74, 0x12, 0x29, 0x0a,
	0x10, 0x73, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x5f, 0x6d, 0x61, 0x72, 0x6b, 0x64, 0x6f, 0x77,
	0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x73, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79,
	0x4d, 0x61, 0x72, 0x6b, 0x64, 0x6f, 0x77, 0x6e, 0x32, 0xfb, 0x01, 0x0a, 0x12, 0x53, 0x64, 0x6b,
	0x53, 0x75, 0x62, 0x74, 0x6f, 0x6f, 0x6c, 0x73, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12,
	0x61, 0x0a, 0x10, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x53, 0x64, 0x6b, 0x53, 0x75, 0x62, 0x74, 0x6f,
	0x6f, 0x6c, 0x73, 0x12, 0x25, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x74, 0x65, 0x2e, 0x61,
	0x70, 0x69, 0x2e, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x53, 0x64, 0x6b, 0x53, 0x75, 0x62, 0x74, 0x6f,
	0x6f, 0x6c, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x63, 0x68, 0x72,
	0x6f, 0x6d, 0x69, 0x74, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x53,
	0x64, 0x6b, 0x53, 0x75, 0x62, 0x74, 0x6f, 0x6f, 0x6c, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
	0x73, 0x65, 0x12, 0x6c, 0x0a, 0x11, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x53, 0x64, 0x6b, 0x53,
	0x75, 0x62, 0x74, 0x6f, 0x6f, 0x6c, 0x73, 0x12, 0x26, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69,
	0x74, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x53, 0x64, 0x6b,
	0x53, 0x75, 0x62, 0x74, 0x6f, 0x6f, 0x6c, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a,
	0x27, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x74, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x55,
	0x70, 0x6c, 0x6f, 0x61, 0x64, 0x53, 0x64, 0x6b, 0x53, 0x75, 0x62, 0x74, 0x6f, 0x6f, 0x6c, 0x73,
	0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06, 0xc2, 0xed, 0x1a, 0x02, 0x10, 0x02,
	0x1a, 0x14, 0xc2, 0xed, 0x1a, 0x10, 0x0a, 0x0c, 0x73, 0x64, 0x6b, 0x5f, 0x73, 0x75, 0x62, 0x74,
	0x6f, 0x6f, 0x6c, 0x73, 0x10, 0x01, 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_sdk_subtools_proto_rawDescOnce sync.Once
	file_chromite_api_sdk_subtools_proto_rawDescData = file_chromite_api_sdk_subtools_proto_rawDesc
)

func file_chromite_api_sdk_subtools_proto_rawDescGZIP() []byte {
	file_chromite_api_sdk_subtools_proto_rawDescOnce.Do(func() {
		file_chromite_api_sdk_subtools_proto_rawDescData = protoimpl.X.CompressGZIP(file_chromite_api_sdk_subtools_proto_rawDescData)
	})
	return file_chromite_api_sdk_subtools_proto_rawDescData
}

var file_chromite_api_sdk_subtools_proto_msgTypes = make([]protoimpl.MessageInfo, 4)
var file_chromite_api_sdk_subtools_proto_goTypes = []interface{}{
	(*BuildSdkSubtoolsRequest)(nil),   // 0: chromite.api.BuildSdkSubtoolsRequest
	(*BuildSdkSubtoolsResponse)(nil),  // 1: chromite.api.BuildSdkSubtoolsResponse
	(*UploadSdkSubtoolsRequest)(nil),  // 2: chromite.api.UploadSdkSubtoolsRequest
	(*UploadSdkSubtoolsResponse)(nil), // 3: chromite.api.UploadSdkSubtoolsResponse
	(*chromiumos.Chroot)(nil),         // 4: chromiumos.Chroot
	(*chromiumos.PackageInfo)(nil),    // 5: chromiumos.PackageInfo
	(*chromiumos.ResultPath)(nil),     // 6: chromiumos.ResultPath
	(*FailedPackageData)(nil),         // 7: chromite.api.FailedPackageData
	(*chromiumos.Path)(nil),           // 8: chromiumos.Path
}
var file_chromite_api_sdk_subtools_proto_depIdxs = []int32{
	4, // 0: chromite.api.BuildSdkSubtoolsRequest.chroot:type_name -> chromiumos.Chroot
	5, // 1: chromite.api.BuildSdkSubtoolsRequest.packages:type_name -> chromiumos.PackageInfo
	6, // 2: chromite.api.BuildSdkSubtoolsRequest.result_path:type_name -> chromiumos.ResultPath
	7, // 3: chromite.api.BuildSdkSubtoolsResponse.failed_package_data:type_name -> chromite.api.FailedPackageData
	8, // 4: chromite.api.BuildSdkSubtoolsResponse.bundle_paths:type_name -> chromiumos.Path
	8, // 5: chromite.api.UploadSdkSubtoolsRequest.bundle_paths:type_name -> chromiumos.Path
	0, // 6: chromite.api.SdkSubtoolsService.BuildSdkSubtools:input_type -> chromite.api.BuildSdkSubtoolsRequest
	2, // 7: chromite.api.SdkSubtoolsService.UploadSdkSubtools:input_type -> chromite.api.UploadSdkSubtoolsRequest
	1, // 8: chromite.api.SdkSubtoolsService.BuildSdkSubtools:output_type -> chromite.api.BuildSdkSubtoolsResponse
	3, // 9: chromite.api.SdkSubtoolsService.UploadSdkSubtools:output_type -> chromite.api.UploadSdkSubtoolsResponse
	8, // [8:10] is the sub-list for method output_type
	6, // [6:8] is the sub-list for method input_type
	6, // [6:6] is the sub-list for extension type_name
	6, // [6:6] is the sub-list for extension extendee
	0, // [0:6] is the sub-list for field type_name
}

func init() { file_chromite_api_sdk_subtools_proto_init() }
func file_chromite_api_sdk_subtools_proto_init() {
	if File_chromite_api_sdk_subtools_proto != nil {
		return
	}
	file_chromite_api_build_api_proto_init()
	file_chromite_api_sysroot_proto_init()
	if !protoimpl.UnsafeEnabled {
		file_chromite_api_sdk_subtools_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*BuildSdkSubtoolsRequest); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_chromite_api_sdk_subtools_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*BuildSdkSubtoolsResponse); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_chromite_api_sdk_subtools_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*UploadSdkSubtoolsRequest); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_chromite_api_sdk_subtools_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*UploadSdkSubtoolsResponse); 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_sdk_subtools_proto_rawDesc,
			NumEnums:      0,
			NumMessages:   4,
			NumExtensions: 0,
			NumServices:   1,
		},
		GoTypes:           file_chromite_api_sdk_subtools_proto_goTypes,
		DependencyIndexes: file_chromite_api_sdk_subtools_proto_depIdxs,
		MessageInfos:      file_chromite_api_sdk_subtools_proto_msgTypes,
	}.Build()
	File_chromite_api_sdk_subtools_proto = out.File
	file_chromite_api_sdk_subtools_proto_rawDesc = nil
	file_chromite_api_sdk_subtools_proto_goTypes = nil
	file_chromite_api_sdk_subtools_proto_depIdxs = nil
}
