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

package api

import (
	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)
)

// Compile Build API proto endpoint request.
type CompileProtoRequest struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields
}

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

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

func (*CompileProtoRequest) ProtoMessage() {}

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

// Compile Build API proto endpoint response.
type CompileProtoResponse struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// The files that changed.
	ModifiedFiles []*CompileProtoResponse_ProtoFile `protobuf:"bytes,1,rep,name=modified_files,json=modifiedFiles,proto3" json:"modified_files,omitempty"`
}

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

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

func (*CompileProtoResponse) ProtoMessage() {}

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

func (x *CompileProtoResponse) GetModifiedFiles() []*CompileProtoResponse_ProtoFile {
	if x != nil {
		return x.ModifiedFiles
	}
	return nil
}

// Request for the method discovery endpoint.
type MethodGetRequest struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields
}

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

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

func (*MethodGetRequest) ProtoMessage() {}

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

// Response from the method discovery endpoint.
type MethodGetResponse struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// All registered methods.
	Methods []*MethodGetResponse_Method `protobuf:"bytes,1,rep,name=methods,proto3" json:"methods,omitempty"`
}

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

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

func (*MethodGetResponse) ProtoMessage() {}

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

func (x *MethodGetResponse) GetMethods() []*MethodGetResponse_Method {
	if x != nil {
		return x.Methods
	}
	return nil
}

// Request for the API (major) version number.
type VersionGetRequest struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields
}

