package google.protobuf

Mouse Melon logoGet desktop application:
View/edit binary Protocol Buffers messages

message Any

any.proto:128

`Any` contains an arbitrary serialized protocol buffer message along with a URL that describes the type of the serialized message. Protobuf library provides support to pack/unpack Any values in the form of utility functions or additional generated methods of the Any type. Example 1: Pack and unpack a message in C++. Foo foo = ...; Any any; any.PackFrom(foo); ... if (any.UnpackTo(&foo)) { ... } Example 2: Pack and unpack a message in Java. Foo foo = ...; Any any = Any.pack(foo); ... if (any.is(Foo.class)) { foo = any.unpack(Foo.class); } // or ... if (any.isSameTypeAs(Foo.getDefaultInstance())) { foo = any.unpack(Foo.getDefaultInstance()); } Example 3: Pack and unpack a message in Python. foo = Foo(...) any = Any() any.Pack(foo) ... if any.Is(Foo.DESCRIPTOR): any.Unpack(foo) ... Example 4: Pack and unpack a message in Go foo := &pb.Foo{...} any, err := anypb.New(foo) if err != nil { ... } ... foo := &pb.Foo{} if err := any.UnmarshalTo(foo); err != nil { ... } The pack methods provided by protobuf library will by default use 'type.googleapis.com/full.type.name' as the type URL and the unpack methods only use the fully qualified type name after the last '/' in the type URL, for example "foo.bar.com/x/y.z" will yield type name "y.z". JSON ==== The JSON representation of an `Any` value uses the regular representation of the deserialized, embedded message, with an additional field `@type` which contains the type URL. Example: package google.profile; message Person { string first_name = 1; string last_name = 2; } { "@type": "type.googleapis.com/google.profile.Person", "firstName": <string>, "lastName": <string> } If the embedded message type is well-known and has a custom JSON representation, that representation will be embedded adding a field `value` which holds the custom JSON in addition to the `@type` field. Example (for message [google.protobuf.Duration][]): { "@type": "type.googleapis.com/google.protobuf.Duration", "value": "1.212s" }

Used in: protobuf_test_messages.proto3.TestAllTypesProto3

message BoolValue

wrappers.proto:104

Wrapper message for `bool`. The JSON representation for `BoolValue` is JSON `true` and `false`.

Used in: protobuf_test_messages.proto3.TestAllTypesProto3

message BytesValue

wrappers.proto:120

Wrapper message for `bytes`. The JSON representation for `BytesValue` is JSON string.

Used in: protobuf_test_messages.proto3.TestAllTypesProto3

message DescriptorProto

descriptor.proto:141

Describes a message type.

Used in: FileDescriptorProto

message DescriptorProto.ExtensionRange

descriptor.proto:150

Used in: DescriptorProto

message DescriptorProto.ReservedRange

descriptor.proto:165

Range of reserved tag numbers. Reserved tag numbers may not be used by fields or extension ranges in the same message. Reserved ranges may not overlap.

Used in: DescriptorProto

message DoubleValue

wrappers.proto:56

Wrapper message for `double`. The JSON representation for `DoubleValue` is JSON number.

Used in: protobuf_test_messages.proto3.TestAllTypesProto3

message Duration

duration.proto:102

A Duration represents a signed, fixed-length span of time represented as a count of seconds and fractions of seconds at nanosecond resolution. It is independent of any calendar and concepts like "day" or "month". It is related to Timestamp in that the difference between two Timestamp values is a Duration and it can be added or subtracted from a Timestamp. Range is approximately +-10,000 years. # Examples Example 1: Compute Duration from two Timestamps in pseudo code. Timestamp start = ...; Timestamp end = ...; Duration duration = ...; duration.seconds = end.seconds - start.seconds; duration.nanos = end.nanos - start.nanos; if (duration.seconds < 0 && duration.nanos > 0) { duration.seconds += 1; duration.nanos -= 1000000000; } else if (duration.seconds > 0 && duration.nanos < 0) { duration.seconds -= 1; duration.nanos += 1000000000; } Example 2: Compute Timestamp from Timestamp + Duration in pseudo code. Timestamp start = ...; Duration duration = ...; Timestamp end = ...; end.seconds = start.seconds + duration.seconds; end.nanos = start.nanos + duration.nanos; if (end.nanos < 0) { end.seconds -= 1; end.nanos += 1000000000; } else if (end.nanos >= 1000000000) { end.seconds += 1; end.nanos -= 1000000000; } Example 3: Compute Duration from datetime.timedelta in Python. td = datetime.timedelta(days=3, minutes=10) duration = Duration() duration.FromTimedelta(td) # JSON Mapping In JSON format, the Duration type is encoded as a string rather than an object, where the string ends in the suffix "s" (indicating seconds) and is preceded by the number of seconds, with nanoseconds expressed as fractional seconds. For example, 3 seconds with 0 nanoseconds should be encoded in JSON format as "3s", while 3 seconds and 1 nanosecond should be expressed in JSON format as "3.000000001s", and 3 seconds and 1 microsecond should be expressed in JSON format as "3.000001s".

