// Code generated by protoc-gen-go. DO NOT EDIT.
// source: chromite/api/build_api.proto

package api

import (
	fmt "fmt"
	proto "github.com/golang/protobuf/proto"
	descriptor "github.com/golang/protobuf/protoc-gen-go/descriptor"
	math "math"
)

// Reference imports to suppress errors if they are not otherwise used.
var _ = proto.Marshal
var _ = fmt.Errorf
var _ = math.Inf

// This is a compile-time assertion to ensure that this generated file
// is compatible with the proto package it is being compiled against.
// A compilation error at this line likely means your copy of the
// proto package needs to be updated.
const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package

// Config to allow chroot assertions to be made via service/method options.
type ChrootAssertion int32

const (
	ChrootAssertion_NO_ASSERTION ChrootAssertion = 0
	ChrootAssertion_INSIDE       ChrootAssertion = 1
	ChrootAssertion_OUTSIDE      ChrootAssertion = 2
)

var ChrootAssertion_name = map[int32]string{
	0: "NO_ASSERTION",
	1: "INSIDE",
	2: "OUTSIDE",
}

var ChrootAssertion_value = map[string]int32{
	"NO_ASSERTION": 0,
	"INSIDE":       1,
	"OUTSIDE":      2,
}

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

func (x ChrootAssertion) String() string {
	return proto.EnumName(ChrootAssertion_name, int32(x))
}

func (x *ChrootAssertion) UnmarshalJSON(data []byte) error {
	value, err := proto.UnmarshalJSONEnum(ChrootAssertion_value, data, "ChrootAssertion")
	if err != nil {
		return err
	}
	*x = ChrootAssertion(value)
	return nil
}

func (ChrootAssertion) EnumDescriptor() ([]byte, []int) {
	return fileDescriptor_a86250b41aac8678, []int{0}
}

// Custom Service options.
type BuildApiServiceOptions struct {
	// The name of the controller module implementing the service.
	Module *string `protobuf:"bytes,1,req,name=module" json:"module,omitempty"`
	// Assert any methods in the service are run inside/outside the chroot when
	// specified, unless overridden by the method config.
	ServiceChrootAssert  *ChrootAssertion `protobuf:"varint,2,opt,name=service_chroot_assert,json=serviceChrootAssert,enum=ChrootAssertion" json:"service_chroot_assert,omitempty"`
	XXX_NoUnkeyedLiteral struct{}         `json:"-"`
	XXX_unrecognized     []byte           `json:"-"`
	XXX_sizecache        int32            `json:"-"`
}

func (m *BuildApiServiceOptions) Reset()         { *m = BuildApiServiceOptions{} }
func (m *BuildApiServiceOptions) String() string { return proto.CompactTextString(m) }
func (*BuildApiServiceOptions) ProtoMessage()    {}
func (*BuildApiServiceOptions) Descriptor() ([]byte, []int) {
	return fileDescriptor_a86250b41aac8678, []int{0}
}

func (m *BuildApiServiceOptions) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_BuildApiServiceOptions.Unmarshal(m, b)
}
func (m *BuildApiServiceOptions) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_BuildApiServiceOptions.Marshal(b, m, deterministic)
}
func (m *BuildApiServiceOptions) XXX_Merge(src proto.Message) {
	xxx_messageInfo_BuildApiServiceOptions.Merge(m, src)
}
func (m *BuildApiServiceOptions) XXX_Size() int {
	return xxx_messageInfo_BuildApiServiceOptions.Size(m)
}
func (m *BuildApiServiceOptions) XXX_DiscardUnknown() {
	xxx_messageInfo_BuildApiServiceOptions.DiscardUnknown(m)
}

var xxx_messageInfo_BuildApiServiceOptions proto.InternalMessageInfo

func (m *BuildApiServiceOptions) GetModule() string {
	if m != nil && m.Module != nil {
		return *m.Module
	}
	return ""
}

func (m *BuildApiServiceOptions) GetServiceChrootAssert() ChrootAssertion {
	if m != nil && m.ServiceChrootAssert != nil {
		return *m.ServiceChrootAssert
	}
	return ChrootAssertion_NO_ASSERTION
}

