// Code generated by protoc-gen-go. DO NOT EDIT.
// source: google/devtools/resultstore/v2/target.proto

package resultstore

import (
	fmt "fmt"
	math "math"

	proto "github.com/golang/protobuf/proto"
)

// 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

// These correspond to the suffix of the rule name. Eg cc_test has type TEST.
type TargetType int32

const (
	// Unspecified by the build system.
	TargetType_TARGET_TYPE_UNSPECIFIED TargetType = 0
	// An application e.g. ios_application.
	TargetType_APPLICATION TargetType = 1
	// A binary target e.g. cc_binary.
	TargetType_BINARY TargetType = 2
	// A library target e.g. java_library
	TargetType_LIBRARY TargetType = 3
	// A package
	TargetType_PACKAGE TargetType = 4
	// Any test target, in bazel that means a rule with a '_test' suffix.
	TargetType_TEST TargetType = 5
)

var TargetType_name = map[int32]string{
	0: "TARGET_TYPE_UNSPECIFIED",
	1: "APPLICATION",
	2: "BINARY",
	3: "LIBRARY",
	4: "PACKAGE",
	5: "TEST",
}

var TargetType_value = map[string]int32{
	"TARGET_TYPE_UNSPECIFIED": 0,
	"APPLICATION":             1,
	"BINARY":                  2,
	"LIBRARY":                 3,
	"PACKAGE":                 4,
	"TEST":                    5,
}

func (x TargetType) String() string {
	return proto.EnumName(TargetType_name, int32(x))
}

func (TargetType) EnumDescriptor() ([]byte, []int) {
	return fileDescriptor_b4e9059e809e996c, []int{0}
}

// Indicates how big the user indicated the test action was.
type TestSize int32

const (
	// Unspecified by the user.
	TestSize_TEST_SIZE_UNSPECIFIED TestSize = 0
	// Unit test taking less than 1 minute.
	TestSize_SMALL TestSize = 1
	// Integration tests taking less than 5 minutes.
	TestSize_MEDIUM TestSize = 2
	// End-to-end tests taking less than 15 minutes.
	TestSize_LARGE TestSize = 3
	// Even bigger than LARGE.
	TestSize_ENORMOUS TestSize = 4
	// Something that doesn't fit into the above categories.
	TestSize_OTHER_SIZE TestSize = 5
)

var TestSize_name = map[int32]string{
	0: "TEST_SIZE_UNSPECIFIED",
	1: "SMALL",
	2: "MEDIUM",
	3: "LARGE",
	4: "ENORMOUS",
	5: "OTHER_SIZE",
}

var TestSize_value = map[string]int32{
	"TEST_SIZE_UNSPECIFIED": 0,
	"SMALL":                 1,
	"MEDIUM":                2,
	"LARGE":                 3,
	"ENORMOUS":              4,
	"OTHER_SIZE":            5,
}

func (x TestSize) String() string {
	return proto.EnumName(TestSize_name, int32(x))
}

func (TestSize) EnumDescriptor() ([]byte, []int) {
	return fileDescriptor_b4e9059e809e996c, []int{1}
}

