1// Protocol Buffers - Google's data interchange format 2// Copyright 2008 Google Inc. All rights reserved. 3// https://developers.google.com/protocol-buffers/ 4// 5// Redistribution and use in source and binary forms, with or without 6// modification, are permitted provided that the following conditions are 7// met: 8// 9// * Redistributions of source code must retain the above copyright 10// notice, this list of conditions and the following disclaimer. 11// * Redistributions in binary form must reproduce the above 12// copyright notice, this list of conditions and the following disclaimer 13// in the documentation and/or other materials provided with the 14// distribution. 15// * Neither the name of Google Inc. nor the names of its 16// contributors may be used to endorse or promote products derived from 17// this software without specific prior written permission. 18// 19// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 20// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 21// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 22// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 23// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 24// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 25// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 26// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 27// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 28// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 29// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 30 31syntax = "proto3"; 32 33package google.protobuf; 34 35import "google/protobuf/any.proto"; 36import "google/protobuf/source_context.proto"; 37 38option csharp_namespace = "Google.Protobuf.WellKnownTypes"; 39option cc_enable_arenas = true; 40option java_package = "com.google.protobuf"; 41option java_outer_classname = "TypeProto"; 42option java_multiple_files = true; 43option objc_class_prefix = "GPB"; 44option go_package = "google.golang.org/genproto/protobuf/ptype;ptype"; 45 46// A protocol buffer message type. 47message Type { 48 // The fully qualified message name. 49 string name = 1; 50 // The list of fields. 51 repeated Field fields = 2; 52 // The list of types appearing in `oneof` definitions in this type. 53 repeated string oneofs = 3; 54 // The protocol buffer options. 55 repeated Option options = 4; 56 // The source context. 57 SourceContext source_context = 5; 58 // The source syntax. 59 Syntax syntax = 6; 60} 61 62// A single field of a message type. 63message Field { 64 // Basic field types. 65 enum Kind { 66 // Field type unknown. 67 TYPE_UNKNOWN = 0; 68 // Field type double. 69 TYPE_DOUBLE = 1; 70 // Field type float. 71 TYPE_FLOAT = 2; 72 // Field type int64. 73 TYPE_INT64 = 3; 74 // Field type uint64. 75 TYPE_UINT64 = 4; 76 // Field type int32. 77 TYPE_INT32 = 5; 78 // Field type fixed64. 79 TYPE_FIXED64 = 6; 80 // Field type fixed32. 81 TYPE_FIXED32 = 7; 82 // Field type bool. 83 TYPE_BOOL = 8; 84 // Field type string. 85 TYPE_STRING = 9; 86 // Field type group. Proto2 syntax only, and deprecated. 87 TYPE_GROUP = 10; 88 // Field type message. 89 TYPE_MESSAGE = 11; 90 // Field type bytes. 91 TYPE_BYTES = 12; 92 // Field type uint32. 93 TYPE_UINT32 = 13; 94 // Field type enum. 95 TYPE_ENUM = 14; 96 // Field type sfixed32. 97 TYPE_SFIXED32 = 15; 98 // Field type sfixed64. 99 TYPE_SFIXED64 = 16; 100 // Field type sint32. 101 TYPE_SINT32 = 17; 102 // Field type sint64. 103 TYPE_SINT64 = 18; 104 } 105 106 // Whether a field is optional, required, or repeated. 107 enum Cardinality { 108 // For fields with unknown cardinality. 109 CARDINALITY_UNKNOWN = 0; 110 // For optional fields. 111 CARDINALITY_OPTIONAL = 1; 112 // For required fields. Proto2 syntax only. 113 CARDINALITY_REQUIRED = 2; 114 // For repeated fields. 115 CARDINALITY_REPEATED = 3; 116 }; 117 118 // The field type. 119 Kind kind = 1; 120 // The field cardinality. 121 Cardinality cardinality = 2; 122 // The field number. 123 int32 number = 3; 124 // The field name. 125 string name = 4; 126 // The field type URL, without the scheme, for message or enumeration 127 // types. Example: `"type.googleapis.com/google.protobuf.Timestamp"`. 128 string type_url = 6; 129 // The index of the field type in `Type.oneofs`, for message or enumeration 130 // types. The first type has index 1; zero means the type is not in the list. 131 int32 oneof_index = 7; 132 // Whether to use alternative packed wire representation. 133 bool packed = 8; 134 // The protocol buffer options. 135 repeated Option options = 9; 136 // The field JSON name. 137 string json_name = 10; 138 // The string value of the default value of this field. Proto2 syntax only. 139 string default_value = 11; 140} 141 142// Enum type definition. 143message Enum { 144 // Enum type name. 145 string name = 1; 146 // Enum value definitions. 147 repeated EnumValue enumvalue = 2; 148 // Protocol buffer options. 149 repeated Option options = 3; 150 // The source context. 151 SourceContext source_context = 4; 152 // The source syntax. 153 Syntax syntax = 5; 154} 155 156// Enum value definition. 157message EnumValue { 158 // Enum value name. 159 string name = 1; 160 // Enum value number. 161 int32 number = 2; 162 // Protocol buffer options. 163 repeated Option options = 3; 164} 165 166// A protocol buffer option, which can be attached to a message, field, 167// enumeration, etc. 168message Option { 169 // The option's name. For protobuf built-in options (options defined in 170 // descriptor.proto), this is the short name. For example, `"map_entry"`. 171 // For custom options, it should be the fully-qualified name. For example, 172 // `"google.api.http"`. 173 string name = 1; 174 // The option's value packed in an Any message. If the value is a primitive, 175 // the corresponding wrapper type defined in google/protobuf/wrappers.proto 176 // should be used. If the value is an enum, it should be stored as an int32 177 // value using the google.protobuf.Int32Value type. 178 Any value = 2; 179} 180 181// The syntax in which a protocol buffer element is defined. 182enum Syntax { 183 // Syntax `proto2`. 184 SYNTAX_PROTO2 = 0; 185 // Syntax `proto3`. 186 SYNTAX_PROTO3 = 1; 187} 188