// Custom Method options.
type BuildApiMethodOptions struct {
	// The name of the function implementing the method if different than the
	// method name defined in the .proto.
	ImplementationName *string `protobuf:"bytes,1,opt,name=implementation_name,json=implementationName" json:"implementation_name,omitempty"`
	// Assert the method is run inside/outside the chroot when specified,
	// overriding the service config when set.
	MethodChrootAssert   *ChrootAssertion `protobuf:"varint,2,opt,name=method_chroot_assert,json=methodChrootAssert,enum=ChrootAssertion" json:"method_chroot_assert,omitempty"`
	XXX_NoUnkeyedLiteral struct{}         `json:"-"`
	XXX_unrecognized     []byte           `json:"-"`
	XXX_sizecache        int32            `json:"-"`
}

func (m *BuildApiMethodOptions) Reset()         { *m = BuildApiMethodOptions{} }
func (m *BuildApiMethodOptions) String() string { return proto.CompactTextString(m) }
func (*BuildApiMethodOptions) ProtoMessage()    {}
func (*BuildApiMethodOptions) Descriptor() ([]byte, []int) {
	return fileDescriptor_a86250b41aac8678, []int{1}
}

func (m *BuildApiMethodOptions) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_BuildApiMethodOptions.Unmarshal(m, b)
}
func (m *BuildApiMethodOptions) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_BuildApiMethodOptions.Marshal(b, m, deterministic)
}
func (m *BuildApiMethodOptions) XXX_Merge(src proto.Message) {
	xxx_messageInfo_BuildApiMethodOptions.Merge(m, src)
}
func (m *BuildApiMethodOptions) XXX_Size() int {
	return xxx_messageInfo_BuildApiMethodOptions.Size(m)
}
func (m *BuildApiMethodOptions) XXX_DiscardUnknown() {
	xxx_messageInfo_BuildApiMethodOptions.DiscardUnknown(m)
}

var xxx_messageInfo_BuildApiMethodOptions proto.InternalMessageInfo

func (m *BuildApiMethodOptions) GetImplementationName() string {
	if m != nil && m.ImplementationName != nil {
		return *m.ImplementationName
	}
	return ""
}

func (m *BuildApiMethodOptions) GetMethodChrootAssert() ChrootAssertion {
	if m != nil && m.MethodChrootAssert != nil {
		return *m.MethodChrootAssert
	}
	return ChrootAssertion_NO_ASSERTION
}

var E_ServiceOptions = &proto.ExtensionDesc{
	ExtendedType:  (*descriptor.ServiceOptions)(nil),
	ExtensionType: (*BuildApiServiceOptions)(nil),
	Field:         55000,
	Name:          "service_options",
	Tag:           "bytes,55000,opt,name=service_options",
	Filename:      "chromite/api/build_api.proto",
}

var E_MethodOptions = &proto.ExtensionDesc{
	ExtendedType:  (*descriptor.MethodOptions)(nil),
	ExtensionType: (*BuildApiMethodOptions)(nil),
	Field:         55000,
	Name:          "method_options",
	Tag:           "bytes,55000,opt,name=method_options",
	Filename:      "chromite/api/build_api.proto",
}

func init() {
	proto.RegisterEnum("ChrootAssertion", ChrootAssertion_name, ChrootAssertion_value)
	proto.RegisterType((*BuildApiServiceOptions)(nil), "BuildApiServiceOptions")
	proto.RegisterType((*BuildApiMethodOptions)(nil), "BuildApiMethodOptions")
	proto.RegisterExtension(E_ServiceOptions)
	proto.RegisterExtension(E_MethodOptions)
}

func init() { proto.RegisterFile("chromite/api/build_api.proto", fileDescriptor_a86250b41aac8678) }