// Each Target represents data for a given target in a given Invocation.
// ConfiguredTarget and Action resources under each Target contain the bulk of
// the data.
type Target struct {
	// The resource name.  Its format must be:
	// invocations/${INVOCATION_ID}/targets/${TARGET_ID}
	Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
	// The resource ID components that identify the Target. They must match the
	// resource name after proper encoding.
	Id *Target_Id `protobuf:"bytes,2,opt,name=id,proto3" json:"id,omitempty"`
	// This is the aggregate status of the target.
	StatusAttributes *StatusAttributes `protobuf:"bytes,3,opt,name=status_attributes,json=statusAttributes,proto3" json:"status_attributes,omitempty"`
	// When this target started and its duration.
	Timing *Timing `protobuf:"bytes,4,opt,name=timing,proto3" json:"timing,omitempty"`
	// Attributes that apply to all targets.
	TargetAttributes *TargetAttributes `protobuf:"bytes,5,opt,name=target_attributes,json=targetAttributes,proto3" json:"target_attributes,omitempty"`
	// Attributes that apply to all test actions under this target.
	TestAttributes *TestAttributes `protobuf:"bytes,6,opt,name=test_attributes,json=testAttributes,proto3" json:"test_attributes,omitempty"`
	// Arbitrary name-value pairs.
	// This is implemented as a multi-map. Multiple properties are allowed with
	// the same key. Properties will be returned in lexicographical order by key.
	Properties []*Property `protobuf:"bytes,7,rep,name=properties,proto3" json:"properties,omitempty"`
	// A list of file references for target level files.
	// The file IDs must be unique within this list. Duplicate file IDs will
	// result in an error. Files will be returned in lexicographical order by ID.
	// Use this field to specify outputs not related to a configuration.
	Files []*File `protobuf:"bytes,8,rep,name=files,proto3" json:"files,omitempty"`
	// Provides a hint to clients as to whether to display the Target to users.
	// If true then clients likely want to display the Target by default.
	// Once set to true, this may not be set back to false.
	Visible              bool     `protobuf:"varint,10,opt,name=visible,proto3" json:"visible,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

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

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

var xxx_messageInfo_Target proto.InternalMessageInfo

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

func (m *Target) GetId() *Target_Id {
	if m != nil {
		return m.Id
	}
	return nil
}

func (m *Target) GetStatusAttributes() *StatusAttributes {
	if m != nil {
		return m.StatusAttributes
	}
	return nil
}

func (m *Target) GetTiming() *Timing {
	if m != nil {
		return m.Timing
	}
	return nil
}

func (m *Target) GetTargetAttributes() *TargetAttributes {
	if m != nil {
		return m.TargetAttributes
	}
	return nil
}

func (m *Target) GetTestAttributes() *TestAttributes {
	if m != nil {
		return m.TestAttributes
	}
	return nil
}

func (m *Target) GetProperties() []*Property {
	if m != nil {
		return m.Properties
	}
	return nil
}

func (m *Target) GetFiles() []*File {
	if m != nil {
		return m.Files
	}
	return nil
}

func (m *Target) GetVisible() bool {
	if m != nil {
		return m.Visible
	}
	return false
}

// The resource ID components that identify the Target.
type Target_Id struct {
	// The Invocation ID.
	InvocationId string `protobuf:"bytes,1,opt,name=invocation_id,json=invocationId,proto3" json:"invocation_id,omitempty"`
	// The Target ID.
	TargetId             string   `protobuf:"bytes,2,opt,name=target_id,json=targetId,proto3" json:"target_id,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

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

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

var xxx_messageInfo_Target_Id proto.InternalMessageInfo

func (m *Target_Id) GetInvocationId() string {
	if m != nil {
		return m.InvocationId
	}
	return ""
}

func (m *Target_Id) GetTargetId() string {
	if m != nil {
		return m.TargetId
	}
	return ""
}

// Attributes that apply to all targets.
type TargetAttributes struct {
	// If known, indicates the type of this target.  In bazel this corresponds
	// to the rule-suffix.
	Type TargetType `protobuf:"varint,1,opt,name=type,proto3,enum=google.devtools.resultstore.v2.TargetType" json:"type,omitempty"`
	// If known, the main language of this target, e.g. java, cc, python, etc.
	Language Language `protobuf:"varint,2,opt,name=language,proto3,enum=google.devtools.resultstore.v2.Language" json:"language,omitempty"`
	// The tags attribute of the build rule. These should be short, descriptive
	// words, and there should only be a few of them.
	// This is implemented as a set. All tags will be unique. Any duplicate tags
	// will be ignored. Tags will be returned in lexicographical order.
	Tags                 []string `protobuf:"bytes,3,rep,name=tags,proto3" json:"tags,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

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

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

var xxx_messageInfo_TargetAttributes proto.InternalMessageInfo

func (m *TargetAttributes) GetType() TargetType {
	if m != nil {
		return m.Type
	}
	return TargetType_TARGET_TYPE_UNSPECIFIED
}

func (m *TargetAttributes) GetLanguage() Language {
	if m != nil {
		return m.Language
	}
	return Language_LANGUAGE_UNSPECIFIED
}

func (m *TargetAttributes) GetTags() []string {
	if m != nil {
		return m.Tags
	}
	return nil
}

// Attributes that apply only to test actions under this target.
type TestAttributes struct {
	// Indicates how big the user indicated the test action was.
	Size                 TestSize `protobuf:"varint,1,opt,name=size,proto3,enum=google.devtools.resultstore.v2.TestSize" json:"size,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *TestAttributes) Reset()         { *m = TestAttributes{} }
func (m *TestAttributes) String() string { return proto.CompactTextString(m) }
func (*TestAttributes) ProtoMessage()    {}
func (*TestAttributes) Descriptor() ([]byte, []int) {
	return fileDescriptor_b4e9059e809e996c, []int{2}
}

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

var xxx_messageInfo_TestAttributes proto.InternalMessageInfo

func (m *TestAttributes) GetSize() TestSize {
	if m != nil {
		return m.Size
	}
	return TestSize_TEST_SIZE_UNSPECIFIED
}

func init() {
	proto.RegisterEnum("google.devtools.resultstore.v2.TargetType", TargetType_name, TargetType_value)
	proto.RegisterEnum("google.devtools.resultstore.v2.TestSize", TestSize_name, TestSize_value)
	proto.RegisterType((*Target)(nil), "google.devtools.resultstore.v2.Target")
	proto.RegisterType((*Target_Id)(nil), "google.devtools.resultstore.v2.Target.Id")
	proto.RegisterType((*TargetAttributes)(nil), "google.devtools.resultstore.v2.TargetAttributes")
	proto.RegisterType((*TestAttributes)(nil), "google.devtools.resultstore.v2.TestAttributes")
}

func init() {
	proto.RegisterFile("google/devtools/resultstore/v2/target.proto", fileDescriptor_b4e9059e809e996c)
}

var fileDescriptor_b4e9059e809e996c = []byte{
	// 628 bytes of a gzipped FileDescriptorProto
	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x54, 0xed, 0x6a, 0xdb, 0x4a,
	0x10, 0xbd, 0xb2, 0x65, 0x47, 0x1e, 0xe7, 0x3a, 0xba, 0x0b, 0x97, 0xaa, 0x09, 0x14, 0xe3, 0x96,
	0xe2, 0xa4, 0x20, 0x17, 0xf7, 0x57, 0x3f, 0x08, 0x28, 0x89, 0x92, 0x2c, 0xf5, 0x87, 0x58, 0x29,
	0x94, 0x04, 0x8a, 0x51, 0xa2, 0xad, 0xd8, 0x22, 0x6b, 0x5d, 0xed, 0xda, 0x90, 0x3c, 0x48, 0x9f,
	0xa2, 0x0f, 0x59, 0xb4, 0xb2, 0x13, 0xc7, 0xd0, 0x2a, 0xff, 0x76, 0x46, 0xe7, 0x9c, 0x39, 0x9a,
	0x99, 0x5d, 0x78, 0x13, 0x73, 0x1e, 0x27, 0xb4, 0x17, 0xd1, 0x85, 0xe4, 0x3c, 0x11, 0xbd, 0x8c,
	0x8a, 0x79, 0x22, 0x85, 0xe4, 0x19, 0xed, 0x2d, 0xfa, 0x3d, 0x19, 0x66, 0x31, 0x95, 0xf6, 0x2c,
	0xe3, 0x92, 0xa3, 0x17, 0x05, 0xd8, 0x5e, 0x81, 0xed, 0x35, 0xb0, 0xbd, 0xe8, 0xef, 0x96, 0x89,
	0xdd, 0xf0, 0xe9, 0x94, 0xa7, 0x85, 0xd8, 0xee, 0x7e, 0x09, 0xf8, 0x1b, 0x4b, 0x68, 0x01, 0xed,
	0xfc, 0xac, 0x41, 0x3d, 0x50, 0x46, 0x10, 0x02, 0x3d, 0x0d, 0xa7, 0xd4, 0xd2, 0xda, 0x5a, 0xb7,
	0x41, 0xd4, 0x19, 0xbd, 0x87, 0x0a, 0x8b, 0xac, 0x4a, 0x5b, 0xeb, 0x36, 0xfb, 0xfb, 0xf6, 0xdf,
	0x3d, 0xda, 0x85, 0x8e, 0x8d, 0x23, 0x52, 0x61, 0x11, 0xfa, 0x0a, 0xff, 0x09, 0x19, 0xca, 0xb9,
	0x98, 0x84, 0x52, 0x66, 0xec, 0x7a, 0x2e, 0xa9, 0xb0, 0xaa, 0x4a, 0xe9, 0x6d, 0x99, 0x92, 0xaf,
	0x88, 0xce, 0x3d, 0x8f, 0x98, 0x62, 0x23, 0x83, 0x0e, 0xa1, 0x2e, 0xd9, 0x94, 0xa5, 0xb1, 0xa5,
	0x2b, 0xcd, 0xd7, 0xa5, 0xee, 0x14, 0x9a, 0x2c, 0x59, 0xb9, 0xbd, 0x62, 0x00, 0xeb, 0xf6, 0x6a,
	0x4f, 0xb3, 0x57, 0xfc, 0xe8, 0xba, 0x3d, 0xb9, 0x91, 0x41, 0x5f, 0x60, 0x47, 0x52, 0xf1, 0x48,
	0xbc, 0xae, 0xc4, 0xed, 0x52, 0x71, 0x2a, 0xd6, 0xa5, 0x5b, 0xf2, 0x51, 0x8c, 0xce, 0x01, 0x66,
	0x19, 0x9f, 0xd1, 0x4c, 0x32, 0x2a, 0xac, 0xad, 0x76, 0xb5, 0xdb, 0xec, 0x77, 0xcb, 0x34, 0xbd,
	0x82, 0x71, 0x4b, 0xd6, 0xb8, 0xe8, 0x03, 0xd4, 0xf2, 0x45, 0x10, 0x96, 0xa1, 0x44, 0x5e, 0x95,
	0x89, 0x9c, 0xb2, 0x84, 0x92, 0x82, 0x82, 0x2c, 0xd8, 0x5a, 0x30, 0xc1, 0xae, 0x13, 0x6a, 0x41,
	0x5b, 0xeb, 0x1a, 0x64, 0x15, 0xee, 0x9e, 0x42, 0x05, 0x47, 0xe8, 0x25, 0xfc, 0xcb, 0xd2, 0x05,
	0xbf, 0x09, 0x25, 0xe3, 0xe9, 0x84, 0x45, 0xcb, 0xa5, 0xda, 0x7e, 0x48, 0xe2, 0x08, 0xed, 0x41,
	0x63, 0x39, 0x82, 0xe5, 0x8e, 0x35, 0x88, 0x51, 0x24, 0x70, 0xd4, 0xf9, 0xa5, 0x81, 0xb9, 0xd9,
	0x67, 0x74, 0x08, 0xba, 0xbc, 0x9d, 0x15, 0x2b, 0xda, 0xea, 0x1f, 0x3c, 0x6d, 0x4e, 0xc1, 0xed,
	0x8c, 0x12, 0xc5, 0x43, 0x27, 0x60, 0x24, 0x61, 0x1a, 0xcf, 0xc3, 0x98, 0xaa, 0x82, 0xad, 0xf2,
	0xd6, 0x0d, 0x96, 0x78, 0x72, 0xcf, 0xcc, 0x2f, 0x8a, 0x0c, 0xe3, 0x7c, 0x99, 0xab, 0xf9, 0x45,
	0xc9, 0xcf, 0x9d, 0x11, 0xb4, 0x1e, 0x0f, 0x0e, 0x7d, 0x02, 0x5d, 0xb0, 0xbb, 0x95, 0xd7, 0xee,
	0x53, 0xc6, 0xee, 0xb3, 0x3b, 0x4a, 0x14, 0xeb, 0xe0, 0x3b, 0xc0, 0x83, 0x7b, 0xb4, 0x07, 0xcf,
	0x02, 0x87, 0x9c, 0xb9, 0xc1, 0x24, 0xb8, 0xf4, 0xdc, 0xc9, 0xc5, 0xc8, 0xf7, 0xdc, 0x63, 0x7c,
	0x8a, 0xdd, 0x13, 0xf3, 0x1f, 0xb4, 0x03, 0x4d, 0xc7, 0xf3, 0x06, 0xf8, 0xd8, 0x09, 0xf0, 0x78,
	0x64, 0x6a, 0x08, 0xa0, 0x7e, 0x84, 0x47, 0x0e, 0xb9, 0x34, 0x2b, 0xa8, 0x09, 0x5b, 0x03, 0x7c,
	0x44, 0xf2, 0xa0, 0x9a, 0x07, 0x9e, 0x73, 0xfc, 0xd9, 0x39, 0x73, 0x4d, 0x1d, 0x19, 0xa0, 0x07,
	0xae, 0x1f, 0x98, 0xb5, 0x03, 0x0a, 0xc6, 0xaa, 0x3a, 0x7a, 0x0e, 0xff, 0xe7, 0xd9, 0x89, 0x8f,
	0xaf, 0x36, 0xeb, 0x34, 0xa0, 0xe6, 0x0f, 0x9d, 0xc1, 0xa0, 0xa8, 0x30, 0x74, 0x4f, 0xf0, 0xc5,
	0xd0, 0xac, 0xe4, 0xe9, 0x41, 0xee, 0xcd, 0xac, 0xa2, 0x6d, 0x30, 0xdc, 0xd1, 0x98, 0x0c, 0xc7,
	0x17, 0xbe, 0xa9, 0xa3, 0x16, 0xc0, 0x38, 0x38, 0x77, 0x89, 0xd2, 0x32, 0x6b, 0x47, 0x3f, 0xa0,
	0x73, 0xc3, 0xa7, 0x25, 0x7d, 0xf0, 0xb4, 0x2b, 0xbc, 0x44, 0xc4, 0x3c, 0xef, 0xb8, 0xcd, 0xb3,
	0xb8, 0x17, 0xd3, 0x54, 0x3d, 0x57, 0xbd, 0xe2, 0x53, 0x38, 0x63, 0xe2, 0x4f, 0x8f, 0xdb, 0xc7,
	0xb5, 0xf0, 0xba, 0xae, 0x58, 0xef, 0x7e, 0x07, 0x00, 0x00, 0xff, 0xff, 0xce, 0x70, 0x29, 0x31,
	0x8b, 0x05, 0x00, 0x00,
}
