// Copyright 2018 The Chromium Authors. All rights reserved.
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are
// met:
//
//    * Redistributions of source code must retain the above copyright
// notice, this list of conditions and the following disclaimer.
//    * Redistributions in binary form must reproduce the above
// copyright notice, this list of conditions and the following disclaimer
// in the documentation and/or other materials provided with the
// distribution.
//    * Neither the name of Google Inc. nor the names of its
// contributors may be used to endorse or promote products derived from
// this software without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
// 	protoc-gen-go v1.27.1
// 	protoc        v3.8.0
// source: code_coverage.proto

package codecoverage

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

// Represents a configuration category that is related to the coverage data.
type ConfigCategory int32

const (
	// Related to produce the test binary and data.
	ConfigCategory_BUILD ConfigCategory = 0
	// Related to run the tests.
	ConfigCategory_TEST ConfigCategory = 1
	// Related to the test itself.
	ConfigCategory_TESTHARNESS ConfigCategory = 2
	// Related to the coverage tool.
	ConfigCategory_COVERAGE_TOOL ConfigCategory = 3
)

// Enum value maps for ConfigCategory.
var (
	ConfigCategory_name = map[int32]string{
		0: "BUILD",
		1: "TEST",
		2: "TESTHARNESS",
		3: "COVERAGE_TOOL",
	}
	ConfigCategory_value = map[string]int32{
		"BUILD":         0,
		"TEST":          1,
		"TESTHARNESS":   2,
		"COVERAGE_TOOL": 3,
	}
)

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

func (x ConfigCategory) String() string {
	return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
}

func (ConfigCategory) Descriptor() protoreflect.EnumDescriptor {
	return file_code_coverage_proto_enumTypes[0].Descriptor()
}

func (ConfigCategory) Type() protoreflect.EnumType {
	return &file_code_coverage_proto_enumTypes[0]
}

func (x ConfigCategory) Number() protoreflect.EnumNumber {
	return protoreflect.EnumNumber(x)
}

// Deprecated: Use ConfigCategory.Descriptor instead.
func (ConfigCategory) EnumDescriptor() ([]byte, []int) {
	return file_code_coverage_proto_rawDescGZIP(), []int{0}
}

// Represents the code coverage for multiple full lines in the file.
type LineRange struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// The first line in the range. Inclusive.
	First int32 `protobuf:"varint,1,opt,name=first,proto3" json:"first,omitempty"`
	// The last line in the range. Inclusive.
	// If not set, it is the same as `first` above.
	Last int32 `protobuf:"varint,2,opt,name=last,proto3" json:"last,omitempty"`
	// Meaning of values:
	// * positive: the lines are covered.
	// * zero: the lines are instrumented but not covered by tests.
	// * negative: if the lines are uncoverable or uninstrumented
	//
	// If the coverage tool doesn't support counting how many times a line was
	// executed, the value could only be 1 or 0; otherwise the value could be
	// larger than 1. If the values are the exactly the same for a few consecutive
	// lines, they could be merged into one bigger line range.
	// For example, four small ranges in the middle are merged into a bigger one.
	// |line number|actual count|
	// |28         |1           |   --->  LineRange(?, 28, 1)
	// |29         |10          |   --->  LineRange(29, 32, 10)
	// |30         |10          |
	// |31         |10          |
	// |32         |10          |
	// |33         |1           |   --->  LineRange(33, ?, 1)
	//
	// TODO(crbug.com/925886): As of Jan 28th, 2019, there could be negative
	// |count| in the metadata.
	Count int64 `protobuf:"varint,3,opt,name=count,proto3" json:"count,omitempty"`
}

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

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

func (*LineRange) ProtoMessage() {}

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

func (x *LineRange) GetFirst() int32 {
	if x != nil {
		return x.First
	}
	return 0
}

func (x *LineRange) GetLast() int32 {
	if x != nil {
		return x.Last
	}
	return 0
}

func (x *LineRange) GetCount() int64 {
	if x != nil {
		return x.Count
	}
	return 0
}

// Represents column range within the same line.
type ColumnRange struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// The first column of the code block. Inclusive.
	First int32 `protobuf:"varint,1,opt,name=first,proto3" json:"first,omitempty"`
	// The last column of the code block. Inclusive.
	// If not set, it is the same as `first` above.
	Last int32 `protobuf:"varint,2,opt,name=last,proto3" json:"last,omitempty"`
}

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

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

func (*ColumnRange) ProtoMessage() {}

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

func (x *ColumnRange) GetFirst() int32 {
	if x != nil {
		return x.First
	}
	return 0
}