func (x *VersionGetRequest) Reset() {
	*x = VersionGetRequest{}
	if protoimpl.UnsafeEnabled {
		mi := &file_chromite_api_api_proto_msgTypes[4]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

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

func (*VersionGetRequest) ProtoMessage() {}

func (x *VersionGetRequest) ProtoReflect() protoreflect.Message {
	mi := &file_chromite_api_api_proto_msgTypes[4]
	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 VersionGetRequest.ProtoReflect.Descriptor instead.
func (*VersionGetRequest) Descriptor() ([]byte, []int) {
	return file_chromite_api_api_proto_rawDescGZIP(), []int{4}
}

// Response with the API (major) version number.
type VersionGetResponse struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	Version *VersionGetResponse_Version `protobuf:"bytes,1,opt,name=version,proto3" json:"version,omitempty"`
}

func (x *VersionGetResponse) Reset() {
	*x = VersionGetResponse{}
	if protoimpl.UnsafeEnabled {
		mi := &file_chromite_api_api_proto_msgTypes[5]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

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

func (*VersionGetResponse) ProtoMessage() {}

func (x *VersionGetResponse) ProtoReflect() protoreflect.Message {
	mi := &file_chromite_api_api_proto_msgTypes[5]
	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 VersionGetResponse.ProtoReflect.Descriptor instead.
func (*VersionGetResponse) Descriptor() ([]byte, []int) {
	return file_chromite_api_api_proto_rawDescGZIP(), []int{5}
}

func (x *VersionGetResponse) GetVersion() *VersionGetResponse_Version {
	if x != nil {
		return x.Version
	}
	return nil
}

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

	// The proto file's path.
	Path string `protobuf:"bytes,1,opt,name=path,proto3" json:"path,omitempty"`
}

func (x *CompileProtoResponse_ProtoFile) Reset() {
	*x = CompileProtoResponse_ProtoFile{}
	if protoimpl.UnsafeEnabled {
		mi := &file_chromite_api_api_proto_msgTypes[6]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

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

func (*CompileProtoResponse_ProtoFile) ProtoMessage() {}

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

func (x *CompileProtoResponse_ProtoFile) GetPath() string {
	if x != nil {
		return x.Path
	}
	return ""
}

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

	// The full method name, i.e. package.Service/Method.
	Method string `protobuf:"bytes,1,opt,name=method,proto3" json:"method,omitempty"`
}

func (x *MethodGetResponse_Method) Reset() {
	*x = MethodGetResponse_Method{}
	if protoimpl.UnsafeEnabled {
		mi := &file_chromite_api_api_proto_msgTypes[7]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

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

func (*MethodGetResponse_Method) ProtoMessage() {}

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

func (x *MethodGetResponse_Method) GetMethod() string {
	if x != nil {
		return x.Method
	}
	return ""
}

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

	// Version number components: "major.minor.bug".
	Major int32 `protobuf:"varint,1,opt,name=major,proto3" json:"major,omitempty"`
	Minor int32 `protobuf:"varint,2,opt,name=minor,proto3" json:"minor,omitempty"`
	Bug   int32 `protobuf:"varint,3,opt,name=bug,proto3" json:"bug,omitempty"`
}

func (x *VersionGetResponse_Version) Reset() {
	*x = VersionGetResponse_Version{}
	if protoimpl.UnsafeEnabled {
		mi := &file_chromite_api_api_proto_msgTypes[8]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

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

func (*VersionGetResponse_Version) ProtoMessage() {}

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

func (x *VersionGetResponse_Version) GetMajor() int32 {
	if x != nil {
		return x.Major
	}
	return 0
}

func (x *VersionGetResponse_Version) GetMinor() int32 {
	if x != nil {
		return x.Minor
	}
	return 0
}

func (x *VersionGetResponse_Version) GetBug() int32 {
	if x != nil {
		return x.Bug
	}
	return 0
}

var File_chromite_api_api_proto protoreflect.FileDescriptor

var file_chromite_api_api_proto_rawDesc = []byte{
	0x0a, 0x16, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x74, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61,
	0x70, 0x69, 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, 0x22, 0x15, 0x0a, 0x13, 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x50,
	0x72, 0x6f, 0x74, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x8c, 0x01, 0x0a, 0x14,
	0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x52, 0x65, 0x73, 0x70,
	0x6f, 0x6e, 0x73, 0x65, 0x12, 0x53, 0x0a, 0x0e, 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65, 0x64,
	0x5f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x63,
	0x68, 0x72, 0x6f, 0x6d, 0x69, 0x74, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x43, 0x6f, 0x6d, 0x70,
	0x69, 0x6c, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
	0x2e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x46, 0x69, 0x6c, 0x65, 0x52, 0x0d, 0x6d, 0x6f, 0x64, 0x69,
	0x66, 0x69, 0x65, 0x64, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x1a, 0x1f, 0x0a, 0x09, 0x50, 0x72, 0x6f,
	0x74, 0x6f, 0x46, 0x69, 0x6c, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x01,
	0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x22, 0x12, 0x0a, 0x10, 0x4d, 0x65,
	0x74, 0x68, 0x6f, 0x64, 0x47, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x77,
	0x0a, 0x11, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x47, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f,
	0x6e, 0x73, 0x65, 0x12, 0x40, 0x0a, 0x07, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x73, 0x18, 0x01,
	0x20, 0x03, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x74, 0x65, 0x2e,
	0x61, 0x70, 0x69, 0x2e, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x47, 0x65, 0x74, 0x52, 0x65, 0x73,
	0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x52, 0x07, 0x6d, 0x65,
	0x74, 0x68, 0x6f, 0x64, 0x73, 0x1a, 0x20, 0x0a, 0x06, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x12,
	0x16, 0x0a, 0x06, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52,
	0x06, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x22, 0x13, 0x0a, 0x11, 0x56, 0x65, 0x72, 0x73, 0x69,
	0x6f, 0x6e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0xa1, 0x01, 0x0a,
	0x12, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f,
	0x6e, 0x73, 0x65, 0x12, 0x42, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01,
	0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x74, 0x65, 0x2e,
	0x61, 0x70, 0x69, 0x2e, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x47, 0x65, 0x74, 0x52, 0x65,
	0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x07,
	0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x1a, 0x47, 0x0a, 0x07, 0x56, 0x65, 0x72, 0x73, 0x69,
	0x6f, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x6d, 0x61, 0x6a, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28,
	0x05, 0x52, 0x05, 0x6d, 0x61, 0x6a, 0x6f, 0x72, 0x12, 0x14, 0x0a, 0x05, 0x6d, 0x69, 0x6e, 0x6f,
	0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x6d, 0x69, 0x6e, 0x6f, 0x72, 0x12, 0x10,
	0x0a, 0x03, 0x62, 0x75, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x62, 0x75, 0x67,
	0x32, 0x70, 0x0a, 0x0a, 0x41, 0x70, 0x69, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x55,
	0x0a, 0x0c, 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x21,
	0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x74, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x43, 0x6f,
	0x6d, 0x70, 0x69, 0x6c, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
	0x74, 0x1a, 0x22, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x74, 0x65, 0x2e, 0x61, 0x70, 0x69,
	0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x52, 0x65, 0x73,
	0x70, 0x6f, 0x6e, 0x73, 0x65, 0x1a, 0x0b, 0xc2, 0xed, 0x1a, 0x07, 0x0a, 0x03, 0x61, 0x70, 0x69,
	0x10, 0x02, 0x32, 0x76, 0x0a, 0x0d, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x53, 0x65, 0x72, 0x76,
	0x69, 0x63, 0x65, 0x12, 0x58, 0x0a, 0x03, 0x47, 0x65, 0x74, 0x12, 0x1e, 0x2e, 0x63, 0x68, 0x72,
	0x6f, 0x6d, 0x69, 0x74, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64,
	0x47, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x63, 0x68, 0x72,
	0x6f, 0x6d, 0x69, 0x74, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64,
	0x47, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x10, 0xc2, 0xed, 0x1a,
	0x0c, 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x73, 0x1a, 0x0b, 0xc2,
	0xed, 0x1a, 0x07, 0x0a, 0x03, 0x61, 0x70, 0x69, 0x10, 0x02, 0x32, 0x79, 0x0a, 0x0e, 0x56, 0x65,
	0x72, 0x73, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x5a, 0x0a, 0x03,
	0x47, 0x65, 0x74, 0x12, 0x1f, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x74, 0x65, 0x2e, 0x61,
	0x70, 0x69, 0x2e, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x71,
	0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x74, 0x65, 0x2e,
	0x61, 0x70, 0x69, 0x2e, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x47, 0x65, 0x74, 0x52, 0x65,
	0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x10, 0xc2, 0xed, 0x1a, 0x0c, 0x0a, 0x0a, 0x47, 0x65,
	0x74, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x1a, 0x0b, 0xc2, 0xed, 0x1a, 0x07, 0x0a, 0x03,
	0x61, 0x70, 0x69, 0x10, 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_api_proto_rawDescOnce sync.Once
	file_chromite_api_api_proto_rawDescData = file_chromite_api_api_proto_rawDesc
)

func file_chromite_api_api_proto_rawDescGZIP() []byte {
	file_chromite_api_api_proto_rawDescOnce.Do(func() {
		file_chromite_api_api_proto_rawDescData = protoimpl.X.CompressGZIP(file_chromite_api_api_proto_rawDescData)
	})
	return file_chromite_api_api_proto_rawDescData
}

var file_chromite_api_api_proto_msgTypes = make([]protoimpl.MessageInfo, 9)
var file_chromite_api_api_proto_goTypes = []interface{}{
	(*CompileProtoRequest)(nil),            // 0: chromite.api.CompileProtoRequest
	(*CompileProtoResponse)(nil),           // 1: chromite.api.CompileProtoResponse
	(*MethodGetRequest)(nil),               // 2: chromite.api.MethodGetRequest
	(*MethodGetResponse)(nil),              // 3: chromite.api.MethodGetResponse
	(*VersionGetRequest)(nil),              // 4: chromite.api.VersionGetRequest
	(*VersionGetResponse)(nil),             // 5: chromite.api.VersionGetResponse
	(*CompileProtoResponse_ProtoFile)(nil), // 6: chromite.api.CompileProtoResponse.ProtoFile
	(*MethodGetResponse_Method)(nil),       // 7: chromite.api.MethodGetResponse.Method
	(*VersionGetResponse_Version)(nil),     // 8: chromite.api.VersionGetResponse.Version
}
var file_chromite_api_api_proto_depIdxs = []int32{
	6, // 0: chromite.api.CompileProtoResponse.modified_files:type_name -> chromite.api.CompileProtoResponse.ProtoFile
	7, // 1: chromite.api.MethodGetResponse.methods:type_name -> chromite.api.MethodGetResponse.Method
	8, // 2: chromite.api.VersionGetResponse.version:type_name -> chromite.api.VersionGetResponse.Version
	0, // 3: chromite.api.ApiService.CompileProto:input_type -> chromite.api.CompileProtoRequest
	2, // 4: chromite.api.MethodService.Get:input_type -> chromite.api.MethodGetRequest
	4, // 5: chromite.api.VersionService.Get:input_type -> chromite.api.VersionGetRequest
	1, // 6: chromite.api.ApiService.CompileProto:output_type -> chromite.api.CompileProtoResponse
	3, // 7: chromite.api.MethodService.Get:output_type -> chromite.api.MethodGetResponse
	5, // 8: chromite.api.VersionService.Get:output_type -> chromite.api.VersionGetResponse
	6, // [6:9] is the sub-list for method output_type
	3, // [3:6] is the sub-list for method input_type
	3, // [3:3] is the sub-list for extension type_name
	3, // [3:3] is the sub-list for extension extendee
	0, // [0:3] is the sub-list for field type_name
}

func init() { file_chromite_api_api_proto_init() }
func file_chromite_api_api_proto_init() {
	if File_chromite_api_api_proto != nil {
		return
	}
	file_chromite_api_build_api_proto_init()
	if !protoimpl.UnsafeEnabled {
		file_chromite_api_api_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*CompileProtoRequest); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_chromite_api_api_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*CompileProtoResponse); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_chromite_api_api_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*MethodGetRequest); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_chromite_api_api_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*MethodGetResponse); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_chromite_api_api_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*VersionGetRequest); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_chromite_api_api_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*VersionGetResponse); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_chromite_api_api_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*CompileProtoResponse_ProtoFile); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_chromite_api_api_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*MethodGetResponse_Method); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_chromite_api_api_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*VersionGetResponse_Version); 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_api_proto_rawDesc,
			NumEnums:      0,
			NumMessages:   9,
			NumExtensions: 0,
			NumServices:   3,
		},
		GoTypes:           file_chromite_api_api_proto_goTypes,
		DependencyIndexes: file_chromite_api_api_proto_depIdxs,
		MessageInfos:      file_chromite_api_api_proto_msgTypes,
	}.Build()
	File_chromite_api_api_proto = out.File
	file_chromite_api_api_proto_rawDesc = nil
	file_chromite_api_api_proto_goTypes = nil
	file_chromite_api_api_proto_depIdxs = nil
}
