// Copyright 2020 The ChromiumOS Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
// 	protoc-gen-go v1.27.1
// 	protoc        v3.17.1
// source: chromiumos/repo_cache_state.proto

package chromiumos

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

// The state of the tree.
type RepoState_State int32

const (
	// Unknown: Treated as if it was DIRTY.
	RepoState_STATE_UNSPECIFIED RepoState_State = 0
	// Clean.  The tree is clean.
	RepoState_STATE_CLEAN RepoState_State = 1
	// Dirty.  The tree is in the process of being updated.
	RepoState_STATE_DIRTY RepoState_State = 2
	// Recovery.  Recovery from DIRTY is in progress.
	RepoState_STATE_RECOVERY RepoState_State = 3
)

// Enum value maps for RepoState_State.
var (
	RepoState_State_name = map[int32]string{
		0: "STATE_UNSPECIFIED",
		1: "STATE_CLEAN",
		2: "STATE_DIRTY",
		3: "STATE_RECOVERY",
	}
	RepoState_State_value = map[string]int32{
		"STATE_UNSPECIFIED": 0,
		"STATE_CLEAN":       1,
		"STATE_DIRTY":       2,
		"STATE_RECOVERY":    3,
	}
)

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

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

func (RepoState_State) Descriptor() protoreflect.EnumDescriptor {
	return file_chromiumos_repo_cache_state_proto_enumTypes[0].Descriptor()
}

func (RepoState_State) Type() protoreflect.EnumType {
	return &file_chromiumos_repo_cache_state_proto_enumTypes[0]
}

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

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

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

	State RepoState_State `protobuf:"varint,1,opt,name=state,proto3,enum=chromiumos.RepoState_State" json:"state,omitempty"`
	// The checked out branch.
	ManifestBranch string `protobuf:"bytes,2,opt,name=manifest_branch,json=manifestBranch,proto3" json:"manifest_branch,omitempty"`
	// The manifest URL.
	ManifestUrl string `protobuf:"bytes,3,opt,name=manifest_url,json=manifestUrl,proto3" json:"manifest_url,omitempty"`
}

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

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

func (*RepoState) ProtoMessage() {}

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

func (x *RepoState) GetState() RepoState_State {
	if x != nil {
		return x.State
	}
	return RepoState_STATE_UNSPECIFIED
}

func (x *RepoState) GetManifestBranch() string {
	if x != nil {
		return x.ManifestBranch
	}
	return ""
}

func (x *RepoState) GetManifestUrl() string {
	if x != nil {
		return x.ManifestUrl
	}
	return ""
}

var File_chromiumos_repo_cache_state_proto protoreflect.FileDescriptor

var file_chromiumos_repo_cache_state_proto_rawDesc = []byte{
	0x0a, 0x21, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x6f, 0x73, 0x2f, 0x72, 0x65, 0x70,
	0x6f, 0x5f, 0x63, 0x61, 0x63, 0x68, 0x65, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x70, 0x72,
	0x6f, 0x74, 0x6f, 0x12, 0x0a, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x6f, 0x73, 0x22,
	0xe0, 0x01, 0x0a, 0x09, 0x52, 0x65, 0x70, 0x6f, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x31, 0x0a,
	0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1b, 0x2e, 0x63,
	0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x6f, 0x73, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x53, 0x74,
	0x61, 0x74, 0x65, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65,
	0x12, 0x27, 0x0a, 0x0f, 0x6d, 0x61, 0x6e, 0x69, 0x66, 0x65, 0x73, 0x74, 0x5f, 0x62, 0x72, 0x61,
	0x6e, 0x63, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x6d, 0x61, 0x6e, 0x69, 0x66,
	0x65, 0x73, 0x74, 0x42, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x12, 0x21, 0x0a, 0x0c, 0x6d, 0x61, 0x6e,
	0x69, 0x66, 0x65, 0x73, 0x74, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52,
	0x0b, 0x6d, 0x61, 0x6e, 0x69, 0x66, 0x65, 0x73, 0x74, 0x55, 0x72, 0x6c, 0x22, 0x54, 0x0a, 0x05,
	0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x15, 0x0a, 0x11, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x55,
	0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x0f, 0x0a, 0x0b,
	0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x43, 0x4c, 0x45, 0x41, 0x4e, 0x10, 0x01, 0x12, 0x0f, 0x0a,
	0x0b, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x44, 0x49, 0x52, 0x54, 0x59, 0x10, 0x02, 0x12, 0x12,
	0x0a, 0x0e, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x52, 0x45, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x59,
	0x10, 0x03, 0x42, 0x59, 0x0a, 0x21, 0x63, 0x6f, 0x6d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65,
	0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x65, 0x2e, 0x63, 0x72, 0x6f, 0x73, 0x69, 0x6e, 0x66, 0x72,
	0x61, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x5a, 0x34, 0x67, 0x6f, 0x2e, 0x63, 0x68, 0x72, 0x6f,
	0x6d, 0x69, 0x75, 0x6d, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75,
	0x6d, 0x6f, 0x73, 0x2f, 0x69, 0x6e, 0x66, 0x72, 0x61, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f,
	0x67, 0x6f, 0x2f, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x6f, 0x73, 0x62, 0x06, 0x70,
	0x72, 0x6f, 0x74, 0x6f, 0x33,
}