Used in: protobuf_test_messages.proto3.TestAllTypesProto3

enum Edition

descriptor.proto:68

The full set of known editions.

Used in: FeatureSetDefaults, FeatureSetDefaults.FeatureSetEditionDefault, FieldOptions.EditionDefault, FieldOptions.FeatureSupport, FileDescriptorProto

message EnumDescriptorProto

descriptor.proto:343

Describes an enum type.

Used in: DescriptorProto, FileDescriptorProto

message EnumDescriptorProto.EnumReservedRange

descriptor.proto:356

Range of reserved numeric values. Reserved values may not be used by entries in the same enum. Reserved ranges may not overlap. Note that this is distinct from DescriptorProto.ReservedRange in that it is inclusive such that it can appropriately represent the entire int32 domain.

Used in: EnumDescriptorProto

message EnumOptions

descriptor.proto:820

Used in: EnumDescriptorProto

message EnumValueDescriptorProto

descriptor.proto:372

Describes a value within an enum.

Used in: EnumDescriptorProto

message EnumValueOptions

descriptor.proto:852

Used in: EnumValueDescriptorProto

message ExtensionRangeOptions

descriptor.proto:175

Used in: DescriptorProto.ExtensionRange

message ExtensionRangeOptions.Declaration

descriptor.proto:179

Used in: ExtensionRangeOptions

enum ExtensionRangeOptions.VerificationState

descriptor.proto:213

The verification state of the extension range.

Used in: ExtensionRangeOptions

message FeatureSet

descriptor.proto:971

TODO Enums in C++ gencode (and potentially other languages) are not well scoped. This means that each of the feature enums below can clash with each other. The short names we've chosen maximize call-site readability, but leave us very open to this scenario. A future feature will be designed and implemented to handle this, hopefully before we ever hit a conflict here.

Used in: EnumOptions, EnumValueOptions, ExtensionRangeOptions, FeatureSetDefaults.FeatureSetEditionDefault, FieldOptions, FileOptions, MessageOptions, MethodOptions, OneofOptions, ServiceOptions

enum FeatureSet.EnumType

descriptor.proto:990

Used in: FeatureSet

enum FeatureSet.FieldPresence

descriptor.proto:972

Used in: FeatureSet

enum FeatureSet.JsonFormat

descriptor.proto:1054

Used in: FeatureSet

enum FeatureSet.MessageEncoding

descriptor.proto:1039

Used in: FeatureSet

enum FeatureSet.RepeatedFieldEncoding

descriptor.proto:1006

Used in: FeatureSet

enum FeatureSet.Utf8Validation

descriptor.proto:1022

Used in: FeatureSet

message FeatureSetDefaults

descriptor.proto:1100

A compiled specification for the defaults of a set of features. These messages are generated from FeatureSet extensions and can be used to seed feature resolution. The resolution with this object becomes a simple search for the closest matching edition, followed by proto merges.

message FeatureSetDefaults.FeatureSetEditionDefault

descriptor.proto:1105

A map from every known edition with a unique set of defaults to its defaults. Not all editions may be contained here. For a given edition, the defaults at the closest matching edition ordered at or before it should be used. This field must be in strict ascending order by edition.

Used in: FeatureSetDefaults

message FieldDescriptorProto

descriptor.proto:230

Describes a field within a message.

Used in: DescriptorProto, FileDescriptorProto

enum FieldDescriptorProto.Label

descriptor.proto:265

Used in: FieldDescriptorProto

enum FieldDescriptorProto.Type

descriptor.proto:231

Used in: FieldDescriptorProto

message FieldMask

field_mask.proto:242

