go.chromium.org/luci@v0.0.0-20240309015107-7cdc2e660f33/analysis/proto/v1/projects.pb.go (about)

     1  // Copyright 2022 The LUCI Authors.
     2  //
     3  // Licensed under the Apache License, Version 2.0 (the "License");
     4  // you may not use this file except in compliance with the License.
     5  // You may obtain a copy of the License at
     6  //
     7  //      http://www.apache.org/licenses/LICENSE-2.0
     8  //
     9  // Unless required by applicable law or agreed to in writing, software
    10  // distributed under the License is distributed on an "AS IS" BASIS,
    11  // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    12  // See the License for the specific language governing permissions and
    13  // limitations under the License.
    14  
    15  // Code generated by protoc-gen-go. DO NOT EDIT.
    16  // versions:
    17  // 	protoc-gen-go v1.32.0
    18  // 	protoc        v3.21.7
    19  // source: go.chromium.org/luci/analysis/proto/v1/projects.proto
    20  
    21  package analysispb
    22  
    23  import prpc "go.chromium.org/luci/grpc/prpc"
    24  
    25  import (
    26  	context "context"
    27  	grpc "google.golang.org/grpc"
    28  	codes "google.golang.org/grpc/codes"
    29  	status "google.golang.org/grpc/status"
    30  	protoreflect "google.golang.org/protobuf/reflect/protoreflect"
    31  	protoimpl "google.golang.org/protobuf/runtime/protoimpl"
    32  	reflect "reflect"
    33  	sync "sync"
    34  )
    35  
    36  const (
    37  	// Verify that this generated code is sufficiently up-to-date.
    38  	_ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
    39  	// Verify that runtime/protoimpl is sufficiently up-to-date.
    40  	_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
    41  )
    42  
    43  // This enum represents the Buganizer priorities.
    44  // It is equivalent to the one in Buganizer API.
    45  type BuganizerPriority int32
    46  
    47  const (
    48  	// Priority unspecified; do not use this value.
    49  	BuganizerPriority_BUGANIZER_PRIORITY_UNSPECIFIED BuganizerPriority = 0
    50  	// P0, Highest priority.
    51  	BuganizerPriority_P0 BuganizerPriority = 1
    52  	BuganizerPriority_P1 BuganizerPriority = 2
    53  	BuganizerPriority_P2 BuganizerPriority = 3
    54  	BuganizerPriority_P3 BuganizerPriority = 4
    55  	BuganizerPriority_P4 BuganizerPriority = 5
    56  )
    57  
    58  // Enum value maps for BuganizerPriority.
    59  var (
    60  	BuganizerPriority_name = map[int32]string{
    61  		0: "BUGANIZER_PRIORITY_UNSPECIFIED",
    62  		1: "P0",
    63  		2: "P1",
    64  		3: "P2",
    65  		4: "P3",
    66  		5: "P4",
    67  	}
    68  	BuganizerPriority_value = map[string]int32{
    69  		"BUGANIZER_PRIORITY_UNSPECIFIED": 0,
    70  		"P0":                             1,
    71  		"P1":                             2,
    72  		"P2":                             3,
    73  		"P3":                             4,
    74  		"P4":                             5,
    75  	}
    76  )
    77  
    78  func (x BuganizerPriority) Enum() *BuganizerPriority {
    79  	p := new(BuganizerPriority)
    80  	*p = x
    81  	return p
    82  }
    83  
    84  func (x BuganizerPriority) String() string {
    85  	return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
    86  }
    87  
    88  func (BuganizerPriority) Descriptor() protoreflect.EnumDescriptor {
    89  	return file_go_chromium_org_luci_analysis_proto_v1_projects_proto_enumTypes[0].Descriptor()
    90  }
    91  
    92  func (BuganizerPriority) Type() protoreflect.EnumType {
    93  	return &file_go_chromium_org_luci_analysis_proto_v1_projects_proto_enumTypes[0]
    94  }
    95  
    96  func (x BuganizerPriority) Number() protoreflect.EnumNumber {
    97  	return protoreflect.EnumNumber(x)
    98  }
    99  
   100  // Deprecated: Use BuganizerPriority.Descriptor instead.
   101  func (BuganizerPriority) EnumDescriptor() ([]byte, []int) {
   102  	return file_go_chromium_org_luci_analysis_proto_v1_projects_proto_rawDescGZIP(), []int{0}
   103  }
   104  
   105  // A request object with data to fetch the list of projects configured
   106  // in LUCI Analysis.
   107  type ListProjectsRequest struct {
   108  	state         protoimpl.MessageState
   109  	sizeCache     protoimpl.SizeCache
   110  	unknownFields protoimpl.UnknownFields
   111  }
   112  
   113  func (x *ListProjectsRequest) Reset() {
   114  	*x = ListProjectsRequest{}
   115  	if protoimpl.UnsafeEnabled {
   116  		mi := &file_go_chromium_org_luci_analysis_proto_v1_projects_proto_msgTypes[0]
   117  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
   118  		ms.StoreMessageInfo(mi)
   119  	}
   120  }
   121  
   122  func (x *ListProjectsRequest) String() string {
   123  	return protoimpl.X.MessageStringOf(x)
   124  }
   125  
   126  func (*ListProjectsRequest) ProtoMessage() {}
   127  
   128  func (x *ListProjectsRequest) ProtoReflect() protoreflect.Message {
   129  	mi := &file_go_chromium_org_luci_analysis_proto_v1_projects_proto_msgTypes[0]
   130  	if protoimpl.UnsafeEnabled && x != nil {
   131  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
   132  		if ms.LoadMessageInfo() == nil {
   133  			ms.StoreMessageInfo(mi)
   134  		}
   135  		return ms
   136  	}
   137  	return mi.MessageOf(x)
   138  }
   139  
   140  // Deprecated: Use ListProjectsRequest.ProtoReflect.Descriptor instead.
   141  func (*ListProjectsRequest) Descriptor() ([]byte, []int) {
   142  	return file_go_chromium_org_luci_analysis_proto_v1_projects_proto_rawDescGZIP(), []int{0}
   143  }
   144  
   145  // A response containing the list of projects which are are using
   146  // LUCI Analysis.
   147  type ListProjectsResponse struct {
   148  	state         protoimpl.MessageState
   149  	sizeCache     protoimpl.SizeCache
   150  	unknownFields protoimpl.UnknownFields
   151  
   152  	// The list of projects using LUCI Analysis.
   153  	Projects []*Project `protobuf:"bytes,1,rep,name=projects,proto3" json:"projects,omitempty"`
   154  }
   155  
   156  func (x *ListProjectsResponse) Reset() {
   157  	*x = ListProjectsResponse{}
   158  	if protoimpl.UnsafeEnabled {
   159  		mi := &file_go_chromium_org_luci_analysis_proto_v1_projects_proto_msgTypes[1]
   160  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
   161  		ms.StoreMessageInfo(mi)
   162  	}
   163  }
   164  
   165  func (x *ListProjectsResponse) String() string {
   166  	return protoimpl.X.MessageStringOf(x)
   167  }
   168  
   169  func (*ListProjectsResponse) ProtoMessage() {}
   170  
   171  func (x *ListProjectsResponse) ProtoReflect() protoreflect.Message {
   172  	mi := &file_go_chromium_org_luci_analysis_proto_v1_projects_proto_msgTypes[1]
   173  	if protoimpl.UnsafeEnabled && x != nil {
   174  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
   175  		if ms.LoadMessageInfo() == nil {
   176  			ms.StoreMessageInfo(mi)
   177  		}
   178  		return ms
   179  	}
   180  	return mi.MessageOf(x)
   181  }
   182  
   183  // Deprecated: Use ListProjectsResponse.ProtoReflect.Descriptor instead.
   184  func (*ListProjectsResponse) Descriptor() ([]byte, []int) {
   185  	return file_go_chromium_org_luci_analysis_proto_v1_projects_proto_rawDescGZIP(), []int{1}
   186  }
   187  
   188  func (x *ListProjectsResponse) GetProjects() []*Project {
   189  	if x != nil {
   190  		return x.Projects
   191  	}
   192  	return nil
   193  }
   194  
   195  type GetProjectConfigRequest struct {
   196  	state         protoimpl.MessageState
   197  	sizeCache     protoimpl.SizeCache
   198  	unknownFields protoimpl.UnknownFields
   199  
   200  	// The name of the project configuration to retrieve.
   201  	// Format: projects/{project}/config.
   202  	Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
   203  }
   204  
   205  func (x *GetProjectConfigRequest) Reset() {
   206  	*x = GetProjectConfigRequest{}
   207  	if protoimpl.UnsafeEnabled {
   208  		mi := &file_go_chromium_org_luci_analysis_proto_v1_projects_proto_msgTypes[2]
   209  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
   210  		ms.StoreMessageInfo(mi)
   211  	}
   212  }
   213  
   214  func (x *GetProjectConfigRequest) String() string {
   215  	return protoimpl.X.MessageStringOf(x)
   216  }
   217  
   218  func (*GetProjectConfigRequest) ProtoMessage() {}
   219  
   220  func (x *GetProjectConfigRequest) ProtoReflect() protoreflect.Message {
   221  	mi := &file_go_chromium_org_luci_analysis_proto_v1_projects_proto_msgTypes[2]
   222  	if protoimpl.UnsafeEnabled && x != nil {
   223  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
   224  		if ms.LoadMessageInfo() == nil {
   225  			ms.StoreMessageInfo(mi)
   226  		}
   227  		return ms
   228  	}
   229  	return mi.MessageOf(x)
   230  }
   231  
   232  // Deprecated: Use GetProjectConfigRequest.ProtoReflect.Descriptor instead.
   233  func (*GetProjectConfigRequest) Descriptor() ([]byte, []int) {
   234  	return file_go_chromium_org_luci_analysis_proto_v1_projects_proto_rawDescGZIP(), []int{2}
   235  }
   236  
   237  func (x *GetProjectConfigRequest) GetName() string {
   238  	if x != nil {
   239  		return x.Name
   240  	}
   241  	return ""
   242  }
   243  
   244  type ProjectConfig struct {
   245  	state         protoimpl.MessageState
   246  	sizeCache     protoimpl.SizeCache
   247  	unknownFields protoimpl.UnknownFields
   248  
   249  	// Resource name of the project configuration.
   250  	// Format: projects/{project}/config.
   251  	// See also https://google.aip.dev/122.
   252  	Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
   253  	// Configuration for automatic bug management.
   254  	BugManagement *BugManagement `protobuf:"bytes,6,opt,name=bug_management,json=bugManagement,proto3" json:"bug_management,omitempty"`
   255  }
   256  
   257  func (x *ProjectConfig) Reset() {
   258  	*x = ProjectConfig{}
   259  	if protoimpl.UnsafeEnabled {
   260  		mi := &file_go_chromium_org_luci_analysis_proto_v1_projects_proto_msgTypes[3]
   261  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
   262  		ms.StoreMessageInfo(mi)
   263  	}
   264  }
   265  
   266  func (x *ProjectConfig) String() string {
   267  	return protoimpl.X.MessageStringOf(x)
   268  }
   269  
   270  func (*ProjectConfig) ProtoMessage() {}
   271  
   272  func (x *ProjectConfig) ProtoReflect() protoreflect.Message {
   273  	mi := &file_go_chromium_org_luci_analysis_proto_v1_projects_proto_msgTypes[3]
   274  	if protoimpl.UnsafeEnabled && x != nil {
   275  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
   276  		if ms.LoadMessageInfo() == nil {
   277  			ms.StoreMessageInfo(mi)
   278  		}
   279  		return ms
   280  	}
   281  	return mi.MessageOf(x)
   282  }
   283  
   284  // Deprecated: Use ProjectConfig.ProtoReflect.Descriptor instead.
   285  func (*ProjectConfig) Descriptor() ([]byte, []int) {
   286  	return file_go_chromium_org_luci_analysis_proto_v1_projects_proto_rawDescGZIP(), []int{3}
   287  }
   288  
   289  func (x *ProjectConfig) GetName() string {
   290  	if x != nil {
   291  		return x.Name
   292  	}
   293  	return ""
   294  }
   295  
   296  func (x *ProjectConfig) GetBugManagement() *BugManagement {
   297  	if x != nil {
   298  		return x.BugManagement
   299  	}
   300  	return nil
   301  }
   302  
   303  // Settings related to bug management.
   304  type BugManagement struct {
   305  	state         protoimpl.MessageState
   306  	sizeCache     protoimpl.SizeCache
   307  	unknownFields protoimpl.UnknownFields
   308  
   309  	// The set of policies which control the (re-)opening, closure and
   310  	// prioritization of bugs under the control of LUCI Analysis.
   311  	Policies []*BugManagementPolicy `protobuf:"bytes,1,rep,name=policies,proto3" json:"policies,omitempty"`
   312  	// Monorail-specific bug filing configuration.
   313  	Monorail *MonorailProject `protobuf:"bytes,2,opt,name=monorail,proto3" json:"monorail,omitempty"`
   314  }
   315  
   316  func (x *BugManagement) Reset() {
   317  	*x = BugManagement{}
   318  	if protoimpl.UnsafeEnabled {
   319  		mi := &file_go_chromium_org_luci_analysis_proto_v1_projects_proto_msgTypes[4]
   320  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
   321  		ms.StoreMessageInfo(mi)
   322  	}
   323  }
   324  
   325  func (x *BugManagement) String() string {
   326  	return protoimpl.X.MessageStringOf(x)
   327  }
   328  
   329  func (*BugManagement) ProtoMessage() {}
   330  
   331  func (x *BugManagement) ProtoReflect() protoreflect.Message {
   332  	mi := &file_go_chromium_org_luci_analysis_proto_v1_projects_proto_msgTypes[4]
   333  	if protoimpl.UnsafeEnabled && x != nil {
   334  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
   335  		if ms.LoadMessageInfo() == nil {
   336  			ms.StoreMessageInfo(mi)
   337  		}
   338  		return ms
   339  	}
   340  	return mi.MessageOf(x)
   341  }
   342  
   343  // Deprecated: Use BugManagement.ProtoReflect.Descriptor instead.
   344  func (*BugManagement) Descriptor() ([]byte, []int) {
   345  	return file_go_chromium_org_luci_analysis_proto_v1_projects_proto_rawDescGZIP(), []int{4}
   346  }
   347  
   348  func (x *BugManagement) GetPolicies() []*BugManagementPolicy {
   349  	if x != nil {
   350  		return x.Policies
   351  	}
   352  	return nil
   353  }
   354  
   355  func (x *BugManagement) GetMonorail() *MonorailProject {
   356  	if x != nil {
   357  		return x.Monorail
   358  	}
   359  	return nil
   360  }
   361  
   362  // A bug management policy in LUCI Analysis.
   363  //
   364  // Bug management policies control when and how bugs are automatically
   365  // opened, prioritised, and verified as fixed. Each policy has a user-visible
   366  // identity in the UI and can post custom instructions on the bug.
   367  //
   368  // LUCI Analysis avoids filing multiple bugs for the same failures by
   369  // allowing multiple policies to activate on the same failure association
   370  // rule. The bug associated with a rule will only be verified if all policies
   371  // have de-activated.
   372  type BugManagementPolicy struct {
   373  	state         protoimpl.MessageState
   374  	sizeCache     protoimpl.SizeCache
   375  	unknownFields protoimpl.UnknownFields
   376  
   377  	// A unique identifier for the bug management policy.
   378  	//
   379  	// Policies are stateful in that LUCI Analysis tracks which bugs have met the
   380  	// activation condition on the policy (and not since met the deactivation
   381  	// condition).
   382  	//
   383  	// Changing this value changes the identity of the policy and hence results in
   384  	// the activation state for the policy being lost for all bugs.
   385  	//
   386  	// Valid syntax: ^[a-z]([a-z0-9-]{0,62}[a-z0-9])?$. (Syntax designed to comply
   387  	// with google.aip.dev/122 for resource IDs.)
   388  	Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
   389  	// The owners of the policy, who can be contacted if there are issues/concerns
   390  	// about the policy. Each item in the list should be an @google.com email
   391  	// address. At least one owner (preferably a group) is required.
   392  	Owners []string `protobuf:"bytes,6,rep,name=owners,proto3" json:"owners,omitempty"`
   393  	// A short one-line description for the problem the policy identifies, which
   394  	// will appear on the UI and in bugs comments. This is a sentence fragment
   395  	// and not a sentence, so please do NOT include a full stop and or starting
   396  	// capital letter.
   397  	//
   398  	// For example, "test variant(s) are being exonerated in presubmit".
   399  	HumanReadableName string `protobuf:"bytes,2,opt,name=human_readable_name,json=humanReadableName,proto3" json:"human_readable_name,omitempty"`
   400  	// The priority of the problem this policy defines.
   401  	//
   402  	// If:
   403  	//   - the priority of the bug associated with a rule
   404  	//     differs from this priority, and
   405  	//   - the policy is activate on the rule (see `metrics`), and
   406  	//   - LUCI Analysis is controlling the priority of the bug
   407  	//     (the "Update bug priority" switch on the rule is enabled),
   408  	//
   409  	// the priority of the bug will be updated to match this priority.
   410  	//
   411  	// Where are there multiple policies active on the same rule,
   412  	// the highest priority (of all active policies) will be used.
   413  	//
   414  	// For monorail projects, the buganizer priority will be converted to the
   415  	// equivalent monorail priority (P0 is converted to Pri-0, P1 to Pri-1,
   416  	// P2 to Pri-2, etc.) until monorail is turned down.
   417  	Priority BuganizerPriority `protobuf:"varint,3,opt,name=priority,proto3,enum=luci.analysis.v1.BuganizerPriority" json:"priority,omitempty"`
   418  	// The set of metrics which will control activation of the bug-filing policy.
   419  	// If a policy activates on a suggested cluster, a new bug will be filed.
   420  	// If a policy activates on an existing rule cluster, the bug will be
   421  	// updated.
   422  	//
   423  	// The policy will activate if the activation threshold is met on *ANY*
   424  	// metric, and will de-activate only if the deactivation threshold is met
   425  	// on *ALL* metrics.
   426  	//
   427  	// Activation on suggested clusters will be based on the metric values after
   428  	// excluding failures for which a bug has already been filed. This is to
   429  	// avoid duplicate bug filing.
   430  	Metrics []*BugManagementPolicy_Metric `protobuf:"bytes,4,rep,name=metrics,proto3" json:"metrics,omitempty"`
   431  	// Expanatory text of the problem the policy identified, shown on the
   432  	// user interface when the user requests more information. Required.
   433  	Explanation *BugManagementPolicy_Explanation `protobuf:"bytes,5,opt,name=explanation,proto3" json:"explanation,omitempty"`
   434  }
   435  
   436  func (x *BugManagementPolicy) Reset() {
   437  	*x = BugManagementPolicy{}
   438  	if protoimpl.UnsafeEnabled {
   439  		mi := &file_go_chromium_org_luci_analysis_proto_v1_projects_proto_msgTypes[5]
   440  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
   441  		ms.StoreMessageInfo(mi)
   442  	}
   443  }
   444  
   445  func (x *BugManagementPolicy) String() string {
   446  	return protoimpl.X.MessageStringOf(x)
   447  }
   448  
   449  func (*BugManagementPolicy) ProtoMessage() {}
   450  
   451  func (x *BugManagementPolicy) ProtoReflect() protoreflect.Message {
   452  	mi := &file_go_chromium_org_luci_analysis_proto_v1_projects_proto_msgTypes[5]
   453  	if protoimpl.UnsafeEnabled && x != nil {
   454  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
   455  		if ms.LoadMessageInfo() == nil {
   456  			ms.StoreMessageInfo(mi)
   457  		}
   458  		return ms
   459  	}
   460  	return mi.MessageOf(x)
   461  }
   462  
   463  // Deprecated: Use BugManagementPolicy.ProtoReflect.Descriptor instead.
   464  func (*BugManagementPolicy) Descriptor() ([]byte, []int) {
   465  	return file_go_chromium_org_luci_analysis_proto_v1_projects_proto_rawDescGZIP(), []int{5}
   466  }
   467  
   468  func (x *BugManagementPolicy) GetId() string {
   469  	if x != nil {
   470  		return x.Id
   471  	}
   472  	return ""
   473  }
   474  
   475  func (x *BugManagementPolicy) GetOwners() []string {
   476  	if x != nil {
   477  		return x.Owners
   478  	}
   479  	return nil
   480  }
   481  
   482  func (x *BugManagementPolicy) GetHumanReadableName() string {
   483  	if x != nil {
   484  		return x.HumanReadableName
   485  	}
   486  	return ""
   487  }
   488  
   489  func (x *BugManagementPolicy) GetPriority() BuganizerPriority {
   490  	if x != nil {
   491  		return x.Priority
   492  	}
   493  	return BuganizerPriority_BUGANIZER_PRIORITY_UNSPECIFIED
   494  }
   495  
   496  func (x *BugManagementPolicy) GetMetrics() []*BugManagementPolicy_Metric {
   497  	if x != nil {
   498  		return x.Metrics
   499  	}
   500  	return nil
   501  }
   502  
   503  func (x *BugManagementPolicy) GetExplanation() *BugManagementPolicy_Explanation {
   504  	if x != nil {
   505  		return x.Explanation
   506  	}
   507  	return nil
   508  }
   509  
   510  // MonorailProject describes the configuration to use when filing bugs
   511  // into a given monorail project.
   512  type MonorailProject struct {
   513  	state         protoimpl.MessageState
   514  	sizeCache     protoimpl.SizeCache
   515  	unknownFields protoimpl.UnknownFields
   516  
   517  	// The monorail project being described.
   518  	// E.g. "chromium".
   519  	Project string `protobuf:"bytes,1,opt,name=project,proto3" json:"project,omitempty"`
   520  	// The prefix that should appear when displaying bugs from the
   521  	// given bug tracking system. E.g. "crbug.com" or "fxbug.dev".
   522  	// If no prefix is specified, only the bug number will appear.
   523  	// Otherwise, the supplifed prefix will appear, followed by a
   524  	// forward slash ("/"), followed by the bug number.
   525  	// Valid prefixes match `^[a-z0-9\-.]{0,64}$`.
   526  	DisplayPrefix string `protobuf:"bytes,2,opt,name=display_prefix,json=displayPrefix,proto3" json:"display_prefix,omitempty"`
   527  }
   528  
   529  func (x *MonorailProject) Reset() {
   530  	*x = MonorailProject{}
   531  	if protoimpl.UnsafeEnabled {
   532  		mi := &file_go_chromium_org_luci_analysis_proto_v1_projects_proto_msgTypes[6]
   533  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
   534  		ms.StoreMessageInfo(mi)
   535  	}
   536  }
   537  
   538  func (x *MonorailProject) String() string {
   539  	return protoimpl.X.MessageStringOf(x)
   540  }
   541  
   542  func (*MonorailProject) ProtoMessage() {}
   543  
   544  func (x *MonorailProject) ProtoReflect() protoreflect.Message {
   545  	mi := &file_go_chromium_org_luci_analysis_proto_v1_projects_proto_msgTypes[6]
   546  	if protoimpl.UnsafeEnabled && x != nil {
   547  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
   548  		if ms.LoadMessageInfo() == nil {
   549  			ms.StoreMessageInfo(mi)
   550  		}
   551  		return ms
   552  	}
   553  	return mi.MessageOf(x)
   554  }
   555  
   556  // Deprecated: Use MonorailProject.ProtoReflect.Descriptor instead.
   557  func (*MonorailProject) Descriptor() ([]byte, []int) {
   558  	return file_go_chromium_org_luci_analysis_proto_v1_projects_proto_rawDescGZIP(), []int{6}
   559  }
   560  
   561  func (x *MonorailProject) GetProject() string {
   562  	if x != nil {
   563  		return x.Project
   564  	}
   565  	return ""
   566  }
   567  
   568  func (x *MonorailProject) GetDisplayPrefix() string {
   569  	if x != nil {
   570  		return x.DisplayPrefix
   571  	}
   572  	return ""
   573  }
   574  
   575  // MetricThreshold specifies thresholds for a particular metric.
   576  // The threshold is considered satisfied if any of the individual metric
   577  // thresholds is met or exceeded (i.e. if multiple thresholds are set, they
   578  // are combined using an OR-semantic). If no threshold is set, the threshold
   579  // as a whole is unsatisfiable.
   580  type MetricThreshold struct {
   581  	state         protoimpl.MessageState
   582  	sizeCache     protoimpl.SizeCache
   583  	unknownFields protoimpl.UnknownFields
   584  
   585  	// The threshold for one day.
   586  	OneDay *int64 `protobuf:"varint,1,opt,name=one_day,json=oneDay,proto3,oneof" json:"one_day,omitempty"`
   587  	// The threshold for three day.
   588  	ThreeDay *int64 `protobuf:"varint,2,opt,name=three_day,json=threeDay,proto3,oneof" json:"three_day,omitempty"`
   589  	// The threshold for seven days.
   590  	SevenDay *int64 `protobuf:"varint,3,opt,name=seven_day,json=sevenDay,proto3,oneof" json:"seven_day,omitempty"`
   591  }
   592  
   593  func (x *MetricThreshold) Reset() {
   594  	*x = MetricThreshold{}
   595  	if protoimpl.UnsafeEnabled {
   596  		mi := &file_go_chromium_org_luci_analysis_proto_v1_projects_proto_msgTypes[7]
   597  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
   598  		ms.StoreMessageInfo(mi)
   599  	}
   600  }
   601  
   602  func (x *MetricThreshold) String() string {
   603  	return protoimpl.X.MessageStringOf(x)
   604  }
   605  
   606  func (*MetricThreshold) ProtoMessage() {}
   607  
   608  func (x *MetricThreshold) ProtoReflect() protoreflect.Message {
   609  	mi := &file_go_chromium_org_luci_analysis_proto_v1_projects_proto_msgTypes[7]
   610  	if protoimpl.UnsafeEnabled && x != nil {
   611  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
   612  		if ms.LoadMessageInfo() == nil {
   613  			ms.StoreMessageInfo(mi)
   614  		}
   615  		return ms
   616  	}
   617  	return mi.MessageOf(x)
   618  }
   619  
   620  // Deprecated: Use MetricThreshold.ProtoReflect.Descriptor instead.
   621  func (*MetricThreshold) Descriptor() ([]byte, []int) {
   622  	return file_go_chromium_org_luci_analysis_proto_v1_projects_proto_rawDescGZIP(), []int{7}
   623  }
   624  
   625  func (x *MetricThreshold) GetOneDay() int64 {
   626  	if x != nil && x.OneDay != nil {
   627  		return *x.OneDay
   628  	}
   629  	return 0
   630  }
   631  
   632  func (x *MetricThreshold) GetThreeDay() int64 {
   633  	if x != nil && x.ThreeDay != nil {
   634  		return *x.ThreeDay
   635  	}
   636  	return 0
   637  }
   638  
   639  func (x *MetricThreshold) GetSevenDay() int64 {
   640  	if x != nil && x.SevenDay != nil {
   641  		return *x.SevenDay
   642  	}
   643  	return 0
   644  }
   645  
   646  // A metric used to control activation of a bug-filing policy.
   647  type BugManagementPolicy_Metric struct {
   648  	state         protoimpl.MessageState
   649  	sizeCache     protoimpl.SizeCache
   650  	unknownFields protoimpl.UnknownFields
   651  
   652  	// The identifier of the metric.
   653  	//
   654  	// Full list of available metrics here:
   655  	// https://source.chromium.org/chromium/infra/infra/+/main:go/src/go.chromium.org/luci/analysis/internal/analysis/metrics/metrics.go
   656  	MetricId string `protobuf:"bytes,1,opt,name=metric_id,json=metricId,proto3" json:"metric_id,omitempty"`
   657  	// The level at which the policy activates. Activation occurs if the
   658  	// cluster impact meets or exceeds this threshold.
   659  	// MUST imply deactivation_threshold.
   660  	ActivationThreshold *MetricThreshold `protobuf:"bytes,2,opt,name=activation_threshold,json=activationThreshold,proto3" json:"activation_threshold,omitempty"`
   661  	// The minimum metric level at which the policy remains active.
   662  	// Deactivation occcurs if the cluster impact is below the de-activation
   663  	// threshold. Deactivation_threshold should be set significantly lower
   664  	// than activation_threshold to prevent policies repeatedly activating
   665  	// and deactivating due to noise in the data, e.g. less tests executed
   666  	// on weekends.
   667  	DeactivationThreshold *MetricThreshold `protobuf:"bytes,3,opt,name=deactivation_threshold,json=deactivationThreshold,proto3" json:"deactivation_threshold,omitempty"`
   668  }
   669  
   670  func (x *BugManagementPolicy_Metric) Reset() {
   671  	*x = BugManagementPolicy_Metric{}
   672  	if protoimpl.UnsafeEnabled {
   673  		mi := &file_go_chromium_org_luci_analysis_proto_v1_projects_proto_msgTypes[8]
   674  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
   675  		ms.StoreMessageInfo(mi)
   676  	}
   677  }
   678  
   679  func (x *BugManagementPolicy_Metric) String() string {
   680  	return protoimpl.X.MessageStringOf(x)
   681  }
   682  
   683  func (*BugManagementPolicy_Metric) ProtoMessage() {}
   684  
   685  func (x *BugManagementPolicy_Metric) ProtoReflect() protoreflect.Message {
   686  	mi := &file_go_chromium_org_luci_analysis_proto_v1_projects_proto_msgTypes[8]
   687  	if protoimpl.UnsafeEnabled && x != nil {
   688  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
   689  		if ms.LoadMessageInfo() == nil {
   690  			ms.StoreMessageInfo(mi)
   691  		}
   692  		return ms
   693  	}
   694  	return mi.MessageOf(x)
   695  }
   696  
   697  // Deprecated: Use BugManagementPolicy_Metric.ProtoReflect.Descriptor instead.
   698  func (*BugManagementPolicy_Metric) Descriptor() ([]byte, []int) {
   699  	return file_go_chromium_org_luci_analysis_proto_v1_projects_proto_rawDescGZIP(), []int{5, 0}
   700  }
   701  
   702  func (x *BugManagementPolicy_Metric) GetMetricId() string {
   703  	if x != nil {
   704  		return x.MetricId
   705  	}
   706  	return ""
   707  }
   708  
   709  func (x *BugManagementPolicy_Metric) GetActivationThreshold() *MetricThreshold {
   710  	if x != nil {
   711  		return x.ActivationThreshold
   712  	}
   713  	return nil
   714  }
   715  
   716  func (x *BugManagementPolicy_Metric) GetDeactivationThreshold() *MetricThreshold {
   717  	if x != nil {
   718  		return x.DeactivationThreshold
   719  	}
   720  	return nil
   721  }
   722  
   723  // Content displayed on the user interface, to explain the problem and
   724  // guide a developer to fix it.
   725  type BugManagementPolicy_Explanation struct {
   726  	state         protoimpl.MessageState
   727  	sizeCache     protoimpl.SizeCache
   728  	unknownFields protoimpl.UnknownFields
   729  
   730  	// A longer human-readable description of the problem this policy
   731  	// has identified, in HTML.
   732  	//
   733  	// For example, "Test variant(s) in this cluster are being exonerated
   734  	// (ignored) in presubmit because they are too flaky or failing. This
   735  	// means they are no longer effective at preventing the breakage of
   736  	// the functionality the test(s) cover.".
   737  	//
   738  	// MUST be sanitised by UI before rendering. Sanitisation is only
   739  	// required to support simple uses of the following tags: ul, li, a.
   740  	ProblemHtml string `protobuf:"bytes,1,opt,name=problem_html,json=problemHtml,proto3" json:"problem_html,omitempty"`
   741  	// A description of how a human should go about trying to fix the
   742  	// problem, in HTML.
   743  	//
   744  	// For example, "<ul>
   745  	// <li>View recent failures</li>
   746  	// <li><a href="http://goto.google.com/demote-from-cq">Demote</a> the test from CQ</li>
   747  	// </ul>"
   748  	//
   749  	// MUST be sanitised by UI before rendering. Sanitisation is only
   750  	// required to support simple uses of the following tags: ul, li, a.
   751  	ActionHtml string `protobuf:"bytes,2,opt,name=action_html,json=actionHtml,proto3" json:"action_html,omitempty"`
   752  }
   753  
   754  func (x *BugManagementPolicy_Explanation) Reset() {
   755  	*x = BugManagementPolicy_Explanation{}
   756  	if protoimpl.UnsafeEnabled {
   757  		mi := &file_go_chromium_org_luci_analysis_proto_v1_projects_proto_msgTypes[9]
   758  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
   759  		ms.StoreMessageInfo(mi)
   760  	}
   761  }
   762  
   763  func (x *BugManagementPolicy_Explanation) String() string {
   764  	return protoimpl.X.MessageStringOf(x)
   765  }
   766  
   767  func (*BugManagementPolicy_Explanation) ProtoMessage() {}
   768  
   769  func (x *BugManagementPolicy_Explanation) ProtoReflect() protoreflect.Message {
   770  	mi := &file_go_chromium_org_luci_analysis_proto_v1_projects_proto_msgTypes[9]
   771  	if protoimpl.UnsafeEnabled && x != nil {
   772  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
   773  		if ms.LoadMessageInfo() == nil {
   774  			ms.StoreMessageInfo(mi)
   775  		}
   776  		return ms
   777  	}
   778  	return mi.MessageOf(x)
   779  }
   780  
   781  // Deprecated: Use BugManagementPolicy_Explanation.ProtoReflect.Descriptor instead.
   782  func (*BugManagementPolicy_Explanation) Descriptor() ([]byte, []int) {
   783  	return file_go_chromium_org_luci_analysis_proto_v1_projects_proto_rawDescGZIP(), []int{5, 1}
   784  }
   785  
   786  func (x *BugManagementPolicy_Explanation) GetProblemHtml() string {
   787  	if x != nil {
   788  		return x.ProblemHtml
   789  	}
   790  	return ""
   791  }
   792  
   793  func (x *BugManagementPolicy_Explanation) GetActionHtml() string {
   794  	if x != nil {
   795  		return x.ActionHtml
   796  	}
   797  	return ""
   798  }
   799  
   800  var File_go_chromium_org_luci_analysis_proto_v1_projects_proto protoreflect.FileDescriptor
   801  
   802  var file_go_chromium_org_luci_analysis_proto_v1_projects_proto_rawDesc = []byte{
   803  	0x0a, 0x35, 0x67, 0x6f, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x2e, 0x6f, 0x72,
   804  	0x67, 0x2f, 0x6c, 0x75, 0x63, 0x69, 0x2f, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x2f,
   805  	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74,
   806  	0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x10, 0x6c, 0x75, 0x63, 0x69, 0x2e, 0x61, 0x6e,
   807  	0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x2e, 0x76, 0x31, 0x1a, 0x34, 0x67, 0x6f, 0x2e, 0x63, 0x68,
   808  	0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x6c, 0x75, 0x63, 0x69, 0x2f,
   809  	0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x76,
   810  	0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22,
   811  	0x15, 0x0a, 0x13, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x52,
   812  	0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x4d, 0x0a, 0x14, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x72,
   813  	0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x35,
   814  	0x0a, 0x08, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b,
   815  	0x32, 0x19, 0x2e, 0x6c, 0x75, 0x63, 0x69, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73,
   816  	0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x08, 0x70, 0x72, 0x6f,
   817  	0x6a, 0x65, 0x63, 0x74, 0x73, 0x22, 0x2d, 0x0a, 0x17, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x6a,
   818  	0x65, 0x63, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
   819  	0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04,
   820  	0x6e, 0x61, 0x6d, 0x65, 0x22, 0x83, 0x01, 0x0a, 0x0d, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74,
   821  	0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01,
   822  	0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x46, 0x0a, 0x0e, 0x62, 0x75,
   823  	0x67, 0x5f, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x06, 0x20, 0x01,
   824  	0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x6c, 0x75, 0x63, 0x69, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73,
   825  	0x69, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x75, 0x67, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d,
   826  	0x65, 0x6e, 0x74, 0x52, 0x0d, 0x62, 0x75, 0x67, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65,
   827  	0x6e, 0x74, 0x4a, 0x04, 0x08, 0x02, 0x10, 0x03, 0x4a, 0x04, 0x08, 0x03, 0x10, 0x04, 0x4a, 0x04,
   828  	0x08, 0x04, 0x10, 0x05, 0x4a, 0x04, 0x08, 0x05, 0x10, 0x06, 0x22, 0x91, 0x01, 0x0a, 0x0d, 0x42,
   829  	0x75, 0x67, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x41, 0x0a, 0x08,
   830  	0x70, 0x6f, 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x25,
   831  	0x2e, 0x6c, 0x75, 0x63, 0x69, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x2e, 0x76,
   832  	0x31, 0x2e, 0x42, 0x75, 0x67, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x50,
   833  	0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x08, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, 0x12,
   834  	0x3d, 0x0a, 0x08, 0x6d, 0x6f, 0x6e, 0x6f, 0x72, 0x61, 0x69, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28,
   835  	0x0b, 0x32, 0x21, 0x2e, 0x6c, 0x75, 0x63, 0x69, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69,
   836  	0x73, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x6f, 0x6e, 0x6f, 0x72, 0x61, 0x69, 0x6c, 0x50, 0x72, 0x6f,
   837  	0x6a, 0x65, 0x63, 0x74, 0x52, 0x08, 0x6d, 0x6f, 0x6e, 0x6f, 0x72, 0x61, 0x69, 0x6c, 0x22, 0xf6,
   838  	0x04, 0x0a, 0x13, 0x42, 0x75, 0x67, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74,
   839  	0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01,
   840  	0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x73,
   841  	0x18, 0x06, 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x73, 0x12, 0x2e,
   842  	0x0a, 0x13, 0x68, 0x75, 0x6d, 0x61, 0x6e, 0x5f, 0x72, 0x65, 0x61, 0x64, 0x61, 0x62, 0x6c, 0x65,
   843  	0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x68, 0x75, 0x6d,
   844  	0x61, 0x6e, 0x52, 0x65, 0x61, 0x64, 0x61, 0x62, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x3f,
   845  	0x0a, 0x08, 0x70, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e,
   846  	0x32, 0x23, 0x2e, 0x6c, 0x75, 0x63, 0x69, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73,
   847  	0x2e, 0x76, 0x31, 0x2e, 0x42, 0x75, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x65, 0x72, 0x50, 0x72, 0x69,
   848  	0x6f, 0x72, 0x69, 0x74, 0x79, 0x52, 0x08, 0x70, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x12,
   849  	0x46, 0x0a, 0x07, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b,
   850  	0x32, 0x2c, 0x2e, 0x6c, 0x75, 0x63, 0x69, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73,
   851  	0x2e, 0x76, 0x31, 0x2e, 0x42, 0x75, 0x67, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e,
   852  	0x74, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x52, 0x07,
   853  	0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x12, 0x53, 0x0a, 0x0b, 0x65, 0x78, 0x70, 0x6c, 0x61,
   854  	0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x6c,
   855  	0x75, 0x63, 0x69, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x2e, 0x76, 0x31, 0x2e,
   856  	0x42, 0x75, 0x67, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x50, 0x6f, 0x6c,
   857  	0x69, 0x63, 0x79, 0x2e, 0x45, 0x78, 0x70, 0x6c, 0x61, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52,
   858  	0x0b, 0x65, 0x78, 0x70, 0x6c, 0x61, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0xd5, 0x01, 0x0a,
   859  	0x06, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x12, 0x1b, 0x0a, 0x09, 0x6d, 0x65, 0x74, 0x72, 0x69,
   860  	0x63, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x72,
   861  	0x69, 0x63, 0x49, 0x64, 0x12, 0x54, 0x0a, 0x14, 0x61, 0x63, 0x74, 0x69, 0x76, 0x61, 0x74, 0x69,
   862  	0x6f, 0x6e, 0x5f, 0x74, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x18, 0x02, 0x20, 0x01,
   863  	0x28, 0x0b, 0x32, 0x21, 0x2e, 0x6c, 0x75, 0x63, 0x69, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73,
   864  	0x69, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x54, 0x68, 0x72, 0x65,
   865  	0x73, 0x68, 0x6f, 0x6c, 0x64, 0x52, 0x13, 0x61, 0x63, 0x74, 0x69, 0x76, 0x61, 0x74, 0x69, 0x6f,
   866  	0x6e, 0x54, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x12, 0x58, 0x0a, 0x16, 0x64, 0x65,
   867  	0x61, 0x63, 0x74, 0x69, 0x76, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x68, 0x72, 0x65, 0x73,
   868  	0x68, 0x6f, 0x6c, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x6c, 0x75, 0x63,
   869  	0x69, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65,
   870  	0x74, 0x72, 0x69, 0x63, 0x54, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x52, 0x15, 0x64,
   871  	0x65, 0x61, 0x63, 0x74, 0x69, 0x76, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x68, 0x72, 0x65, 0x73,
   872  	0x68, 0x6f, 0x6c, 0x64, 0x1a, 0x51, 0x0a, 0x0b, 0x45, 0x78, 0x70, 0x6c, 0x61, 0x6e, 0x61, 0x74,
   873  	0x69, 0x6f, 0x6e, 0x12, 0x21, 0x0a, 0x0c, 0x70, 0x72, 0x6f, 0x62, 0x6c, 0x65, 0x6d, 0x5f, 0x68,
   874  	0x74, 0x6d, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x62, 0x6c,
   875  	0x65, 0x6d, 0x48, 0x74, 0x6d, 0x6c, 0x12, 0x1f, 0x0a, 0x0b, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e,
   876  	0x5f, 0x68, 0x74, 0x6d, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x61, 0x63, 0x74,
   877  	0x69, 0x6f, 0x6e, 0x48, 0x74, 0x6d, 0x6c, 0x22, 0x58, 0x0a, 0x0f, 0x4d, 0x6f, 0x6e, 0x6f, 0x72,
   878  	0x61, 0x69, 0x6c, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x72,
   879  	0x6f, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x72, 0x6f,
   880  	0x6a, 0x65, 0x63, 0x74, 0x12, 0x25, 0x0a, 0x0e, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x5f,
   881  	0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x64, 0x69,
   882  	0x73, 0x70, 0x6c, 0x61, 0x79, 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, 0x4a, 0x04, 0x08, 0x03, 0x10,
   883  	0x04, 0x22, 0x9b, 0x01, 0x0a, 0x0f, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x54, 0x68, 0x72, 0x65,
   884  	0x73, 0x68, 0x6f, 0x6c, 0x64, 0x12, 0x1c, 0x0a, 0x07, 0x6f, 0x6e, 0x65, 0x5f, 0x64, 0x61, 0x79,
   885  	0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x48, 0x00, 0x52, 0x06, 0x6f, 0x6e, 0x65, 0x44, 0x61, 0x79,
   886  	0x88, 0x01, 0x01, 0x12, 0x20, 0x0a, 0x09, 0x74, 0x68, 0x72, 0x65, 0x65, 0x5f, 0x64, 0x61, 0x79,
   887  	0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x48, 0x01, 0x52, 0x08, 0x74, 0x68, 0x72, 0x65, 0x65, 0x44,
   888  	0x61, 0x79, 0x88, 0x01, 0x01, 0x12, 0x20, 0x0a, 0x09, 0x73, 0x65, 0x76, 0x65, 0x6e, 0x5f, 0x64,
   889  	0x61, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x48, 0x02, 0x52, 0x08, 0x73, 0x65, 0x76, 0x65,
   890  	0x6e, 0x44, 0x61, 0x79, 0x88, 0x01, 0x01, 0x42, 0x0a, 0x0a, 0x08, 0x5f, 0x6f, 0x6e, 0x65, 0x5f,
   891  	0x64, 0x61, 0x79, 0x42, 0x0c, 0x0a, 0x0a, 0x5f, 0x74, 0x68, 0x72, 0x65, 0x65, 0x5f, 0x64, 0x61,
   892  	0x79, 0x42, 0x0c, 0x0a, 0x0a, 0x5f, 0x73, 0x65, 0x76, 0x65, 0x6e, 0x5f, 0x64, 0x61, 0x79, 0x2a,
   893  	0x5f, 0x0a, 0x11, 0x42, 0x75, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x65, 0x72, 0x50, 0x72, 0x69, 0x6f,
   894  	0x72, 0x69, 0x74, 0x79, 0x12, 0x22, 0x0a, 0x1e, 0x42, 0x55, 0x47, 0x41, 0x4e, 0x49, 0x5a, 0x45,
   895  	0x52, 0x5f, 0x50, 0x52, 0x49, 0x4f, 0x52, 0x49, 0x54, 0x59, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45,
   896  	0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x06, 0x0a, 0x02, 0x50, 0x30, 0x10, 0x01,
   897  	0x12, 0x06, 0x0a, 0x02, 0x50, 0x31, 0x10, 0x02, 0x12, 0x06, 0x0a, 0x02, 0x50, 0x32, 0x10, 0x03,
   898  	0x12, 0x06, 0x0a, 0x02, 0x50, 0x33, 0x10, 0x04, 0x12, 0x06, 0x0a, 0x02, 0x50, 0x34, 0x10, 0x05,
   899  	0x32, 0xbe, 0x01, 0x0a, 0x08, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x12, 0x59, 0x0a,
   900  	0x09, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x29, 0x2e, 0x6c, 0x75, 0x63,
   901  	0x69, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65,
   902  	0x74, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65,
   903  	0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x6c, 0x75, 0x63, 0x69, 0x2e, 0x61, 0x6e, 0x61,
   904  	0x6c, 0x79, 0x73, 0x69, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74,
   905  	0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x22, 0x00, 0x12, 0x57, 0x0a, 0x04, 0x4c, 0x69, 0x73, 0x74,
   906  	0x12, 0x25, 0x2e, 0x6c, 0x75, 0x63, 0x69, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73,
   907  	0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73,
   908  	0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x6c, 0x75, 0x63, 0x69, 0x2e, 0x61,
   909  	0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x50,
   910  	0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22,
   911  	0x00, 0x42, 0x33, 0x5a, 0x31, 0x67, 0x6f, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d,
   912  	0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x6c, 0x75, 0x63, 0x69, 0x2f, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73,
   913  	0x69, 0x73, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x76, 0x31, 0x3b, 0x61, 0x6e, 0x61, 0x6c,
   914  	0x79, 0x73, 0x69, 0x73, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
   915  }
   916  
   917  var (
   918  	file_go_chromium_org_luci_analysis_proto_v1_projects_proto_rawDescOnce sync.Once
   919  	file_go_chromium_org_luci_analysis_proto_v1_projects_proto_rawDescData = file_go_chromium_org_luci_analysis_proto_v1_projects_proto_rawDesc
   920  )
   921  
   922  func file_go_chromium_org_luci_analysis_proto_v1_projects_proto_rawDescGZIP() []byte {
   923  	file_go_chromium_org_luci_analysis_proto_v1_projects_proto_rawDescOnce.Do(func() {
   924  		file_go_chromium_org_luci_analysis_proto_v1_projects_proto_rawDescData = protoimpl.X.CompressGZIP(file_go_chromium_org_luci_analysis_proto_v1_projects_proto_rawDescData)
   925  	})
   926  	return file_go_chromium_org_luci_analysis_proto_v1_projects_proto_rawDescData
   927  }
   928  
   929  var file_go_chromium_org_luci_analysis_proto_v1_projects_proto_enumTypes = make([]protoimpl.EnumInfo, 1)
   930  var file_go_chromium_org_luci_analysis_proto_v1_projects_proto_msgTypes = make([]protoimpl.MessageInfo, 10)
   931  var file_go_chromium_org_luci_analysis_proto_v1_projects_proto_goTypes = []interface{}{
   932  	(BuganizerPriority)(0),                  // 0: luci.analysis.v1.BuganizerPriority
   933  	(*ListProjectsRequest)(nil),             // 1: luci.analysis.v1.ListProjectsRequest
   934  	(*ListProjectsResponse)(nil),            // 2: luci.analysis.v1.ListProjectsResponse
   935  	(*GetProjectConfigRequest)(nil),         // 3: luci.analysis.v1.GetProjectConfigRequest
   936  	(*ProjectConfig)(nil),                   // 4: luci.analysis.v1.ProjectConfig
   937  	(*BugManagement)(nil),                   // 5: luci.analysis.v1.BugManagement
   938  	(*BugManagementPolicy)(nil),             // 6: luci.analysis.v1.BugManagementPolicy
   939  	(*MonorailProject)(nil),                 // 7: luci.analysis.v1.MonorailProject
   940  	(*MetricThreshold)(nil),                 // 8: luci.analysis.v1.MetricThreshold
   941  	(*BugManagementPolicy_Metric)(nil),      // 9: luci.analysis.v1.BugManagementPolicy.Metric
   942  	(*BugManagementPolicy_Explanation)(nil), // 10: luci.analysis.v1.BugManagementPolicy.Explanation
   943  	(*Project)(nil),                         // 11: luci.analysis.v1.Project
   944  }
   945  var file_go_chromium_org_luci_analysis_proto_v1_projects_proto_depIdxs = []int32{
   946  	11, // 0: luci.analysis.v1.ListProjectsResponse.projects:type_name -> luci.analysis.v1.Project
   947  	5,  // 1: luci.analysis.v1.ProjectConfig.bug_management:type_name -> luci.analysis.v1.BugManagement
   948  	6,  // 2: luci.analysis.v1.BugManagement.policies:type_name -> luci.analysis.v1.BugManagementPolicy
   949  	7,  // 3: luci.analysis.v1.BugManagement.monorail:type_name -> luci.analysis.v1.MonorailProject
   950  	0,  // 4: luci.analysis.v1.BugManagementPolicy.priority:type_name -> luci.analysis.v1.BuganizerPriority
   951  	9,  // 5: luci.analysis.v1.BugManagementPolicy.metrics:type_name -> luci.analysis.v1.BugManagementPolicy.Metric
   952  	10, // 6: luci.analysis.v1.BugManagementPolicy.explanation:type_name -> luci.analysis.v1.BugManagementPolicy.Explanation
   953  	8,  // 7: luci.analysis.v1.BugManagementPolicy.Metric.activation_threshold:type_name -> luci.analysis.v1.MetricThreshold
   954  	8,  // 8: luci.analysis.v1.BugManagementPolicy.Metric.deactivation_threshold:type_name -> luci.analysis.v1.MetricThreshold
   955  	3,  // 9: luci.analysis.v1.Projects.GetConfig:input_type -> luci.analysis.v1.GetProjectConfigRequest
   956  	1,  // 10: luci.analysis.v1.Projects.List:input_type -> luci.analysis.v1.ListProjectsRequest
   957  	4,  // 11: luci.analysis.v1.Projects.GetConfig:output_type -> luci.analysis.v1.ProjectConfig
   958  	2,  // 12: luci.analysis.v1.Projects.List:output_type -> luci.analysis.v1.ListProjectsResponse
   959  	11, // [11:13] is the sub-list for method output_type
   960  	9,  // [9:11] is the sub-list for method input_type
   961  	9,  // [9:9] is the sub-list for extension type_name
   962  	9,  // [9:9] is the sub-list for extension extendee
   963  	0,  // [0:9] is the sub-list for field type_name
   964  }
   965  
   966  func init() { file_go_chromium_org_luci_analysis_proto_v1_projects_proto_init() }
   967  func file_go_chromium_org_luci_analysis_proto_v1_projects_proto_init() {
   968  	if File_go_chromium_org_luci_analysis_proto_v1_projects_proto != nil {
   969  		return
   970  	}
   971  	file_go_chromium_org_luci_analysis_proto_v1_project_proto_init()
   972  	if !protoimpl.UnsafeEnabled {
   973  		file_go_chromium_org_luci_analysis_proto_v1_projects_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
   974  			switch v := v.(*ListProjectsRequest); i {
   975  			case 0:
   976  				return &v.state
   977  			case 1:
   978  				return &v.sizeCache
   979  			case 2:
   980  				return &v.unknownFields
   981  			default:
   982  				return nil
   983  			}
   984  		}
   985  		file_go_chromium_org_luci_analysis_proto_v1_projects_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} {
   986  			switch v := v.(*ListProjectsResponse); i {
   987  			case 0:
   988  				return &v.state
   989  			case 1:
   990  				return &v.sizeCache
   991  			case 2:
   992  				return &v.unknownFields
   993  			default:
   994  				return nil
   995  			}
   996  		}
   997  		file_go_chromium_org_luci_analysis_proto_v1_projects_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} {
   998  			switch v := v.(*GetProjectConfigRequest); i {
   999  			case 0:
  1000  				return &v.state
  1001  			case 1:
  1002  				return &v.sizeCache
  1003  			case 2:
  1004  				return &v.unknownFields
  1005  			default:
  1006  				return nil
  1007  			}
  1008  		}
  1009  		file_go_chromium_org_luci_analysis_proto_v1_projects_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} {
  1010  			switch v := v.(*ProjectConfig); i {
  1011  			case 0:
  1012  				return &v.state
  1013  			case 1:
  1014  				return &v.sizeCache
  1015  			case 2:
  1016  				return &v.unknownFields
  1017  			default:
  1018  				return nil
  1019  			}
  1020  		}
  1021  		file_go_chromium_org_luci_analysis_proto_v1_projects_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} {
  1022  			switch v := v.(*BugManagement); i {
  1023  			case 0:
  1024  				return &v.state
  1025  			case 1:
  1026  				return &v.sizeCache
  1027  			case 2:
  1028  				return &v.unknownFields
  1029  			default:
  1030  				return nil
  1031  			}
  1032  		}
  1033  		file_go_chromium_org_luci_analysis_proto_v1_projects_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} {
  1034  			switch v := v.(*BugManagementPolicy); i {
  1035  			case 0:
  1036  				return &v.state
  1037  			case 1:
  1038  				return &v.sizeCache
  1039  			case 2:
  1040  				return &v.unknownFields
  1041  			default:
  1042  				return nil
  1043  			}
  1044  		}
  1045  		file_go_chromium_org_luci_analysis_proto_v1_projects_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} {
  1046  			switch v := v.(*MonorailProject); i {
  1047  			case 0:
  1048  				return &v.state
  1049  			case 1:
  1050  				return &v.sizeCache
  1051  			case 2:
  1052  				return &v.unknownFields
  1053  			default:
  1054  				return nil
  1055  			}
  1056  		}
  1057  		file_go_chromium_org_luci_analysis_proto_v1_projects_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} {
  1058  			switch v := v.(*MetricThreshold); i {
  1059  			case 0:
  1060  				return &v.state
  1061  			case 1:
  1062  				return &v.sizeCache
  1063  			case 2:
  1064  				return &v.unknownFields
  1065  			default:
  1066  				return nil
  1067  			}
  1068  		}
  1069  		file_go_chromium_org_luci_analysis_proto_v1_projects_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} {
  1070  			switch v := v.(*BugManagementPolicy_Metric); i {
  1071  			case 0:
  1072  				return &v.state
  1073  			case 1:
  1074  				return &v.sizeCache
  1075  			case 2:
  1076  				return &v.unknownFields
  1077  			default:
  1078  				return nil
  1079  			}
  1080  		}
  1081  		file_go_chromium_org_luci_analysis_proto_v1_projects_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} {
  1082  			switch v := v.(*BugManagementPolicy_Explanation); i {
  1083  			case 0:
  1084  				return &v.state
  1085  			case 1:
  1086  				return &v.sizeCache
  1087  			case 2:
  1088  				return &v.unknownFields
  1089  			default:
  1090  				return nil
  1091  			}
  1092  		}
  1093  	}
  1094  	file_go_chromium_org_luci_analysis_proto_v1_projects_proto_msgTypes[7].OneofWrappers = []interface{}{}
  1095  	type x struct{}
  1096  	out := protoimpl.TypeBuilder{
  1097  		File: protoimpl.DescBuilder{
  1098  			GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
  1099  			RawDescriptor: file_go_chromium_org_luci_analysis_proto_v1_projects_proto_rawDesc,
  1100  			NumEnums:      1,
  1101  			NumMessages:   10,
  1102  			NumExtensions: 0,
  1103  			NumServices:   1,
  1104  		},
  1105  		GoTypes:           file_go_chromium_org_luci_analysis_proto_v1_projects_proto_goTypes,
  1106  		DependencyIndexes: file_go_chromium_org_luci_analysis_proto_v1_projects_proto_depIdxs,
  1107  		EnumInfos:         file_go_chromium_org_luci_analysis_proto_v1_projects_proto_enumTypes,
  1108  		MessageInfos:      file_go_chromium_org_luci_analysis_proto_v1_projects_proto_msgTypes,
  1109  	}.Build()
  1110  	File_go_chromium_org_luci_analysis_proto_v1_projects_proto = out.File
  1111  	file_go_chromium_org_luci_analysis_proto_v1_projects_proto_rawDesc = nil
  1112  	file_go_chromium_org_luci_analysis_proto_v1_projects_proto_goTypes = nil
  1113  	file_go_chromium_org_luci_analysis_proto_v1_projects_proto_depIdxs = nil
  1114  }
  1115  
  1116  // Reference imports to suppress errors if they are not otherwise used.
  1117  var _ context.Context
  1118  var _ grpc.ClientConnInterface
  1119  
  1120  // This is a compile-time assertion to ensure that this generated file
  1121  // is compatible with the grpc package it is being compiled against.
  1122  const _ = grpc.SupportPackageIsVersion6
  1123  
  1124  // ProjectsClient is the client API for Projects service.
  1125  //
  1126  // For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
  1127  type ProjectsClient interface {
  1128  	// Gets LUCI Analysis configuration for a LUCI Project.
  1129  	//
  1130  	// RPC desigend to comply with https://google.aip.dev/131.
  1131  	GetConfig(ctx context.Context, in *GetProjectConfigRequest, opts ...grpc.CallOption) (*ProjectConfig, error)
  1132  	// Lists LUCI Projects visible to the user.
  1133  	//
  1134  	// RPC compliant with https://google.aip.dev/132.
  1135  	// This RPC is incomplete. Future breaking changes are
  1136  	// expressly flagged.
  1137  	List(ctx context.Context, in *ListProjectsRequest, opts ...grpc.CallOption) (*ListProjectsResponse, error)
  1138  }
  1139  type projectsPRPCClient struct {
  1140  	client *prpc.Client
  1141  }
  1142  
  1143  func NewProjectsPRPCClient(client *prpc.Client) ProjectsClient {
  1144  	return &projectsPRPCClient{client}
  1145  }
  1146  
  1147  func (c *projectsPRPCClient) GetConfig(ctx context.Context, in *GetProjectConfigRequest, opts ...grpc.CallOption) (*ProjectConfig, error) {
  1148  	out := new(ProjectConfig)
  1149  	err := c.client.Call(ctx, "luci.analysis.v1.Projects", "GetConfig", in, out, opts...)
  1150  	if err != nil {
  1151  		return nil, err
  1152  	}
  1153  	return out, nil
  1154  }
  1155  
  1156  func (c *projectsPRPCClient) List(ctx context.Context, in *ListProjectsRequest, opts ...grpc.CallOption) (*ListProjectsResponse, error) {
  1157  	out := new(ListProjectsResponse)
  1158  	err := c.client.Call(ctx, "luci.analysis.v1.Projects", "List", in, out, opts...)
  1159  	if err != nil {
  1160  		return nil, err
  1161  	}
  1162  	return out, nil
  1163  }
  1164  
  1165  type projectsClient struct {
  1166  	cc grpc.ClientConnInterface
  1167  }
  1168  
  1169  func NewProjectsClient(cc grpc.ClientConnInterface) ProjectsClient {
  1170  	return &projectsClient{cc}
  1171  }
  1172  
  1173  func (c *projectsClient) GetConfig(ctx context.Context, in *GetProjectConfigRequest, opts ...grpc.CallOption) (*ProjectConfig, error) {
  1174  	out := new(ProjectConfig)
  1175  	err := c.cc.Invoke(ctx, "/luci.analysis.v1.Projects/GetConfig", in, out, opts...)
  1176  	if err != nil {
  1177  		return nil, err
  1178  	}
  1179  	return out, nil
  1180  }
  1181  
  1182  func (c *projectsClient) List(ctx context.Context, in *ListProjectsRequest, opts ...grpc.CallOption) (*ListProjectsResponse, error) {
  1183  	out := new(ListProjectsResponse)
  1184  	err := c.cc.Invoke(ctx, "/luci.analysis.v1.Projects/List", in, out, opts...)
  1185  	if err != nil {
  1186  		return nil, err
  1187  	}
  1188  	return out, nil
  1189  }
  1190  
  1191  // ProjectsServer is the server API for Projects service.
  1192  type ProjectsServer interface {
  1193  	// Gets LUCI Analysis configuration for a LUCI Project.
  1194  	//
  1195  	// RPC desigend to comply with https://google.aip.dev/131.
  1196  	GetConfig(context.Context, *GetProjectConfigRequest) (*ProjectConfig, error)
  1197  	// Lists LUCI Projects visible to the user.
  1198  	//
  1199  	// RPC compliant with https://google.aip.dev/132.
  1200  	// This RPC is incomplete. Future breaking changes are
  1201  	// expressly flagged.
  1202  	List(context.Context, *ListProjectsRequest) (*ListProjectsResponse, error)
  1203  }
  1204  
  1205  // UnimplementedProjectsServer can be embedded to have forward compatible implementations.
  1206  type UnimplementedProjectsServer struct {
  1207  }
  1208  
  1209  func (*UnimplementedProjectsServer) GetConfig(context.Context, *GetProjectConfigRequest) (*ProjectConfig, error) {
  1210  	return nil, status.Errorf(codes.Unimplemented, "method GetConfig not implemented")
  1211  }
  1212  func (*UnimplementedProjectsServer) List(context.Context, *ListProjectsRequest) (*ListProjectsResponse, error) {
  1213  	return nil, status.Errorf(codes.Unimplemented, "method List not implemented")
  1214  }
  1215  
  1216  func RegisterProjectsServer(s prpc.Registrar, srv ProjectsServer) {
  1217  	s.RegisterService(&_Projects_serviceDesc, srv)
  1218  }
  1219  
  1220  func _Projects_GetConfig_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
  1221  	in := new(GetProjectConfigRequest)
  1222  	if err := dec(in); err != nil {
  1223  		return nil, err
  1224  	}
  1225  	if interceptor == nil {
  1226  		return srv.(ProjectsServer).GetConfig(ctx, in)
  1227  	}
  1228  	info := &grpc.UnaryServerInfo{
  1229  		Server:     srv,
  1230  		FullMethod: "/luci.analysis.v1.Projects/GetConfig",
  1231  	}
  1232  	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
  1233  		return srv.(ProjectsServer).GetConfig(ctx, req.(*GetProjectConfigRequest))
  1234  	}
  1235  	return interceptor(ctx, in, info, handler)
  1236  }
  1237  
  1238  func _Projects_List_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
  1239  	in := new(ListProjectsRequest)
  1240  	if err := dec(in); err != nil {
  1241  		return nil, err
  1242  	}
  1243  	if interceptor == nil {
  1244  		return srv.(ProjectsServer).List(ctx, in)
  1245  	}
  1246  	info := &grpc.UnaryServerInfo{
  1247  		Server:     srv,
  1248  		FullMethod: "/luci.analysis.v1.Projects/List",
  1249  	}
  1250  	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
  1251  		return srv.(ProjectsServer).List(ctx, req.(*ListProjectsRequest))
  1252  	}
  1253  	return interceptor(ctx, in, info, handler)
  1254  }
  1255  
  1256  var _Projects_serviceDesc = grpc.ServiceDesc{
  1257  	ServiceName: "luci.analysis.v1.Projects",
  1258  	HandlerType: (*ProjectsServer)(nil),
  1259  	Methods: []grpc.MethodDesc{
  1260  		{
  1261  			MethodName: "GetConfig",
  1262  			Handler:    _Projects_GetConfig_Handler,
  1263  		},
  1264  		{
  1265  			MethodName: "List",
  1266  			Handler:    _Projects_List_Handler,
  1267  		},
  1268  	},
  1269  	Streams:  []grpc.StreamDesc{},
  1270  	Metadata: "go.chromium.org/luci/analysis/proto/v1/projects.proto",
  1271  }