var (
	file_chromiumos_repo_cache_state_proto_rawDescOnce sync.Once
	file_chromiumos_repo_cache_state_proto_rawDescData = file_chromiumos_repo_cache_state_proto_rawDesc
)

func file_chromiumos_repo_cache_state_proto_rawDescGZIP() []byte {
	file_chromiumos_repo_cache_state_proto_rawDescOnce.Do(func() {
		file_chromiumos_repo_cache_state_proto_rawDescData = protoimpl.X.CompressGZIP(file_chromiumos_repo_cache_state_proto_rawDescData)
	})
	return file_chromiumos_repo_cache_state_proto_rawDescData
}

var file_chromiumos_repo_cache_state_proto_enumTypes = make([]protoimpl.EnumInfo, 1)
var file_chromiumos_repo_cache_state_proto_msgTypes = make([]protoimpl.MessageInfo, 1)
var file_chromiumos_repo_cache_state_proto_goTypes = []interface{}{
	(RepoState_State)(0), // 0: chromiumos.RepoState.State
	(*RepoState)(nil),    // 1: chromiumos.RepoState
}
var file_chromiumos_repo_cache_state_proto_depIdxs = []int32{
	0, // 0: chromiumos.RepoState.state:type_name -> chromiumos.RepoState.State
	1, // [1:1] is the sub-list for method output_type
	1, // [1:1] is the sub-list for method input_type
	1, // [1:1] is the sub-list for extension type_name
	1, // [1:1] is the sub-list for extension extendee
	0, // [0:1] is the sub-list for field type_name
}

func init() { file_chromiumos_repo_cache_state_proto_init() }
func file_chromiumos_repo_cache_state_proto_init() {
	if File_chromiumos_repo_cache_state_proto != nil {
		return
	}
	if !protoimpl.UnsafeEnabled {
		file_chromiumos_repo_cache_state_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*RepoState); 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_chromiumos_repo_cache_state_proto_rawDesc,
			NumEnums:      1,
			NumMessages:   1,
			NumExtensions: 0,
			NumServices:   0,
		},
		GoTypes:           file_chromiumos_repo_cache_state_proto_goTypes,
		DependencyIndexes: file_chromiumos_repo_cache_state_proto_depIdxs,
		EnumInfos:         file_chromiumos_repo_cache_state_proto_enumTypes,
		MessageInfos:      file_chromiumos_repo_cache_state_proto_msgTypes,
	}.Build()
	File_chromiumos_repo_cache_state_proto = out.File
	file_chromiumos_repo_cache_state_proto_rawDesc = nil
	file_chromiumos_repo_cache_state_proto_goTypes = nil
	file_chromiumos_repo_cache_state_proto_depIdxs = nil
}
