// Copyright 2019 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// Code generated by generate-protos. DO NOT EDIT.

package genid

import (
	protoreflect "google.golang.org/protobuf/reflect/protoreflect"
)

// Full and short names for google.protobuf.NullValue.
const (
	NullValue_enum_fullname = "google.protobuf.NullValue"
	NullValue_enum_name     = "NullValue"
)

// Names for google.protobuf.Struct.
const (
	Struct_message_name     protoreflect.Name     = "Struct"
	Struct_message_fullname protoreflect.FullName = "google.protobuf.Struct"
)

// Field names for google.protobuf.Struct.
const (
	Struct_Fields_field_name protoreflect.Name = "fields"

	Struct_Fields_field_fullname protoreflect.FullName = "google.protobuf.Struct.fields"
)

// Field numbers for google.protobuf.Struct.
const (
	Struct_Fields_field_number protoreflect.FieldNumber = 1
)

// Names for google.protobuf.Struct.FieldsEntry.
const (
	Struct_FieldsEntry_message_name     protoreflect.Name     = "FieldsEntry"
	Struct_FieldsEntry_message_fullname protoreflect.FullName = "google.protobuf.Struct.FieldsEntry"
)

// Field names for google.protobuf.Struct.FieldsEntry.
const (
	Struct_FieldsEntry_Key_field_name   protoreflect.Name = "key"
	Struct_FieldsEntry_Value_field_name protoreflect.Name = "value"

	Struct_FieldsEntry_Key_field_fullname   protoreflect.FullName = "google.protobuf.Struct.FieldsEntry.key"
	Struct_FieldsEntry_Value_field_fullname protoreflect.FullName = "google.protobuf.Struct.FieldsEntry.value"
)

// Field numbers for google.protobuf.Struct.FieldsEntry.
const (
	Struct_FieldsEntry_Key_field_number   protoreflect.FieldNumber = 1
	Struct_FieldsEntry_Value_field_number protoreflect.FieldNumber = 2
)

// Names for google.protobuf.Value.
const (
	Value_message_name     protoreflect.Name     = "Value"
	Value_message_fullname protoreflect.FullName = "google.protobuf.Value"
)

// Field names for google.protobuf.Value.
const (
	Value_NullValue_field_name   protoreflect.Name = "null_value"
	Value_NumberValue_field_name protoreflect.Name = "number_value"
	Value_StringValue_field_name protoreflect.Name = "string_value"
	Value_BoolValue_field_name   protoreflect.Name = "bool_value"
	Value_StructValue_field_name protoreflect.Name = "struct_value"
	Value_ListValue_field_name   protoreflect.Name = "list_value"

	Value_NullValue_field_fullname   protoreflect.FullName = "google.protobuf.Value.null_value"
	Value_NumberValue_field_fullname protoreflect.FullName = "google.protobuf.Value.number_value"
	Value_StringValue_field_fullname protoreflect.FullName = "google.protobuf.Value.string_value"
	Value_BoolValue_field_fullname   protoreflect.FullName = "google.protobuf.Value.bool_value"
	Value_StructValue_field_fullname protoreflect.FullName = "google.protobuf.Value.struct_value"
	Value_ListValue_field_fullname   protoreflect.FullName = "google.protobuf.Value.list_value"
)

// Field numbers for google.protobuf.Value.
const (
	Value_NullValue_field_number   protoreflect.FieldNumber = 1
	Value_NumberValue_field_number protoreflect.FieldNumber = 2
	Value_StringValue_field_number protoreflect.FieldNumber = 3
	Value_BoolValue_field_number   protoreflect.FieldNumber = 4
	Value_StructValue_field_number protoreflect.FieldNumber = 5
	Value_ListValue_field_number   protoreflect.FieldNumber = 6
)

// Oneof names for google.protobuf.Value.
const (
	Value_Kind_oneof_name protoreflect.Name = "kind"

	Value_Kind_oneof_fullname protoreflect.FullName = "google.protobuf.Value.kind"
)

// Names for google.protobuf.ListValue.
const (
	ListValue_message_name     protoreflect.Name     = "ListValue"
	ListValue_message_fullname protoreflect.FullName = "google.protobuf.ListValue"
)

// Field names for google.protobuf.ListValue.
const (
	ListValue_Values_field_name protoreflect.Name = "values"

	ListValue_Values_field_fullname protoreflect.FullName = "google.protobuf.ListValue.values"
)

// Field numbers for google.protobuf.ListValue.
const (
	ListValue_Values_field_number protoreflect.FieldNumber = 1
)
