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 java_package = "com.google.protobuf"; 40option java_outer_classname = "TypeProto"; 41option java_multiple_files = true; 42option java_generate_equals_and_hash = true; 43option objc_class_prefix = "GPB"; 44 45// A protocol buffer message type. 46message Type { 47 // The fully qualified message name. 48 string name = 1; 49 // The list of fields. 50 repeated Field fields = 2; 51 // The list of types appearing in `oneof` definitions in this type. 52 repeated string oneofs = 3; 53 // The protocol buffer options. 54 repeated Option options = 4; 55 // The source context. 56 SourceContext source_context = 5; 57 // The source syntax. 58 Syntax syntax = 6; 59} 60 61// A single field of a message type. 62message Field { 63 // Basic field types. 64 enum Kind { 65 // Field type unknown. 66 TYPE_UNKNOWN = 0; 67 // Field type double. 68 TYPE_DOUBLE = 1; 69 // Field type float. 70 TYPE_FLOAT = 2; 71 // Field type int64. 72 TYPE_INT64 = 3; 73 // Field type uint64. 74 TYPE_UINT64 = 4; 75 // Field type int32. 76 TYPE_INT32 = 5; 77 // Field type fixed64. 78 TYPE_FIXED64 = 6; 79 // Field type fixed32. 80 TYPE_FIXED32 = 7; 81 // Field type bool. 82 TYPE_BOOL = 8; 83 // Field type string. 84 TYPE_STRING = 9; 85 // Field type group. Proto2 syntax only, and deprecated. 86 TYPE_GROUP = 10; 87 // Field type message. 88 TYPE_MESSAGE = 11; 89 // Field type bytes. 90 TYPE_BYTES = 12; 91 // Field type uint32. 92 TYPE_UINT32 = 13; 93 // Field type enum. 94 TYPE_ENUM = 14; 95 // Field type sfixed32. 96 TYPE_SFIXED32 = 15; 97 // Field type sfixed64. 98 TYPE_SFIXED64 = 16; 99 // Field type sint32. 100 TYPE_SINT32 = 17; 101 // Field type sint64. 102 TYPE_SINT64 = 18; 103 }; 104 105 // Whether a field is optional, required, or repeated. 106 enum Cardinality { 107 // For fields with unknown cardinality. 108 CARDINALITY_UNKNOWN = 0; 109 // For optional fields. 110 CARDINALITY_OPTIONAL = 1; 111 // For required fields. Proto2 syntax only. 112 CARDINALITY_REQUIRED = 2; 113 // For repeated fields. 114 CARDINALITY_REPEATED = 3; 115 }; 116 117 // The field type. 118 Kind kind = 1; 119 // The field cardinality. 120 Cardinality cardinality = 2; 121 // The field number. 122 int32 number = 3; 123 // The field name. 124 string name = 4; 125 // The field type URL, without the scheme, for message or enumeration 126 // types. Example: `"type.googleapis.com/google.protobuf.Timestamp"`. 127 string type_url = 6; 128 // The index of the field type in `Type.oneofs`, for message or enumeration 129 // types. The first type has index 1; zero means the type is not in the list. 130 int32 oneof_index = 7; 131 // Whether to use alternative packed wire representation. 132 bool packed = 8; 133 // The protocol buffer options. 134 repeated Option options = 9; 135 // The field JSON name. 136 string json_name = 10; 137 // The string value of the default value of this field. Proto2 syntax only. 138 string default_value = 11; 139} 140 141// Enum type definition. 142message Enum { 143 // Enum type name. 144 string name = 1; 145 // Enum value definitions. 146 repeated EnumValue enumvalue = 2; 147 // Protocol buffer options. 148 repeated Option options = 3; 149 // The source context. 150 SourceContext source_context = 4; 151 // The source syntax. 152 Syntax syntax = 5; 153} 154 155// Enum value definition. 156message EnumValue { 157 // Enum value name. 158 string name = 1; 159 // Enum value number. 160 int32 number = 2; 161 // Protocol buffer options. 162 repeated Option options = 3; 163} 164 165// A protocol buffer option, which can be attached to a message, field, 166// enumeration, etc. 167message Option { 168 // The option's name. For example, `"java_package"`. 169 string name = 1; 170 // The option's value. For example, `"com.google.protobuf"`. 171 Any value = 2; 172} 173 174// The syntax in which a protocol buffer element is defined. 175enum Syntax { 176 // Syntax `proto2`. 177 SYNTAX_PROTO2 = 0; 178 // Syntax `proto3`. 179 SYNTAX_PROTO3 = 1; 180} 181