func (x *ColumnRange) GetLast() int32 {
	if x != nil {
		return x.Last
	}
	return 0
}

// Represents multiple column ranges of a line.
type ColumnRanges struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// The line number of the code block.
	Line int32 `protobuf:"varint,1,opt,name=line,proto3" json:"line,omitempty"`
	// The column ranges within the line.
	Ranges []*ColumnRange `protobuf:"bytes,2,rep,name=ranges,proto3" json:"ranges,omitempty"`
}

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

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

func (*ColumnRanges) ProtoMessage() {}

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

func (x *ColumnRanges) GetLine() int32 {
	if x != nil {
		return x.Line
	}
	return 0
}

func (x *ColumnRanges) GetRanges() []*ColumnRange {
	if x != nil {
		return x.Ranges
	}
	return nil
}

// Represents the code coverage of code branches at a line.
type Branch struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// The line number which the branch info belongs to.
	Line int32 `protobuf:"varint,1,opt,name=line,proto3" json:"line,omitempty"`
	// The total number of branches.
	Total int32 `protobuf:"varint,2,opt,name=total,proto3" json:"total,omitempty"`
	// The number of covered branches.
	Covered int32 `protobuf:"varint,3,opt,name=covered,proto3" json:"covered,omitempty"`
}

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

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

func (*Branch) ProtoMessage() {}

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

func (x *Branch) GetLine() int32 {
	if x != nil {
		return x.Line
	}
	return 0
}

func (x *Branch) GetTotal() int32 {
	if x != nil {
		return x.Total
	}
	return 0
}

func (x *Branch) GetCovered() int32 {
	if x != nil {
		return x.Covered
	}
	return 0
}

// Represents a code coverage metric of a file or a directory.
type Metric struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// The name of the metric, e.g. "line", "function", "region", etc.
	Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
	// The total number of coverable ones.
	Total int32 `protobuf:"varint,2,opt,name=total,proto3" json:"total,omitempty"`
	// The number of covered ones.
	Covered int32 `protobuf:"varint,3,opt,name=covered,proto3" json:"covered,omitempty"`
}

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

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

func (*Metric) ProtoMessage() {}

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

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

func (x *Metric) GetTotal() int32 {
	if x != nil {
		return x.Total
	}
	return 0
}

func (x *Metric) GetCovered() int32 {
	if x != nil {
		return x.Covered
	}
	return 0
}

// Represents the code coverage info of a single source file.
type File struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// Source absolute path to the file, e.g. '//base/file.cc'.
	Path string `protobuf:"bytes,1,opt,name=path,proto3" json:"path,omitempty"`
	// The code coverage info of the lines in the file.
	// If a line is not executable or not instrumented to collect coverage info,
	// it is not coverable and won't be included here.
	Lines []*LineRange `protobuf:"bytes,3,rep,name=lines,proto3" json:"lines,omitempty"`
	// The uncovered code blocks in the file.
	UncoveredBlocks []*ColumnRanges `protobuf:"bytes,4,rep,name=uncovered_blocks,json=uncoveredBlocks,proto3" json:"uncovered_blocks,omitempty"`
	// The code branch info for if/else/etc.
	Branches []*Branch `protobuf:"bytes,5,rep,name=branches,proto3" json:"branches,omitempty"`
	// Code coverage summary for the file.
	Summaries []*Metric `protobuf:"bytes,6,rep,name=summaries,proto3" json:"summaries,omitempty"`
	// The git hash (up to the revision in the checkout) of the commit in Gitiles
	// when the file was most recently changed.
	// E.g. fc7b1de555d4b1fe5b7ff2e4c99662a10cf4ddd6.
	// Empty if the file not tracked by gitiles, such as generated source files.
	Revision string `protobuf:"bytes,7,opt,name=revision,proto3" json:"revision,omitempty"`
	// The UNIX timestamp of the committer date for the revision above.
	Timestamp int64 `protobuf:"varint,8,opt,name=timestamp,proto3" json:"timestamp,omitempty"`
}

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

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

func (*File) ProtoMessage() {}

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

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

func (x *File) GetLines() []*LineRange {
	if x != nil {
		return x.Lines
	}
	return nil
}

func (x *File) GetUncoveredBlocks() []*ColumnRanges {
	if x != nil {
		return x.UncoveredBlocks
	}
	return nil
}

func (x *File) GetBranches() []*Branch {
	if x != nil {
		return x.Branches
	}
	return nil
}

func (x *File) GetSummaries() []*Metric {
	if x != nil {
		return x.Summaries
	}
	return nil
}