`FieldMask` represents a set of symbolic field paths, for example: paths: "f.a" paths: "f.b.d" Here `f` represents a field in some root message, `a` and `b` fields in the message found in `f`, and `d` a field found in the message in `f.b`. Field masks are used to specify a subset of fields that should be returned by a get operation or modified by an update operation. Field masks also have a custom JSON encoding (see below). # Field Masks in Projections When used in the context of a projection, a response message or sub-message is filtered by the API to only contain those fields as specified in the mask. For example, if the mask in the previous example is applied to a response message as follows: f { a : 22 b { d : 1 x : 2 } y : 13 } z: 8 The result will not contain specific values for fields x,y and z (their value will be set to the default, and omitted in proto text output): f { a : 22 b { d : 1 } } A repeated field is not allowed except at the last position of a paths string. If a FieldMask object is not present in a get operation, the operation applies to all fields (as if a FieldMask of all fields had been specified). Note that a field mask does not necessarily apply to the top-level response message. In case of a REST get operation, the field mask applies directly to the response, but in case of a REST list operation, the mask instead applies to each individual message in the returned resource list. In case of a REST custom method, other definitions may be used. Where the mask applies will be clearly documented together with its declaration in the API. In any case, the effect on the returned resource/resources is required behavior for APIs. # Field Masks in Update Operations A field mask in update operations specifies which fields of the targeted resource are going to be updated. The API is required to only change the values of the fields as specified in the mask and leave the others untouched. If a resource is passed in to describe the updated values, the API ignores the values of all fields not covered by the mask. If a repeated field is specified for an update operation, new values will be appended to the existing repeated field in the target resource. Note that a repeated field is only allowed in the last position of a `paths` string. If a sub-message is specified in the last position of the field mask for an update operation, then new value will be merged into the existing sub-message in the target resource. For example, given the target message: f { b { d: 1 x: 2 } c: [1] } And an update message: f { b { d: 10 } c: [2] } then if the field mask is: paths: ["f.b", "f.c"] then the result will be: f { b { d: 10 x: 2 } c: [1, 2] } An implementation may provide options to override this default behavior for repeated and message fields. In order to reset a field's value to the default, the field must be in the mask and set to the default value in the provided resource. Hence, in order to reset all fields of a resource, provide a default instance of the resource and set all fields in the mask, or do not provide a mask as described below. If a field mask is not present on update, the operation applies to all fields (as if a field mask of all fields has been specified). Note that in the presence of schema evolution, this may mean that fields the client does not know and has therefore not filled into the request will be reset to their default. If this is unwanted behavior, a specific service may require a client to always specify a field mask, producing an error if not. As with get operations, the location of the resource which describes the updated values in the request message depends on the operation kind. In any case, the effect of the field mask is required to be honored by the API. ## Considerations for HTTP REST The HTTP kind of an update operation which uses a field mask must be set to PATCH instead of PUT in order to satisfy HTTP semantics (PUT must only be used for full updates). # JSON Encoding of Field Masks In JSON, a field mask is encoded as a single string where paths are separated by a comma. Fields name in each path are converted to/from lower-camel naming conventions. As an example, consider the following message declarations: message Profile { User user = 1; Photo photo = 2; } message User { string display_name = 1; string address = 2; } In proto a field mask for `Profile` may look as such: mask { paths: "user.display_name" paths: "photo" } In JSON, the same mask is represented as below: { mask: "user.displayName,photo" } # Field Masks and Oneof Fields Field masks treat fields in oneofs just as regular fields. Consider the following message: message SampleMessage { oneof test_oneof { string name = 4; SubMessage sub_message = 9; } } The field mask can be: mask { paths: "name" } Or: mask { paths: "sub_message" } Note that oneof type names ("test_oneof" in this case) cannot be used in paths. ## Field Mask Verification The implementation of any API method which has a FieldMask type field in the request should verify the included field paths, and return an `INVALID_ARGUMENT` error if any path is unmappable.

Used in: protobuf_test_messages.proto3.TestAllTypesProto3

message FieldOptions

descriptor.proto:644

Used in: FieldDescriptorProto

enum FieldOptions.CType

descriptor.proto:653

Used in: FieldOptions

message FieldOptions.EditionDefault

descriptor.proto:768

Used in: FieldOptions

message FieldOptions.FeatureSupport

descriptor.proto:778

Information about the support window of a feature.

Used in: EnumValueOptions, FieldOptions

enum FieldOptions.JSType

descriptor.proto:688

Used in: FieldOptions

enum FieldOptions.OptionRetention

descriptor.proto:742

If set to RETENTION_SOURCE, the option will be omitted from the binary.

Used in: FieldOptions

enum FieldOptions.OptionTargetType

descriptor.proto:753

This indicates the types of entities that the field may apply to when used as an option. If it is unset, then the field may be freely used as an option on any kind of entity.

Used in: FieldOptions

message FileDescriptorProto

descriptor.proto:104

Describes a complete .proto file.

Used in: FileDescriptorSet

