// Code generated by protoc-gen-gogo.
// source: android.googlesource.com/platform/tools/gpu/client/bind/bind.proto
// DO NOT EDIT!

/*
Package bind is a generated protocol buffer package.

It is generated from these files:
	android.googlesource.com/platform/tools/gpu/client/bind/bind.proto

It has these top-level messages:
*/
package bind

import proto "github.com/gogo/protobuf/proto"
import fmt "fmt"
import math "math"

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

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

// Status represents the last queried connection status of a device.
type Status int32

const (
	Status_Unknown      Status = 0
	Status_Offline      Status = 1
	Status_Online       Status = 2
	Status_Unauthorized Status = 3
)

var Status_name = map[int32]string{
	0: "Unknown",
	1: "Offline",
	2: "Online",
	3: "Unauthorized",
}
var Status_value = map[string]int32{
	"Unknown":      0,
	"Offline":      1,
	"Online":       2,
	"Unauthorized": 3,
}

func (x Status) String() string {
	return proto.EnumName(Status_name, int32(x))
}
func (Status) EnumDescriptor() ([]byte, []int) { return fileDescriptorBind, []int{0} }

func init() {
	proto.RegisterEnum("bind.Status", Status_name, Status_value)
}

func init() {
	proto.RegisterFile("android.googlesource.com/platform/tools/gpu/client/bind/bind.proto", fileDescriptorBind)
}

var fileDescriptorBind = []byte{
	// 152 bytes of a gzipped FileDescriptorProto
	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0x1c, 0xcc, 0x4d, 0x0a, 0xc2, 0x30,
	0x10, 0xc5, 0x71, 0xbf, 0xa8, 0x30, 0xba, 0x08, 0x39, 0x86, 0x8b, 0x66, 0xe1, 0x05, 0xc4, 0x0b,
	0x74, 0x21, 0x3d, 0x40, 0xda, 0xa4, 0x35, 0x98, 0xce, 0x2b, 0xc9, 0x04, 0xc1, 0xd3, 0x4b, 0xb3,
	0x79, 0xfc, 0xde, 0xe6, 0x4f, 0x4f, 0xcb, 0x2e, 0x21, 0xb8, 0x76, 0x06, 0xe6, 0xe8, 0x33, 0x4a,
	0x1a, 0x7d, 0x3b, 0x62, 0x31, 0x6b, 0xb4, 0x32, 0x21, 0x2d, 0x46, 0x80, 0x98, 0xcd, 0xbc, 0x16,
	0x33, 0xc6, 0xe0, 0x59, 0xcc, 0x10, 0xd8, 0xd5, 0x69, 0xd7, 0x04, 0x81, 0x3e, 0x6d, 0xbe, 0x3d,
	0xa8, 0x79, 0x89, 0x95, 0x92, 0xf5, 0x85, 0xce, 0x3d, 0x7f, 0x18, 0x5f, 0x56, 0xbb, 0xed, 0x74,
	0xd3, 0x14, 0x03, 0x7b, 0xb5, 0xd7, 0x44, 0x4d, 0xc7, 0xd5, 0x07, 0xad, 0xe8, 0xda, 0xb3, 0x2d,
	0xf2, 0x46, 0x0a, 0x3f, 0xef, 0xd4, 0x71, 0x68, 0x6a, 0xee, 0xfe, 0x0f, 0x00, 0x00, 0xff, 0xff,
	0x6c, 0x6e, 0x34, 0x97, 0x94, 0x00, 0x00, 0x00,
}