func (x *File) GetRevision() string {
	if x != nil {
		return x.Revision
	}
	return ""
}

func (x *File) GetTimestamp() int64 {
	if x != nil {
		return x.Timestamp
	}
	return 0
}

// Represents the summary metrics for a given file or a directory.
type CoverageSummary struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// The name of the file, directory, or crbug component.
	// For a directory, it should end with a "/", e.g. "base/".
	// For a file, it should be the file name.
	// For a crbug component, it should be the full path.
	Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
	// The full path to the file, directory, or crbug component.
	Path string `protobuf:"bytes,2,opt,name=path,proto3" json:"path,omitempty"`
	// The metrics for the file or directory.
	Summaries []*Metric `protobuf:"bytes,3,rep,name=summaries,proto3" json:"summaries,omitempty"`
}

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

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

func (*CoverageSummary) ProtoMessage() {}

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

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

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

func (x *CoverageSummary) GetSummaries() []*Metric {
	if x != nil {
		return x.Summaries
	}
	return nil
}

// Represents the summary metrics for:
// * A single directory and its immediate children.
// * All directories mapping to a single crbug component.
type GroupCoverageSummary struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// Two cases:
	// * The full path of the directory relative to the root of the code base.
	//   For a directory, this should end with a "/", e.g. "//base/".
	//   For the root directory, this should be "//".
	// * The full path of the crbug component like "Blink>Storage>AppCache".
	Path string `protobuf:"bytes,1,opt,name=path,proto3" json:"path,omitempty"`
	// The coverage metrics for its sub directories.
	Dirs []*CoverageSummary `protobuf:"bytes,2,rep,name=dirs,proto3" json:"dirs,omitempty"`
	// The coverage metrics for all the files within the directory.
	Files []*CoverageSummary `protobuf:"bytes,3,rep,name=files,proto3" json:"files,omitempty"`
	// Code coverage summary for the group.
	Summaries []*Metric `protobuf:"bytes,6,rep,name=summaries,proto3" json:"summaries,omitempty"`
}

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

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

func (*GroupCoverageSummary) ProtoMessage() {}

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

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

func (x *GroupCoverageSummary) GetDirs() []*CoverageSummary {
	if x != nil {
		return x.Dirs
	}
	return nil
}

func (x *GroupCoverageSummary) GetFiles() []*CoverageSummary {
	if x != nil {
		return x.Files
	}
	return nil
}

func (x *GroupCoverageSummary) GetSummaries() []*Metric {
	if x != nil {
		return x.Summaries
	}
	return nil
}

// Represents a commit in a Gitiles repository.
type GitilesCommit struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// Hostname of the Gitiles server, e.g. chromium.googlesource.com.
	Host string `protobuf:"bytes,1,opt,name=host,proto3" json:"host,omitempty"`
	// Project name in the Gitiles, e.g. chromium/src.
	Project string `protobuf:"bytes,2,opt,name=project,proto3" json:"project,omitempty"`
	// The git hash of the commit in Gitiles, e.g.
	// fc7b1de555d4b1fe5b7ff2e4c99662a10cf4ddd6.
	Revision string `protobuf:"bytes,3,opt,name=revision,proto3" json:"revision,omitempty"`
	// The commit position of the commit in Gitiles, e.g. 606065.
	// since not every repository has commit position.
	CommitPosition int32 `protobuf:"varint,4,opt,name=commit_position,json=commitPosition,proto3" json:"commit_position,omitempty"`
}

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

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

func (*GitilesCommit) ProtoMessage() {}

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

func (x *GitilesCommit) GetHost() string {
	if x != nil {
		return x.Host
	}
	return ""
}

func (x *GitilesCommit) GetProject() string {
	if x != nil {
		return x.Project
	}
	return ""
}

func (x *GitilesCommit) GetRevision() string {
	if x != nil {
		return x.Revision
	}
	return ""
}

func (x *GitilesCommit) GetCommitPosition() int32 {
	if x != nil {
		return x.CommitPosition
	}
	return 0
}

// Represents a patch of a CL in a Gerrit project.
type GerritPatch struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// Hostname of the Gerrit server, e.g. chromium-review.googlesource.com.
	Host string `protobuf:"bytes,1,opt,name=host,proto3" json:"host,omitempty"`
	// The id of the CL, e.g. 1296501.
	Cl int32 `protobuf:"varint,2,opt,name=cl,proto3" json:"cl,omitempty"`
	// The id of the patch in the CL, e.g. 43.
	Patch int32 `protobuf:"varint,3,opt,name=patch,proto3" json:"patch,omitempty"`
	// Project name of the CL, e.g. chromium/src.
	// Optional, since the cl number is unique in a Gerrit server.
	Project string `protobuf:"bytes,4,opt,name=project,proto3" json:"project,omitempty"`
}