message FileDescriptorSet

descriptor.proto:56

The protocol compiler can output a FileDescriptorSet containing the .proto files it parses.

message FileOptions

descriptor.proto:436

Used in: FileDescriptorProto

enum FileOptions.OptimizeMode

descriptor.proto:475

Generated classes can be optimized for speed or code size.

Used in: FileOptions

message FloatValue

wrappers.proto:64

Wrapper message for `float`. The JSON representation for `FloatValue` is JSON number.

Used in: protobuf_test_messages.proto3.TestAllTypesProto3

message GeneratedCodeInfo

descriptor.proto:1274

Describes the relationship between generated code and its original source file. A GeneratedCodeInfo message is associated with only one generated source file, but may contain references to different source .proto files.

message GeneratedCodeInfo.Annotation

descriptor.proto:1278

Used in: GeneratedCodeInfo

enum GeneratedCodeInfo.Annotation.Semantic

descriptor.proto:1297

Represents the identified object's effect on the element in the original .proto file.

Used in: Annotation

message Int32Value

wrappers.proto:88

Wrapper message for `int32`. The JSON representation for `Int32Value` is JSON number.

Used in: protobuf_test_messages.proto3.TestAllTypesProto3

message Int64Value

wrappers.proto:72

Wrapper message for `int64`. The JSON representation for `Int64Value` is JSON string.

Used in: protobuf_test_messages.proto3.TestAllTypesProto3

message ListValue

struct.proto:92

`ListValue` is a wrapper around a repeated field of values. The JSON representation for `ListValue` is JSON array.

Used in: Value, protobuf_test_messages.proto3.TestAllTypesProto3

message MessageOptions

descriptor.proto:562

Used in: DescriptorProto

message MethodDescriptorProto

descriptor.proto:388

Describes a method of a service.

Used in: ServiceDescriptorProto

message MethodOptions

descriptor.proto:900

Used in: MethodDescriptorProto

enum MethodOptions.IdempotencyLevel

descriptor.proto:916

Is this method side-effect-free (or safe in HTTP parlance), or idempotent, or neither? HTTP based RPC implementation may choose GET verb for safe methods, and PUT verb for idempotent methods instead of the default POST.

Used in: MethodOptions

enum NullValue

struct.proto:84

`NullValue` is a singleton enumeration to represent the null value for the `Value` type union. The JSON representation for `NullValue` is JSON `null`.

Used in: Value, protobuf_test_messages.proto3.TestAllTypesProto3

message OneofDescriptorProto

descriptor.proto:337

Describes a oneof.

Used in: DescriptorProto

message OneofOptions

descriptor.proto:809

Used in: OneofDescriptorProto

message ServiceDescriptorProto

descriptor.proto:380

Describes a service.

Used in: FileDescriptorProto

message ServiceOptions

descriptor.proto:877

Used in: ServiceDescriptorProto

message SourceCodeInfo

descriptor.proto:1133

Encapsulates information about the original source file from which a FileDescriptorProto was generated.

Used in: FileDescriptorProto

message SourceCodeInfo.Location

descriptor.proto:1178

Used in: SourceCodeInfo

message StringValue

wrappers.proto:112

Wrapper message for `string`. The JSON representation for `StringValue` is JSON string.

Used in: protobuf_test_messages.proto3.TestAllTypesProto3

message Struct

struct.proto:51

`Struct` represents a structured data value, consisting of fields which map to dynamically typed values. In some languages, `Struct` might be supported by a native representation. For example, in scripting languages like JS a struct is represented as an object. The details of that representation are described together with the proto support for the language. The JSON representation for `Struct` is JSON object.

Used in: Value, protobuf_test_messages.proto3.TestAllTypesProto3

message Timestamp

timestamp.proto:133

