Skip to content

Commit 8ea33d2

Browse files
committed
Add well-known types.
This introduces supported Go packages for each well-known type, and a placeholder support package for interacting with them. This commit adds Any, Duration and Empty; more types will follow. Updates #50.
1 parent 001690d commit 8ea33d2

File tree

9 files changed

+602
-3
lines changed

9 files changed

+602
-3
lines changed

.gitignore

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
.DS_Store
22
*.[568ao]
3-
*.pb.go
43
*.ao
54
*.so
65
*.pyc
@@ -13,5 +12,4 @@ core
1312
_obj
1413
_test
1514
_testmain.go
16-
compiler/protoc-gen-go
17-
compiler/testdata/extension_test
15+
protoc-gen-go/testdata/multi/*.pb.go

types/any/any.pb.go

Lines changed: 110 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

types/any/any.proto

Lines changed: 100 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,100 @@
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+
31+
syntax = "proto3";
32+
33+
package google.protobuf;
34+
option go_package = "any";
35+
36+
option csharp_namespace = "Google.Protobuf.WellKnownTypes";
37+
option java_package = "com.google.protobuf";
38+
option java_outer_classname = "AnyProto";
39+
option java_multiple_files = true;
40+
option java_generate_equals_and_hash = true;
41+
option objc_class_prefix = "GPB";
42+
43+
// `Any` contains an arbitrary serialized message along with a URL
44+
// that describes the type of the serialized message.
45+
//
46+
//
47+
// JSON
48+
// ====
49+
// The JSON representation of an `Any` value uses the regular
50+
// representation of the deserialized, embedded message, with an
51+
// additional field `@type` which contains the type URL. Example:
52+
//
53+
// package google.profile;
54+
// message Person {
55+
// string first_name = 1;
56+
// string last_name = 2;
57+
// }
58+
//
59+
// {
60+
// "@type": "type.googleapis.com/google.profile.Person",
61+
// "firstName": <string>,
62+
// "lastName": <string>
63+
// }
64+
//
65+
// If the embedded message type is well-known and has a custom JSON
66+
// representation, that representation will be embedded adding a field
67+
// `value` which holds the custom JSON in addition to the `@type`
68+
// field. Example (for message [google.protobuf.Duration][]):
69+
//
70+
// {
71+
// "@type": "type.googleapis.com/google.protobuf.Duration",
72+
// "value": "1.212s"
73+
// }
74+
//
75+
message Any {
76+
// A URL/resource name whose content describes the type of the
77+
// serialized message.
78+
//
79+
// For URLs which use the schema `http`, `https`, or no schema, the
80+
// following restrictions and interpretations apply:
81+
//
82+
// * If no schema is provided, `https` is assumed.
83+
// * The last segment of the URL's path must represent the fully
84+
// qualified name of the type (as in `path/google.protobuf.Duration`).
85+
// * An HTTP GET on the URL must yield a [google.protobuf.Type][]
86+
// value in binary format, or produce an error.
87+
// * Applications are allowed to cache lookup results based on the
88+
// URL, or have them precompiled into a binary to avoid any
89+
// lookup. Therefore, binary compatibility needs to be preserved
90+
// on changes to types. (Use versioned type names to manage
91+
// breaking changes.)
92+
//
93+
// Schemas other than `http`, `https` (or the empty schema) might be
94+
// used with implementation specific semantics.
95+
//
96+
string type_url = 1;
97+
98+
// Must be valid serialized data of the above specified type.
99+
bytes value = 2;
100+
}

types/doc.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
/*
2+
Package types will contain code for interacting with well-known types.
3+
4+
For now, it is a placeholder; see its subdirectories for the protos themselves.
5+
*/
6+
package types

types/duration/duration.pb.go

Lines changed: 106 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)