func (x *GerritPatch) Reset() {
	*x = GerritPatch{}
	if protoimpl.UnsafeEnabled {
		mi := &file_code_coverage_proto_msgTypes[9]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

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

func (*GerritPatch) ProtoMessage() {}

func (x *GerritPatch) ProtoReflect() protoreflect.Message {
	mi := &file_code_coverage_proto_msgTypes[9]
	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 GerritPatch.ProtoReflect.Descriptor instead.
func (*GerritPatch) Descriptor() ([]byte, []int) {
	return file_code_coverage_proto_rawDescGZIP(), []int{9}
}

func (x *GerritPatch) GetHost() string {
	if x != nil {
		return x.Host
	}
	return ""
}

func (x *GerritPatch) GetCl() int32 {
	if x != nil {
		return x.Cl
	}
	return 0
}

func (x *GerritPatch) GetPatch() int32 {
	if x != nil {
		return x.Patch
	}
	return 0
}

func (x *GerritPatch) GetProject() string {
	if x != nil {
		return x.Project
	}
	return ""
}

// Represents a config setting.
type ConfigSetting struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// The category of the setting.
	Category ConfigCategory `protobuf:"varint,1,opt,name=category,proto3,enum=codecoverage.ConfigCategory" json:"category,omitempty"`
	// Name of the key, e.g. "builder".
	Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"`
	// Value for the key, e.g. "Linux Builder".
	Value string `protobuf:"bytes,3,opt,name=value,proto3" json:"value,omitempty"`
}

func (x *ConfigSetting) Reset() {
	*x = ConfigSetting{}
	if protoimpl.UnsafeEnabled {
		mi := &file_code_coverage_proto_msgTypes[10]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

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

func (*ConfigSetting) ProtoMessage() {}

func (x *ConfigSetting) ProtoReflect() protoreflect.Message {
	mi := &file_code_coverage_proto_msgTypes[10]
	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 ConfigSetting.ProtoReflect.Descriptor instead.
func (*ConfigSetting) Descriptor() ([]byte, []int) {
	return file_code_coverage_proto_rawDescGZIP(), []int{10}
}

func (x *ConfigSetting) GetCategory() ConfigCategory {
	if x != nil {
		return x.Category
	}
	return ConfigCategory_BUILD
}

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

func (x *ConfigSetting) GetValue() string {
	if x != nil {
		return x.Value
	}
	return ""
}

// Represents a code coverage report.
type CoverageReport struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// Either a Gitiles commit or a Gerrit patch must be provided.
	Commit *GitilesCommit `protobuf:"bytes,1,opt,name=commit,proto3" json:"commit,omitempty"`
	Patch  *GerritPatch   `protobuf:"bytes,2,opt,name=patch,proto3" json:"patch,omitempty"`
	// The build/test/etc configurations that were used to generate coverage data.
	BuildConfigs []*ConfigSetting `protobuf:"bytes,3,rep,name=build_configs,json=buildConfigs,proto3" json:"build_configs,omitempty"`
	// Code coverage info of individual source files.
	Files []*File `protobuf:"bytes,4,rep,name=files,proto3" json:"files,omitempty"`
	// Code coverage info of individual source files saved in separate files.
	FileShards []string `protobuf:"bytes,5,rep,name=file_shards,json=fileShards,proto3" json:"file_shards,omitempty"`
	// Code coverage summary for all directories.
	Dirs []*GroupCoverageSummary `protobuf:"bytes,6,rep,name=dirs,proto3" json:"dirs,omitempty"`
	// Code coverage summary for all crbug components.
	Components []*GroupCoverageSummary `protobuf:"bytes,7,rep,name=components,proto3" json:"components,omitempty"`
	// Code coverage summary for the root directory.
	Summaries []*Metric `protobuf:"bytes,8,rep,name=summaries,proto3" json:"summaries,omitempty"`
}

func (x *CoverageReport) Reset() {
	*x = CoverageReport{}
	if protoimpl.UnsafeEnabled {
		mi := &file_code_coverage_proto_msgTypes[11]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

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

func (*CoverageReport) ProtoMessage() {}

func (x *CoverageReport) ProtoReflect() protoreflect.Message {
	mi := &file_code_coverage_proto_msgTypes[11]
	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 CoverageReport.ProtoReflect.Descriptor instead.
func (*CoverageReport) Descriptor() ([]byte, []int) {
	return file_code_coverage_proto_rawDescGZIP(), []int{11}
}

func (x *CoverageReport) GetCommit() *GitilesCommit {
	if x != nil {
		return x.Commit
	}
	return nil
}

func (x *CoverageReport) GetPatch() *GerritPatch {
	if x != nil {
		return x.Patch
	}
	return nil
}

func (x *CoverageReport) GetBuildConfigs() []*ConfigSetting {
	if x != nil {
		return x.BuildConfigs
	}
	return nil
}

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

func (x *CoverageReport) GetFileShards() []string {
	if x != nil {
		return x.FileShards
	}
	return nil
}

func (x *CoverageReport) GetDirs() []*GroupCoverageSummary {
	if x != nil {
		return x.Dirs
	}
	return nil
}

func (x *CoverageReport) GetComponents() []*GroupCoverageSummary {
	if x != nil {
		return x.Components
	}
	return nil
}

func (x *CoverageReport) GetSummaries() []*Metric {
	if x != nil {
		return x.Summaries
	}
	return nil
}

var File_code_coverage_proto protoreflect.FileDescriptor

var file_code_coverage_proto_rawDesc = []byte{
	0x0a, 0x13, 0x63, 0x6f, 0x64, 0x65, 0x5f, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x61, 0x67, 0x65, 0x2e,
	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x0c, 0x63, 0x6f, 0x64, 0x65, 0x63, 0x6f, 0x76, 0x65, 0x72,
	0x61, 0x67, 0x65, 0x22, 0x4b, 0x0a, 0x09, 0x4c, 0x69, 0x6e, 0x65, 0x52, 0x61, 0x6e, 0x67, 0x65,
	0x12, 0x14, 0x0a, 0x05, 0x66, 0x69, 0x72, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52,
	0x05, 0x66, 0x69, 0x72, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6c, 0x61, 0x73, 0x74, 0x18, 0x02,
	0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x6c, 0x61, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f,
	0x75, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74,
	0x22, 0x37, 0x0a, 0x0b, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x12,
	0x14, 0x0a, 0x05, 0x66, 0x69, 0x72, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05,
	0x66, 0x69, 0x72, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6c, 0x61, 0x73, 0x74, 0x18, 0x02, 0x20,
	0x01, 0x28, 0x05, 0x52, 0x04, 0x6c, 0x61, 0x73, 0x74, 0x22, 0x55, 0x0a, 0x0c, 0x43, 0x6f, 0x6c,
	0x75, 0x6d, 0x6e, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x6c, 0x69, 0x6e,
	0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x6c, 0x69, 0x6e, 0x65, 0x12, 0x31, 0x0a,
	0x06, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e,
	0x63, 0x6f, 0x64, 0x65, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x43, 0x6f, 0x6c,
	0x75, 0x6d, 0x6e, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x06, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x73,
	0x22, 0x4c, 0x0a, 0x06, 0x42, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x12, 0x12, 0x0a, 0x04, 0x6c, 0x69,
	0x6e, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x6c, 0x69, 0x6e, 0x65, 0x12, 0x14,
	0x0a, 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x74,
	0x6f, 0x74, 0x61, 0x6c, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x65, 0x64, 0x18,
	0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x65, 0x64, 0x22, 0x4c,
	0x0a, 0x06, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65,
	0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05,
	0x74, 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x74, 0x6f, 0x74,
	0x61, 0x6c, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x65, 0x64, 0x18, 0x03, 0x20,
	0x01, 0x28, 0x05, 0x52, 0x07, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x65, 0x64, 0x22, 0xb6, 0x02, 0x0a,
	0x04, 0x46, 0x69, 0x6c, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x01, 0x20,
	0x01, 0x28, 0x09, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x12, 0x2d, 0x0a, 0x05, 0x6c, 0x69, 0x6e,
	0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x63,
	0x6f, 0x76, 0x65, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x4c, 0x69, 0x6e, 0x65, 0x52, 0x61, 0x6e, 0x67,
	0x65, 0x52, 0x05, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x12, 0x45, 0x0a, 0x10, 0x75, 0x6e, 0x63, 0x6f,
	0x76, 0x65, 0x72, 0x65, 0x64, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x18, 0x04, 0x20, 0x03,
	0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x61, 0x67,
	0x65, 0x2e, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x52, 0x0f,
	0x75, 0x6e, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x65, 0x64, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x12,
	0x30, 0x0a, 0x08, 0x62, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x65, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28,
	0x0b, 0x32, 0x14, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x61, 0x67, 0x65,
	0x2e, 0x42, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x52, 0x08, 0x62, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x65,
	0x73, 0x12, 0x32, 0x0a, 0x09, 0x73, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x69, 0x65, 0x73, 0x18, 0x06,
	0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x63, 0x6f, 0x76, 0x65, 0x72,
	0x61, 0x67, 0x65, 0x2e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x52, 0x09, 0x73, 0x75, 0x6d, 0x6d,
	0x61, 0x72, 0x69, 0x65, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f,
	0x6e, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f,
	0x6e, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x08,
	0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x4a,
	0x04, 0x08, 0x02, 0x10, 0x03, 0x22, 0x6d, 0x0a, 0x0f, 0x43, 0x6f, 0x76, 0x65, 0x72, 0x61, 0x67,
	0x65, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65,
	0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04,
	0x70, 0x61, 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68,
	0x12, 0x32, 0x0a, 0x09, 0x73, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x69, 0x65, 0x73, 0x18, 0x03, 0x20,
	0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x61,
	0x67, 0x65, 0x2e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x52, 0x09, 0x73, 0x75, 0x6d, 0x6d, 0x61,
	0x72, 0x69, 0x65, 0x73, 0x22, 0xc6, 0x01, 0x0a, 0x14, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x43, 0x6f,
	0x76, 0x65, 0x72, 0x61, 0x67, 0x65, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x12, 0x12, 0x0a,
	0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, 0x61, 0x74,
	0x68, 0x12, 0x31, 0x0a, 0x04, 0x64, 0x69, 0x72, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32,
	0x1d, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x43,
	0x6f, 0x76, 0x65, 0x72, 0x61, 0x67, 0x65, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x52, 0x04,
	0x64, 0x69, 0x72, 0x73, 0x12, 0x33, 0x0a, 0x05, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x18, 0x03, 0x20,
	0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x61,
	0x67, 0x65, 0x2e, 0x43, 0x6f, 0x76, 0x65, 0x72, 0x61, 0x67, 0x65, 0x53, 0x75, 0x6d, 0x6d, 0x61,
	0x72, 0x79, 0x52, 0x05, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x12, 0x32, 0x0a, 0x09, 0x73, 0x75, 0x6d,
	0x6d, 0x61, 0x72, 0x69, 0x65, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x63,
	0x6f, 0x64, 0x65, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x4d, 0x65, 0x74, 0x72,
	0x69, 0x63, 0x52, 0x09, 0x73, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x69, 0x65, 0x73, 0x22, 0x82, 0x01,
	0x0a, 0x0d, 0x47, 0x69, 0x74, 0x69, 0x6c, 0x65, 0x73, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x12,
	0x12, 0x0a, 0x04, 0x68, 0x6f, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x68,
	0x6f, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x02,
	0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x1a, 0x0a,
	0x08, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52,
	0x08, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x27, 0x0a, 0x0f, 0x63, 0x6f, 0x6d,
	0x6d, 0x69, 0x74, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01,
	0x28, 0x05, 0x52, 0x0e, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69,
	0x6f, 0x6e, 0x22, 0x61, 0x0a, 0x0b, 0x47, 0x65, 0x72, 0x72, 0x69, 0x74, 0x50, 0x61, 0x74, 0x63,
	0x68, 0x12, 0x12, 0x0a, 0x04, 0x68, 0x6f, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52,
	0x04, 0x68, 0x6f, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x63, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28,
	0x05, 0x52, 0x02, 0x63, 0x6c, 0x12, 0x14, 0x0a, 0x05, 0x70, 0x61, 0x74, 0x63, 0x68, 0x18, 0x03,
	0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x70, 0x61, 0x74, 0x63, 0x68, 0x12, 0x18, 0x0a, 0x07, 0x70,
	0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x72,
	0x6f, 0x6a, 0x65, 0x63, 0x74, 0x22, 0x73, 0x0a, 0x0d, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x53,
	0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x12, 0x38, 0x0a, 0x08, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f,
	0x72, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1c, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x63,
	0x6f, 0x76, 0x65, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x43, 0x61,
	0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x52, 0x08, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79,
	0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04,
	0x6e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03, 0x20,
	0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0xb3, 0x03, 0x0a, 0x0e, 0x43,
	0x6f, 0x76, 0x65, 0x72, 0x61, 0x67, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x12, 0x33, 0x0a,
	0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e,
	0x63, 0x6f, 0x64, 0x65, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x47, 0x69, 0x74,
	0x69, 0x6c, 0x65, 0x73, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x52, 0x06, 0x63, 0x6f, 0x6d, 0x6d,
	0x69, 0x74, 0x12, 0x2f, 0x0a, 0x05, 0x70, 0x61, 0x74, 0x63, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28,
	0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x61, 0x67, 0x65,
	0x2e, 0x47, 0x65, 0x72, 0x72, 0x69, 0x74, 0x50, 0x61, 0x74, 0x63, 0x68, 0x52, 0x05, 0x70, 0x61,
	0x74, 0x63, 0x68, 0x12, 0x40, 0x0a, 0x0d, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x63, 0x6f, 0x6e,
	0x66, 0x69, 0x67, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x63, 0x6f, 0x64,
	0x65, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67,
	0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x0c, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x43, 0x6f,
	0x6e, 0x66, 0x69, 0x67, 0x73, 0x12, 0x28, 0x0a, 0x05, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x18, 0x04,
	0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x63, 0x6f, 0x76, 0x65, 0x72,
	0x61, 0x67, 0x65, 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x52, 0x05, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x12,
	0x1f, 0x0a, 0x0b, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x73, 0x68, 0x61, 0x72, 0x64, 0x73, 0x18, 0x05,
	0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x66, 0x69, 0x6c, 0x65, 0x53, 0x68, 0x61, 0x72, 0x64, 0x73,
	0x12, 0x36, 0x0a, 0x04, 0x64, 0x69, 0x72, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22,
	0x2e, 0x63, 0x6f, 0x64, 0x65, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x47, 0x72,
	0x6f, 0x75, 0x70, 0x43, 0x6f, 0x76, 0x65, 0x72, 0x61, 0x67, 0x65, 0x53, 0x75, 0x6d, 0x6d, 0x61,
	0x72, 0x79, 0x52, 0x04, 0x64, 0x69, 0x72, 0x73, 0x12, 0x42, 0x0a, 0x0a, 0x63, 0x6f, 0x6d, 0x70,
	0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x63,
	0x6f, 0x64, 0x65, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x47, 0x72, 0x6f, 0x75,
	0x70, 0x43, 0x6f, 0x76, 0x65, 0x72, 0x61, 0x67, 0x65, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79,
	0x52, 0x0a, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x32, 0x0a, 0x09,
	0x73, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x69, 0x65, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32,
	0x14, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x4d,
	0x65, 0x74, 0x72, 0x69, 0x63, 0x52, 0x09, 0x73, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x69, 0x65, 0x73,
	0x2a, 0x49, 0x0a, 0x0e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x43, 0x61, 0x74, 0x65, 0x67, 0x6f,
	0x72, 0x79, 0x12, 0x09, 0x0a, 0x05, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x10, 0x00, 0x12, 0x08, 0x0a,
	0x04, 0x54, 0x45, 0x53, 0x54, 0x10, 0x01, 0x12, 0x0f, 0x0a, 0x0b, 0x54, 0x45, 0x53, 0x54, 0x48,
	0x41, 0x52, 0x4e, 0x45, 0x53, 0x53, 0x10, 0x02, 0x12, 0x11, 0x0a, 0x0d, 0x43, 0x4f, 0x56, 0x45,
	0x52, 0x41, 0x47, 0x45, 0x5f, 0x54, 0x4f, 0x4f, 0x4c, 0x10, 0x03, 0x42, 0x49, 0x5a, 0x47, 0x67,
	0x6f, 0x2e, 0x66, 0x75, 0x63, 0x68, 0x73, 0x69, 0x61, 0x2e, 0x64, 0x65, 0x76, 0x2f, 0x66, 0x75,
	0x63, 0x68, 0x73, 0x69, 0x61, 0x2f, 0x74, 0x6f, 0x6f, 0x6c, 0x73, 0x2f, 0x64, 0x65, 0x62, 0x75,
	0x67, 0x2f, 0x63, 0x6f, 0x76, 0x61, 0x72, 0x67, 0x73, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x74, 0x68,
	0x69, 0x72, 0x64, 0x5f, 0x70, 0x61, 0x72, 0x74, 0x79, 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x63, 0x6f,
	0x76, 0x65, 0x72, 0x61, 0x67, 0x65, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
}

var (
	file_code_coverage_proto_rawDescOnce sync.Once
	file_code_coverage_proto_rawDescData = file_code_coverage_proto_rawDesc
)

func file_code_coverage_proto_rawDescGZIP() []byte {
	file_code_coverage_proto_rawDescOnce.Do(func() {
		file_code_coverage_proto_rawDescData = protoimpl.X.CompressGZIP(file_code_coverage_proto_rawDescData)
	})
	return file_code_coverage_proto_rawDescData
}

var file_code_coverage_proto_enumTypes = make([]protoimpl.EnumInfo, 1)
var file_code_coverage_proto_msgTypes = make([]protoimpl.MessageInfo, 12)
var file_code_coverage_proto_goTypes = []interface{}{
	(ConfigCategory)(0),          // 0: codecoverage.ConfigCategory
	(*LineRange)(nil),            // 1: codecoverage.LineRange
	(*ColumnRange)(nil),          // 2: codecoverage.ColumnRange
	(*ColumnRanges)(nil),         // 3: codecoverage.ColumnRanges
	(*Branch)(nil),               // 4: codecoverage.Branch
	(*Metric)(nil),               // 5: codecoverage.Metric
	(*File)(nil),                 // 6: codecoverage.File
	(*CoverageSummary)(nil),      // 7: codecoverage.CoverageSummary
	(*GroupCoverageSummary)(nil), // 8: codecoverage.GroupCoverageSummary
	(*GitilesCommit)(nil),        // 9: codecoverage.GitilesCommit
	(*GerritPatch)(nil),          // 10: codecoverage.GerritPatch
	(*ConfigSetting)(nil),        // 11: codecoverage.ConfigSetting
	(*CoverageReport)(nil),       // 12: codecoverage.CoverageReport
}
var file_code_coverage_proto_depIdxs = []int32{
	2,  // 0: codecoverage.ColumnRanges.ranges:type_name -> codecoverage.ColumnRange
	1,  // 1: codecoverage.File.lines:type_name -> codecoverage.LineRange
	3,  // 2: codecoverage.File.uncovered_blocks:type_name -> codecoverage.ColumnRanges
	4,  // 3: codecoverage.File.branches:type_name -> codecoverage.Branch
	5,  // 4: codecoverage.File.summaries:type_name -> codecoverage.Metric
	5,  // 5: codecoverage.CoverageSummary.summaries:type_name -> codecoverage.Metric
	7,  // 6: codecoverage.GroupCoverageSummary.dirs:type_name -> codecoverage.CoverageSummary
	7,  // 7: codecoverage.GroupCoverageSummary.files:type_name -> codecoverage.CoverageSummary
	5,  // 8: codecoverage.GroupCoverageSummary.summaries:type_name -> codecoverage.Metric
	0,  // 9: codecoverage.ConfigSetting.category:type_name -> codecoverage.ConfigCategory
	9,  // 10: codecoverage.CoverageReport.commit:type_name -> codecoverage.GitilesCommit
	10, // 11: codecoverage.CoverageReport.patch:type_name -> codecoverage.GerritPatch
	11, // 12: codecoverage.CoverageReport.build_configs:type_name -> codecoverage.ConfigSetting
	6,  // 13: codecoverage.CoverageReport.files:type_name -> codecoverage.File
	8,  // 14: codecoverage.CoverageReport.dirs:type_name -> codecoverage.GroupCoverageSummary
	8,  // 15: codecoverage.CoverageReport.components:type_name -> codecoverage.GroupCoverageSummary
	5,  // 16: codecoverage.CoverageReport.summaries:type_name -> codecoverage.Metric
	17, // [17:17] is the sub-list for method output_type
	17, // [17:17] is the sub-list for method input_type
	17, // [17:17] is the sub-list for extension type_name
	17, // [17:17] is the sub-list for extension extendee
	0,  // [0:17] is the sub-list for field type_name
}

func init() { file_code_coverage_proto_init() }
func file_code_coverage_proto_init() {
	if File_code_coverage_proto != nil {
		return
	}
	if !protoimpl.UnsafeEnabled {
		file_code_coverage_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*LineRange); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_code_coverage_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*ColumnRange); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_code_coverage_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*ColumnRanges); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_code_coverage_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*Branch); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_code_coverage_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*Metric); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_code_coverage_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*File); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_code_coverage_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*CoverageSummary); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_code_coverage_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*GroupCoverageSummary); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_code_coverage_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*GitilesCommit); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_code_coverage_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*GerritPatch); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_code_coverage_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*ConfigSetting); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_code_coverage_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*CoverageReport); 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_code_coverage_proto_rawDesc,
			NumEnums:      1,
			NumMessages:   12,
			NumExtensions: 0,
			NumServices:   0,
		},
		GoTypes:           file_code_coverage_proto_goTypes,
		DependencyIndexes: file_code_coverage_proto_depIdxs,
		EnumInfos:         file_code_coverage_proto_enumTypes,
		MessageInfos:      file_code_coverage_proto_msgTypes,
	}.Build()
	File_code_coverage_proto = out.File
	file_code_coverage_proto_rawDesc = nil
	file_code_coverage_proto_goTypes = nil
	file_code_coverage_proto_depIdxs = nil
}