A Timestamp represents a point in time independent of any time zone or local calendar, encoded as a count of seconds and fractions of seconds at nanosecond resolution. The count is relative to an epoch at UTC midnight on January 1, 1970, in the proleptic Gregorian calendar which extends the Gregorian calendar backwards to year one. All minutes are 60 seconds long. Leap seconds are "smeared" so that no leap second table is needed for interpretation, using a [24-hour linear smear](https://developers.google.com/time/smear). The range is from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59.999999999Z. By restricting to that range, we ensure that we can convert to and from [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) date strings. # Examples Example 1: Compute Timestamp from POSIX `time()`. Timestamp timestamp; timestamp.set_seconds(time(NULL)); timestamp.set_nanos(0); Example 2: Compute Timestamp from POSIX `gettimeofday()`. struct timeval tv; gettimeofday(&tv, NULL); Timestamp timestamp; timestamp.set_seconds(tv.tv_sec); timestamp.set_nanos(tv.tv_usec * 1000); Example 3: Compute Timestamp from Win32 `GetSystemTimeAsFileTime()`. FILETIME ft; GetSystemTimeAsFileTime(&ft); UINT64 ticks = (((UINT64)ft.dwHighDateTime) << 32) | ft.dwLowDateTime; // A Windows tick is 100 nanoseconds. Windows epoch 1601-01-01T00:00:00Z // is 11644473600 seconds before Unix epoch 1970-01-01T00:00:00Z. Timestamp timestamp; timestamp.set_seconds((INT64) ((ticks / 10000000) - 11644473600LL)); timestamp.set_nanos((INT32) ((ticks % 10000000) * 100)); Example 4: Compute Timestamp from Java `System.currentTimeMillis()`. long millis = System.currentTimeMillis(); Timestamp timestamp = Timestamp.newBuilder().setSeconds(millis / 1000) .setNanos((int) ((millis % 1000) * 1000000)).build(); Example 5: Compute Timestamp from Java `Instant.now()`. Instant now = Instant.now(); Timestamp timestamp = Timestamp.newBuilder().setSeconds(now.getEpochSecond()) .setNanos(now.getNano()).build(); Example 6: Compute Timestamp from current time in Python. timestamp = Timestamp() timestamp.GetCurrentTime() # JSON Mapping In JSON format, the Timestamp type is encoded as a string in the [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format. That is, the format is "{year}-{month}-{day}T{hour}:{min}:{sec}[.{frac_sec}]Z" where {year} is always expressed using four digits while {month}, {day}, {hour}, {min}, and {sec} are zero-padded to two digits each. The fractional seconds, which can go up to 9 digits (i.e. up to 1 nanosecond resolution), are optional. The "Z" suffix indicates the timezone ("UTC"); the timezone is required. A proto3 JSON serializer should always use UTC (as indicated by "Z") when printing the Timestamp type and a proto3 JSON parser should be able to accept both UTC and other timezones (as indicated by an offset). For example, "2017-01-15T01:30:15.01Z" encodes 15.01 seconds past 01:30 UTC on January 15, 2017. In JavaScript, one can convert a Date object to this format using the standard [toISOString()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString) method. In Python, a standard `datetime.datetime` object can be converted to this format using [`strftime`](https://docs.python.org/2/library/time.html#time.strftime) with the time format spec '%Y-%m-%dT%H:%M:%S.%fZ'. Likewise, in Java, one can use the Joda Time's [`ISODateTimeFormat.dateTime()`]( http://joda-time.sourceforge.net/apidocs/org/joda/time/format/ISODateTimeFormat.html#dateTime() ) to obtain a formatter capable of generating timestamps in this format.

Used in: protobuf_test_messages.proto3.TestAllTypesProto3

message UInt32Value

wrappers.proto:96

Wrapper message for `uint32`. The JSON representation for `UInt32Value` is JSON number.

Used in: protobuf_test_messages.proto3.TestAllTypesProto3

message UInt64Value

wrappers.proto:80

Wrapper message for `uint64`. The JSON representation for `UInt64Value` is JSON string.

Used in: protobuf_test_messages.proto3.TestAllTypesProto3

message UninterpretedOption

descriptor.proto:940

A message representing a option the parser does not recognize. This only appears in options protos created by the compiler::Parser class. DescriptorPool resolves these when building Descriptor objects. Therefore, options protos in descriptor objects (e.g. returned by Descriptor::options(), or produced by Descriptor::CopyTo()) will never have UninterpretedOptions in them.

Used in: EnumOptions, EnumValueOptions, ExtensionRangeOptions, FieldOptions, FileOptions, MessageOptions, MethodOptions, OneofOptions, ServiceOptions

message UninterpretedOption.NamePart

descriptor.proto:946

The name of the uninterpreted option. Each string represents a segment in a dot-separated name. is_extension is true iff a segment represents an extension (denoted with parentheses in options specs in .proto files). E.g.,{ ["foo", false], ["bar.baz", true], ["moo", false] } represents "foo.(bar.baz).moo".

Used in: UninterpretedOption

message Value

struct.proto:62

`Value` represents a dynamically typed value which can be either null, a number, a string, a boolean, a recursive struct value, or a list of values. A producer of value is expected to set one of these variants. Absence of any variant indicates an error. The JSON representation for `Value` is JSON value.

Used in: ListValue, Struct, protobuf_test_messages.proto3.TestAllTypesProto3