var fileDescriptor_a86250b41aac8678 = []byte{
	// 363 bytes of a gzipped FileDescriptorProto
	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x92, 0xcd, 0x6e, 0xda, 0x40,
	0x14, 0x85, 0x6b, 0x2a, 0x51, 0x31, 0xb4, 0x60, 0x0d, 0x85, 0xa2, 0xaa, 0x6a, 0x2d, 0x56, 0x56,
	0x17, 0x33, 0x12, 0x8b, 0xaa, 0x42, 0xd9, 0x40, 0x60, 0xc1, 0x22, 0xb6, 0x64, 0x93, 0x4d, 0x36,
	0x96, 0xb1, 0x07, 0x33, 0x92, 0xc7, 0xd7, 0x1a, 0x8f, 0x79, 0x8a, 0xbc, 0x4a, 0xde, 0x27, 0x8f,
	0x13, 0xf9, 0x2f, 0xb2, 0x13, 0x16, 0x59, 0x9e, 0xe3, 0xe3, 0x39, 0xf7, 0x7e, 0xba, 0xe8, 0x57,
	0x70, 0x96, 0x20, 0xb8, 0x62, 0xd4, 0x4f, 0x39, 0x3d, 0xe6, 0x3c, 0x0e, 0x3d, 0x3f, 0xe5, 0x24,
	0x95, 0xa0, 0xe0, 0xa7, 0x11, 0x01, 0x44, 0x31, 0xa3, 0xa5, 0x3a, 0xe6, 0x27, 0x1a, 0xb2, 0x2c,
	0x90, 0x3c, 0x55, 0x20, 0xab, 0xc4, 0xe2, 0x82, 0x66, 0x9b, 0xe2, 0xa7, 0x75, 0xca, 0x5d, 0x26,
	0x2f, 0x3c, 0x60, 0x76, 0xaa, 0x38, 0x24, 0x19, 0x9e, 0xa1, 0xbe, 0x80, 0x30, 0x8f, 0xd9, 0x5c,
	0x33, 0x7a, 0xe6, 0xc0, 0xa9, 0x15, 0xde, 0xa2, 0x69, 0x56, 0x25, 0xbd, 0xa2, 0x1b, 0x94, 0xe7,
	0x67, 0x19, 0x93, 0x6a, 0xde, 0x33, 0x34, 0x73, 0xb4, 0xd4, 0xc9, 0x6d, 0xe9, 0xae, 0x4b, 0x93,
	0x43, 0xe2, 0x4c, 0xea, 0x78, 0xdb, 0x5f, 0x3c, 0x6a, 0x68, 0xda, 0x14, 0xdf, 0x31, 0x75, 0x86,
	0xb0, 0xe9, 0xa5, 0x68, 0xc2, 0x45, 0x1a, 0x33, 0xc1, 0x12, 0xe5, 0x17, 0x96, 0x97, 0xf8, 0xa2,
	0x18, 0x42, 0x33, 0x07, 0x0e, 0xee, 0x7e, 0xb2, 0x7c, 0xc1, 0xf0, 0x06, 0x7d, 0x17, 0xe5, 0x0b,
	0x1f, 0x9c, 0x07, 0x57, 0xe9, 0xb6, 0xfd, 0xf7, 0x06, 0x8d, 0xdf, 0xc4, 0xb0, 0x8e, 0xbe, 0x5a,
	0xb6, 0xb7, 0x76, 0xdd, 0x9d, 0x73, 0xd8, 0xdb, 0x96, 0xfe, 0x09, 0x23, 0xd4, 0xdf, 0x5b, 0xee,
	0x7e, 0xbb, 0xd3, 0x35, 0x3c, 0x44, 0x5f, 0xec, 0xfb, 0x43, 0x29, 0x7a, 0xab, 0x00, 0x8d, 0x1b,
	0x24, 0x50, 0x6f, 0xf1, 0x87, 0x54, 0xe8, 0x49, 0x83, 0x9e, 0x74, 0xf1, 0xce, 0x9f, 0x9f, 0x3e,
	0x1b, 0x9a, 0x39, 0x5c, 0xfe, 0x20, 0xd7, 0xf9, 0x3b, 0xa3, 0xac, 0xa3, 0x57, 0x1e, 0x1a, 0xd5,
	0x6b, 0x36, 0x1d, 0xbf, 0xdf, 0x75, 0x74, 0x48, 0xbe, 0x56, 0xcc, 0xc8, 0x55, 0xd2, 0xce, 0x37,
	0xd1, 0x96, 0x9b, 0xff, 0x0f, 0xff, 0x22, 0x20, 0xd5, 0x3d, 0xe5, 0x82, 0x80, 0x8c, 0x68, 0x23,
	0x20, 0xa3, 0x3c, 0x39, 0x49, 0xbf, 0x3a, 0x24, 0x1a, 0x01, 0x6d, 0x9f, 0xdd, 0x4b, 0x00, 0x00,
	0x00, 0xff, 0xff, 0x8d, 0xe5, 0xbd, 0xfe, 0x85, 0x02, 0x00, 0x00,
}
