vados
2 years ago
No known key found for this signature in database
GPG Key ID: ED874DE957CFB552
9 changed files with 1533 additions and 15 deletions
-
63weed/pb/Makefile
-
31weed/pb/google/api/annotations.proto
-
394weed/pb/google/api/client.proto
-
90weed/pb/google/api/field_behavior.proto
-
379weed/pb/google/api/http.proto
-
238weed/pb/google/api/resource.proto
-
35weed/pb/public.proto
-
213weed/pb/public_pb/public.pb.go
-
105weed/pb/public_pb/public_grpc.pb.go
@ -1,18 +1,51 @@ |
|||
all: gen |
|||
|
|||
.PHONY : gen |
|||
|
|||
gen: |
|||
protoc master.proto --go_out=./master_pb --go-grpc_out=./master_pb --go_opt=paths=source_relative --go-grpc_opt=paths=source_relative |
|||
protoc volume_server.proto --go_out=./volume_server_pb --go-grpc_out=./volume_server_pb --go_opt=paths=source_relative --go-grpc_opt=paths=source_relative |
|||
protoc filer.proto --go_out=./filer_pb --go-grpc_out=./filer_pb --go_opt=paths=source_relative --go-grpc_opt=paths=source_relative |
|||
protoc remote.proto --go_out=./remote_pb --go-grpc_out=./remote_pb --go_opt=paths=source_relative --go-grpc_opt=paths=source_relative |
|||
protoc iam.proto --go_out=./iam_pb --go-grpc_out=./iam_pb --go_opt=paths=source_relative --go-grpc_opt=paths=source_relative |
|||
protoc mount.proto --go_out=./mount_pb --go-grpc_out=./mount_pb --go_opt=paths=source_relative --go-grpc_opt=paths=source_relative |
|||
protoc s3.proto --go_out=./s3_pb --go-grpc_out=./s3_pb --go_opt=paths=source_relative --go-grpc_opt=paths=source_relative |
|||
protoc mq.proto --go_out=./mq_pb --go-grpc_out=./mq_pb --go_opt=paths=source_relative --go-grpc_opt=paths=source_relative |
|||
# protoc filer.proto --java_out=../../other/java/client/src/main/java |
|||
.PHONY: help ensure-PB_NAME gen-all gen-protobuf fbs |
|||
all: gen-all |
|||
|
|||
help: ## Display help text
|
|||
@awk 'BEGIN {FS = ":.*##"; printf "\nUsage:\n make \033[36m<target>\033[0m\n"} /^[a-zA-Z_\-.*]+:.*?##/ { printf " \033[36m%-15s\033[0m %s\n", $$1, $$2 } /^##@/ { printf "\n\033[1m%s\033[0m\n", substr($$0, 5) } ' $(MAKEFILE_LIST) |
|||
|
|||
# basename of the protobuf that is used in generation (ex. 'master')
|
|||
PB_NAME ?= |
|||
|
|||
###########
|
|||
# Tooling #
|
|||
###########
|
|||
|
|||
ensure-PB_NAME: |
|||
@if [ -z "$(PB_NAME)" ] ; then \
|
|||
echo "PB_NAME must be specified (ex. PB_NAME=master)"; \
|
|||
exit 1; \
|
|||
fi |
|||
|
|||
ensure-protoc-gen-openapi: |
|||
@if [ ! $$(command -v protoc-gen-openapi) ] ; then \
|
|||
echo "protoc-gen-openapi is not installed (see: https://github.com/google/gnostic/tree/main/cmd/protoc-gen-openapi)"; \
|
|||
exit 1; \
|
|||
fi |
|||
|
|||
#######################
|
|||
# Protobuf Generation #
|
|||
#######################
|
|||
|
|||
gen-protobuf: ensure-PB_NAME ## Generate probouf for a consistently named sub-API
|
|||
protoc $(PB_NAME).proto \
|
|||
--go_out=./$(PB_NAME)_pb \
|
|||
--go-grpc_out=./$(PB_NAME)_pb \
|
|||
--go_opt=paths=source_relative \
|
|||
--go-grpc_opt=paths=source_relative |
|||
|
|||
gen-all: ## Generate all
|
|||
@$(MAKE) --no-print-dir gen-protobuf PB_NAME=master |
|||
@$(MAKE) --no-print-dir gen-protobuf PB_NAME=volume_server |
|||
@$(MAKE) --no-print-dir gen-protobuf PB_NAME=filer |
|||
@$(MAKE) --no-print-dir gen-protobuf PB_NAME=remote |
|||
@$(MAKE) --no-print-dir gen-protobuf PB_NAME=iam |
|||
@$(MAKE) --no-print-dir gen-protobuf PB_NAME=mount |
|||
@$(MAKE) --no-print-dir gen-protobuf PB_NAME=s3 |
|||
@$(MAKE) --no-print-dir gen-protobuf PB_NAME=mq |
|||
@$(MAKE) --no-print-dir gen-protobuf PB_NAME=public |
|||
# protoc filer.proto --java_out=../../other/java/client/src/main/java
|
|||
cp filer.proto ../../other/java/client/src/main/proto |
|||
|
|||
fbs: |
|||
fbs: ## Generate flatbuffers
|
|||
flatc --go -o . --go-namespace message_fbs message.fbs |
@ -0,0 +1,31 @@ |
|||
// Copyright 2015 Google LLC |
|||
// |
|||
// Licensed under the Apache License, Version 2.0 (the "License"); |
|||
// you may not use this file except in compliance with the License. |
|||
// You may obtain a copy of the License at |
|||
// |
|||
// http://www.apache.org/licenses/LICENSE-2.0 |
|||
// |
|||
// Unless required by applicable law or agreed to in writing, software |
|||
// distributed under the License is distributed on an "AS IS" BASIS, |
|||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
|||
// See the License for the specific language governing permissions and |
|||
// limitations under the License. |
|||
|
|||
syntax = "proto3"; |
|||
|
|||
package google.api; |
|||
|
|||
import "google/api/http.proto"; |
|||
import "google/protobuf/descriptor.proto"; |
|||
|
|||
option go_package = "google.golang.org/genproto/googleapis/api/annotations;annotations"; |
|||
option java_multiple_files = true; |
|||
option java_outer_classname = "AnnotationsProto"; |
|||
option java_package = "com.google.api"; |
|||
option objc_class_prefix = "GAPI"; |
|||
|
|||
extend google.protobuf.MethodOptions { |
|||
// See `HttpRule`. |
|||
HttpRule http = 72295728; |
|||
} |
@ -0,0 +1,394 @@ |
|||
// Copyright 2023 Google LLC |
|||
// |
|||
// Licensed under the Apache License, Version 2.0 (the "License"); |
|||
// you may not use this file except in compliance with the License. |
|||
// You may obtain a copy of the License at |
|||
// |
|||
// http://www.apache.org/licenses/LICENSE-2.0 |
|||
// |
|||
// Unless required by applicable law or agreed to in writing, software |
|||
// distributed under the License is distributed on an "AS IS" BASIS, |
|||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
|||
// See the License for the specific language governing permissions and |
|||
// limitations under the License. |
|||
|
|||
syntax = "proto3"; |
|||
|
|||
package google.api; |
|||
|
|||
import "google/api/launch_stage.proto"; |
|||
import "google/protobuf/descriptor.proto"; |
|||
import "google/protobuf/duration.proto"; |
|||
|
|||
option go_package = "google.golang.org/genproto/googleapis/api/annotations;annotations"; |
|||
option java_multiple_files = true; |
|||
option java_outer_classname = "ClientProto"; |
|||
option java_package = "com.google.api"; |
|||
option objc_class_prefix = "GAPI"; |
|||
|
|||
extend google.protobuf.MethodOptions { |
|||
// A definition of a client library method signature. |
|||
// |
|||
// In client libraries, each proto RPC corresponds to one or more methods |
|||
// which the end user is able to call, and calls the underlying RPC. |
|||
// Normally, this method receives a single argument (a struct or instance |
|||
// corresponding to the RPC request object). Defining this field will |
|||
// add one or more overloads providing flattened or simpler method signatures |
|||
// in some languages. |
|||
// |
|||
// The fields on the method signature are provided as a comma-separated |
|||
// string. |
|||
// |
|||
// For example, the proto RPC and annotation: |
|||
// |
|||
// rpc CreateSubscription(CreateSubscriptionRequest) |
|||
// returns (Subscription) { |
|||
// option (google.api.method_signature) = "name,topic"; |
|||
// } |
|||
// |
|||
// Would add the following Java overload (in addition to the method accepting |
|||
// the request object): |
|||
// |
|||
// public final Subscription createSubscription(String name, String topic) |
|||
// |
|||
// The following backwards-compatibility guidelines apply: |
|||
// |
|||
// * Adding this annotation to an unannotated method is backwards |
|||
// compatible. |
|||
// * Adding this annotation to a method which already has existing |
|||
// method signature annotations is backwards compatible if and only if |
|||
// the new method signature annotation is last in the sequence. |
|||
// * Modifying or removing an existing method signature annotation is |
|||
// a breaking change. |
|||
// * Re-ordering existing method signature annotations is a breaking |
|||
// change. |
|||
repeated string method_signature = 1051; |
|||
} |
|||
|
|||
extend google.protobuf.ServiceOptions { |
|||
// The hostname for this service. |
|||
// This should be specified with no prefix or protocol. |
|||
// |
|||
// Example: |
|||
// |
|||
// service Foo { |
|||
// option (google.api.default_host) = "foo.googleapi.com"; |
|||
// ... |
|||
// } |
|||
string default_host = 1049; |
|||
|
|||
// OAuth scopes needed for the client. |
|||
// |
|||
// Example: |
|||
// |
|||
// service Foo { |
|||
// option (google.api.oauth_scopes) = \ |
|||
// "https://www.googleapis.com/auth/cloud-platform"; |
|||
// ... |
|||
// } |
|||
// |
|||
// If there is more than one scope, use a comma-separated string: |
|||
// |
|||
// Example: |
|||
// |
|||
// service Foo { |
|||
// option (google.api.oauth_scopes) = \ |
|||
// "https://www.googleapis.com/auth/cloud-platform," |
|||
// "https://www.googleapis.com/auth/monitoring"; |
|||
// ... |
|||
// } |
|||
string oauth_scopes = 1050; |
|||
} |
|||
|
|||
// Required information for every language. |
|||
message CommonLanguageSettings { |
|||
// Link to automatically generated reference documentation. Example: |
|||
// https://cloud.google.com/nodejs/docs/reference/asset/latest |
|||
string reference_docs_uri = 1 [deprecated = true]; |
|||
|
|||
// The destination where API teams want this client library to be published. |
|||
repeated ClientLibraryDestination destinations = 2; |
|||
} |
|||
|
|||
// Details about how and where to publish client libraries. |
|||
message ClientLibrarySettings { |
|||
// Version of the API to apply these settings to. This is the full protobuf |
|||
// package for the API, ending in the version element. |
|||
// Examples: "google.cloud.speech.v1" and "google.spanner.admin.database.v1". |
|||
string version = 1; |
|||
|
|||
// Launch stage of this version of the API. |
|||
LaunchStage launch_stage = 2; |
|||
|
|||
// When using transport=rest, the client request will encode enums as |
|||
// numbers rather than strings. |
|||
bool rest_numeric_enums = 3; |
|||
|
|||
// Settings for legacy Java features, supported in the Service YAML. |
|||
JavaSettings java_settings = 21; |
|||
|
|||
// Settings for C++ client libraries. |
|||
CppSettings cpp_settings = 22; |
|||
|
|||
// Settings for PHP client libraries. |
|||
PhpSettings php_settings = 23; |
|||
|
|||
// Settings for Python client libraries. |
|||
PythonSettings python_settings = 24; |
|||
|
|||
// Settings for Node client libraries. |
|||
NodeSettings node_settings = 25; |
|||
|
|||
// Settings for .NET client libraries. |
|||
DotnetSettings dotnet_settings = 26; |
|||
|
|||
// Settings for Ruby client libraries. |
|||
RubySettings ruby_settings = 27; |
|||
|
|||
// Settings for Go client libraries. |
|||
GoSettings go_settings = 28; |
|||
} |
|||
|
|||
// This message configures the settings for publishing [Google Cloud Client |
|||
// libraries](https://cloud.google.com/apis/docs/cloud-client-libraries) |
|||
// generated from the service config. |
|||
message Publishing { |
|||
// A list of API method settings, e.g. the behavior for methods that use the |
|||
// long-running operation pattern. |
|||
repeated MethodSettings method_settings = 2; |
|||
|
|||
// Link to a *public* URI where users can report issues. Example: |
|||
// https://issuetracker.google.com/issues/new?component=190865&template=1161103 |
|||
string new_issue_uri = 101; |
|||
|
|||
// Link to product home page. Example: |
|||
// https://cloud.google.com/asset-inventory/docs/overview |
|||
string documentation_uri = 102; |
|||
|
|||
// Used as a tracking tag when collecting data about the APIs developer |
|||
// relations artifacts like docs, packages delivered to package managers, |
|||
// etc. Example: "speech". |
|||
string api_short_name = 103; |
|||
|
|||
// GitHub label to apply to issues and pull requests opened for this API. |
|||
string github_label = 104; |
|||
|
|||
// GitHub teams to be added to CODEOWNERS in the directory in GitHub |
|||
// containing source code for the client libraries for this API. |
|||
repeated string codeowner_github_teams = 105; |
|||
|
|||
// A prefix used in sample code when demarking regions to be included in |
|||
// documentation. |
|||
string doc_tag_prefix = 106; |
|||
|
|||
// For whom the client library is being published. |
|||
ClientLibraryOrganization organization = 107; |
|||
|
|||
// Client library settings. If the same version string appears multiple |
|||
// times in this list, then the last one wins. Settings from earlier |
|||
// settings with the same version string are discarded. |
|||
repeated ClientLibrarySettings library_settings = 109; |
|||
|
|||
// Optional link to proto reference documentation. Example: |
|||
// https://cloud.google.com/pubsub/lite/docs/reference/rpc |
|||
string proto_reference_documentation_uri = 110; |
|||
} |
|||
|
|||
// Settings for Java client libraries. |
|||
message JavaSettings { |
|||
// The package name to use in Java. Clobbers the java_package option |
|||
// set in the protobuf. This should be used **only** by APIs |
|||
// who have already set the language_settings.java.package_name" field |
|||
// in gapic.yaml. API teams should use the protobuf java_package option |
|||
// where possible. |
|||
// |
|||
// Example of a YAML configuration:: |
|||
// |
|||
// publishing: |
|||
// java_settings: |
|||
// library_package: com.google.cloud.pubsub.v1 |
|||
string library_package = 1; |
|||
|
|||
// Configure the Java class name to use instead of the service's for its |
|||
// corresponding generated GAPIC client. Keys are fully-qualified |
|||
// service names as they appear in the protobuf (including the full |
|||
// the language_settings.java.interface_names" field in gapic.yaml. API |
|||
// teams should otherwise use the service name as it appears in the |
|||
// protobuf. |
|||
// |
|||
// Example of a YAML configuration:: |
|||
// |
|||
// publishing: |
|||
// java_settings: |
|||
// service_class_names: |
|||
// - google.pubsub.v1.Publisher: TopicAdmin |
|||
// - google.pubsub.v1.Subscriber: SubscriptionAdmin |
|||
map<string, string> service_class_names = 2; |
|||
|
|||
// Some settings. |
|||
CommonLanguageSettings common = 3; |
|||
} |
|||
|
|||
// Settings for C++ client libraries. |
|||
message CppSettings { |
|||
// Some settings. |
|||
CommonLanguageSettings common = 1; |
|||
} |
|||
|
|||
// Settings for Php client libraries. |
|||
message PhpSettings { |
|||
// Some settings. |
|||
CommonLanguageSettings common = 1; |
|||
} |
|||
|
|||
// Settings for Python client libraries. |
|||
message PythonSettings { |
|||
// Some settings. |
|||
CommonLanguageSettings common = 1; |
|||
} |
|||
|
|||
// Settings for Node client libraries. |
|||
message NodeSettings { |
|||
// Some settings. |
|||
CommonLanguageSettings common = 1; |
|||
} |
|||
|
|||
// Settings for Dotnet client libraries. |
|||
message DotnetSettings { |
|||
// Some settings. |
|||
CommonLanguageSettings common = 1; |
|||
|
|||
// Map from original service names to renamed versions. |
|||
// This is used when the default generated types |
|||
// would cause a naming conflict. (Neither name is |
|||
// fully-qualified.) |
|||
// Example: Subscriber to SubscriberServiceApi. |
|||
map<string, string> renamed_services = 2; |
|||
|
|||
// Map from full resource types to the effective short name |
|||
// for the resource. This is used when otherwise resource |
|||
// named from different services would cause naming collisions. |
|||
// Example entry: |
|||
// "datalabeling.googleapis.com/Dataset": "DataLabelingDataset" |
|||
map<string, string> renamed_resources = 3; |
|||
|
|||
// List of full resource types to ignore during generation. |
|||
// This is typically used for API-specific Location resources, |
|||
// which should be handled by the generator as if they were actually |
|||
// the common Location resources. |
|||
// Example entry: "documentai.googleapis.com/Location" |
|||
repeated string ignored_resources = 4; |
|||
|
|||
// Namespaces which must be aliased in snippets due to |
|||
// a known (but non-generator-predictable) naming collision |
|||
repeated string forced_namespace_aliases = 5; |
|||
|
|||
// Method signatures (in the form "service.method(signature)") |
|||
// which are provided separately, so shouldn't be generated. |
|||
// Snippets *calling* these methods are still generated, however. |
|||
repeated string handwritten_signatures = 6; |
|||
} |
|||
|
|||
// Settings for Ruby client libraries. |
|||
message RubySettings { |
|||
// Some settings. |
|||
CommonLanguageSettings common = 1; |
|||
} |
|||
|
|||
// Settings for Go client libraries. |
|||
message GoSettings { |
|||
// Some settings. |
|||
CommonLanguageSettings common = 1; |
|||
} |
|||
|
|||
// Describes the generator configuration for a method. |
|||
message MethodSettings { |
|||
// Describes settings to use when generating API methods that use the |
|||
// long-running operation pattern. |
|||
// All default values below are from those used in the client library |
|||
// generators (e.g. |
|||
// [Java](https://github.com/googleapis/gapic-generator-java/blob/04c2faa191a9b5a10b92392fe8482279c4404803/src/main/java/com/google/api/generator/gapic/composer/common/RetrySettingsComposer.java)). |
|||
message LongRunning { |
|||
// Initial delay after which the first poll request will be made. |
|||
// Default value: 5 seconds. |
|||
google.protobuf.Duration initial_poll_delay = 1; |
|||
|
|||
// Multiplier to gradually increase delay between subsequent polls until it |
|||
// reaches max_poll_delay. |
|||
// Default value: 1.5. |
|||
float poll_delay_multiplier = 2; |
|||
|
|||
// Maximum time between two subsequent poll requests. |
|||
// Default value: 45 seconds. |
|||
google.protobuf.Duration max_poll_delay = 3; |
|||
|
|||
// Total polling timeout. |
|||
// Default value: 5 minutes. |
|||
google.protobuf.Duration total_poll_timeout = 4; |
|||
} |
|||
|
|||
// The fully qualified name of the method, for which the options below apply. |
|||
// This is used to find the method to apply the options. |
|||
string selector = 1; |
|||
|
|||
// Describes settings to use for long-running operations when generating |
|||
// API methods for RPCs. Complements RPCs that use the annotations in |
|||
// google/longrunning/operations.proto. |
|||
// |
|||
// Example of a YAML configuration:: |
|||
// |
|||
// publishing: |
|||
// method_settings: |
|||
// - selector: google.cloud.speech.v2.Speech.BatchRecognize |
|||
// long_running: |
|||
// initial_poll_delay: |
|||
// seconds: 60 # 1 minute |
|||
// poll_delay_multiplier: 1.5 |
|||
// max_poll_delay: |
|||
// seconds: 360 # 6 minutes |
|||
// total_poll_timeout: |
|||
// seconds: 54000 # 90 minutes |
|||
LongRunning long_running = 2; |
|||
} |
|||
|
|||
// The organization for which the client libraries are being published. |
|||
// Affects the url where generated docs are published, etc. |
|||
enum ClientLibraryOrganization { |
|||
// Not useful. |
|||
CLIENT_LIBRARY_ORGANIZATION_UNSPECIFIED = 0; |
|||
|
|||
// Google Cloud Platform Org. |
|||
CLOUD = 1; |
|||
|
|||
// Ads (Advertising) Org. |
|||
ADS = 2; |
|||
|
|||
// Photos Org. |
|||
PHOTOS = 3; |
|||
|
|||
// Street View Org. |
|||
STREET_VIEW = 4; |
|||
|
|||
// Shopping Org. |
|||
SHOPPING = 5; |
|||
|
|||
// Geo Org. |
|||
GEO = 6; |
|||
|
|||
// Generative AI - https://developers.generativeai.google |
|||
GENERATIVE_AI = 7; |
|||
} |
|||
|
|||
// To where should client libraries be published? |
|||
enum ClientLibraryDestination { |
|||
// Client libraries will neither be generated nor published to package |
|||
// managers. |
|||
CLIENT_LIBRARY_DESTINATION_UNSPECIFIED = 0; |
|||
|
|||
// Generate the client library in a repo under github.com/googleapis, |
|||
// but don't publish it to package managers. |
|||
GITHUB = 10; |
|||
|
|||
// Publish the library to package managers like nuget.org and npmjs.com. |
|||
PACKAGE_MANAGER = 20; |
|||
} |
@ -0,0 +1,90 @@ |
|||
// Copyright 2023 Google LLC |
|||
// |
|||
// Licensed under the Apache License, Version 2.0 (the "License"); |
|||
// you may not use this file except in compliance with the License. |
|||
// You may obtain a copy of the License at |
|||
// |
|||
// http://www.apache.org/licenses/LICENSE-2.0 |
|||
// |
|||
// Unless required by applicable law or agreed to in writing, software |
|||
// distributed under the License is distributed on an "AS IS" BASIS, |
|||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
|||
// See the License for the specific language governing permissions and |
|||
// limitations under the License. |
|||
|
|||
syntax = "proto3"; |
|||
|
|||
package google.api; |
|||
|
|||
import "google/protobuf/descriptor.proto"; |
|||
|
|||
option go_package = "google.golang.org/genproto/googleapis/api/annotations;annotations"; |
|||
option java_multiple_files = true; |
|||
option java_outer_classname = "FieldBehaviorProto"; |
|||
option java_package = "com.google.api"; |
|||
option objc_class_prefix = "GAPI"; |
|||
|
|||
extend google.protobuf.FieldOptions { |
|||
// A designation of a specific field behavior (required, output only, etc.) |
|||
// in protobuf messages. |
|||
// |
|||
// Examples: |
|||
// |
|||
// string name = 1 [(google.api.field_behavior) = REQUIRED]; |
|||
// State state = 1 [(google.api.field_behavior) = OUTPUT_ONLY]; |
|||
// google.protobuf.Duration ttl = 1 |
|||
// [(google.api.field_behavior) = INPUT_ONLY]; |
|||
// google.protobuf.Timestamp expire_time = 1 |
|||
// [(google.api.field_behavior) = OUTPUT_ONLY, |
|||
// (google.api.field_behavior) = IMMUTABLE]; |
|||
repeated google.api.FieldBehavior field_behavior = 1052; |
|||
} |
|||
|
|||
// An indicator of the behavior of a given field (for example, that a field |
|||
// is required in requests, or given as output but ignored as input). |
|||
// This **does not** change the behavior in protocol buffers itself; it only |
|||
// denotes the behavior and may affect how API tooling handles the field. |
|||
// |
|||
// Note: This enum **may** receive new values in the future. |
|||
enum FieldBehavior { |
|||
// Conventional default for enums. Do not use this. |
|||
FIELD_BEHAVIOR_UNSPECIFIED = 0; |
|||
|
|||
// Specifically denotes a field as optional. |
|||
// While all fields in protocol buffers are optional, this may be specified |
|||
// for emphasis if appropriate. |
|||
OPTIONAL = 1; |
|||
|
|||
// Denotes a field as required. |
|||
// This indicates that the field **must** be provided as part of the request, |
|||
// and failure to do so will cause an error (usually `INVALID_ARGUMENT`). |
|||
REQUIRED = 2; |
|||
|
|||
// Denotes a field as output only. |
|||
// This indicates that the field is provided in responses, but including the |
|||
// field in a request does nothing (the server *must* ignore it and |
|||
// *must not* throw an error as a result of the field's presence). |
|||
OUTPUT_ONLY = 3; |
|||
|
|||
// Denotes a field as input only. |
|||
// This indicates that the field is provided in requests, and the |
|||
// corresponding field is not included in output. |
|||
INPUT_ONLY = 4; |
|||
|
|||
// Denotes a field as immutable. |
|||
// This indicates that the field may be set once in a request to create a |
|||
// resource, but may not be changed thereafter. |
|||
IMMUTABLE = 5; |
|||
|
|||
// Denotes that a (repeated) field is an unordered list. |
|||
// This indicates that the service may provide the elements of the list |
|||
// in any arbitrary order, rather than the order the user originally |
|||
// provided. Additionally, the list's order may or may not be stable. |
|||
UNORDERED_LIST = 6; |
|||
|
|||
// Denotes that this field returns a non-empty default value if not set. |
|||
// This indicates that if the user provides the empty value in a request, |
|||
// a non-empty value will be returned. The user will not be aware of what |
|||
// non-empty value to expect. |
|||
NON_EMPTY_DEFAULT = 7; |
|||
} |
@ -0,0 +1,379 @@ |
|||
// Copyright 2023 Google LLC |
|||
// |
|||
// Licensed under the Apache License, Version 2.0 (the "License"); |
|||
// you may not use this file except in compliance with the License. |
|||
// You may obtain a copy of the License at |
|||
// |
|||
// http://www.apache.org/licenses/LICENSE-2.0 |
|||
// |
|||
// Unless required by applicable law or agreed to in writing, software |
|||
// distributed under the License is distributed on an "AS IS" BASIS, |
|||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
|||
// See the License for the specific language governing permissions and |
|||
// limitations under the License. |
|||
|
|||
syntax = "proto3"; |
|||
|
|||
package google.api; |
|||
|
|||
option cc_enable_arenas = true; |
|||
option go_package = "google.golang.org/genproto/googleapis/api/annotations;annotations"; |
|||
option java_multiple_files = true; |
|||
option java_outer_classname = "HttpProto"; |
|||
option java_package = "com.google.api"; |
|||
option objc_class_prefix = "GAPI"; |
|||
|
|||
// Defines the HTTP configuration for an API service. It contains a list of |
|||
// [HttpRule][google.api.HttpRule], each specifying the mapping of an RPC method |
|||
// to one or more HTTP REST API methods. |
|||
message Http { |
|||
// A list of HTTP configuration rules that apply to individual API methods. |
|||
// |
|||
// **NOTE:** All service configuration rules follow "last one wins" order. |
|||
repeated HttpRule rules = 1; |
|||
|
|||
// When set to true, URL path parameters will be fully URI-decoded except in |
|||
// cases of single segment matches in reserved expansion, where "%2F" will be |
|||
// left encoded. |
|||
// |
|||
// The default behavior is to not decode RFC 6570 reserved characters in multi |
|||
// segment matches. |
|||
bool fully_decode_reserved_expansion = 2; |
|||
} |
|||
|
|||
// # gRPC Transcoding |
|||
// |
|||
// gRPC Transcoding is a feature for mapping between a gRPC method and one or |
|||
// more HTTP REST endpoints. It allows developers to build a single API service |
|||
// that supports both gRPC APIs and REST APIs. Many systems, including [Google |
|||
// APIs](https://github.com/googleapis/googleapis), |
|||
// [Cloud Endpoints](https://cloud.google.com/endpoints), [gRPC |
|||
// Gateway](https://github.com/grpc-ecosystem/grpc-gateway), |
|||
// and [Envoy](https://github.com/envoyproxy/envoy) proxy support this feature |
|||
// and use it for large scale production services. |
|||
// |
|||
// `HttpRule` defines the schema of the gRPC/REST mapping. The mapping specifies |
|||
// how different portions of the gRPC request message are mapped to the URL |
|||
// path, URL query parameters, and HTTP request body. It also controls how the |
|||
// gRPC response message is mapped to the HTTP response body. `HttpRule` is |
|||
// typically specified as an `google.api.http` annotation on the gRPC method. |
|||
// |
|||
// Each mapping specifies a URL path template and an HTTP method. The path |
|||
// template may refer to one or more fields in the gRPC request message, as long |
|||
// as each field is a non-repeated field with a primitive (non-message) type. |
|||
// The path template controls how fields of the request message are mapped to |
|||
// the URL path. |
|||
// |
|||
// Example: |
|||
// |
|||
// service Messaging { |
|||
// rpc GetMessage(GetMessageRequest) returns (Message) { |
|||
// option (google.api.http) = { |
|||
// get: "/v1/{name=messages/*}" |
|||
// }; |
|||
// } |
|||
// } |
|||
// message GetMessageRequest { |
|||
// string name = 1; // Mapped to URL path. |
|||
// } |
|||
// message Message { |
|||
// string text = 1; // The resource content. |
|||
// } |
|||
// |
|||
// This enables an HTTP REST to gRPC mapping as below: |
|||
// |
|||
// HTTP | gRPC |
|||
// -----|----- |
|||
// `GET /v1/messages/123456` | `GetMessage(name: "messages/123456")` |
|||
// |
|||
// Any fields in the request message which are not bound by the path template |
|||
// automatically become HTTP query parameters if there is no HTTP request body. |
|||
// For example: |
|||
// |
|||
// service Messaging { |
|||
// rpc GetMessage(GetMessageRequest) returns (Message) { |
|||
// option (google.api.http) = { |
|||
// get:"/v1/messages/{message_id}" |
|||
// }; |
|||
// } |
|||
// } |
|||
// message GetMessageRequest { |
|||
// message SubMessage { |
|||
// string subfield = 1; |
|||
// } |
|||
// string message_id = 1; // Mapped to URL path. |
|||
// int64 revision = 2; // Mapped to URL query parameter `revision`. |
|||
// SubMessage sub = 3; // Mapped to URL query parameter `sub.subfield`. |
|||
// } |
|||
// |
|||
// This enables a HTTP JSON to RPC mapping as below: |
|||
// |
|||
// HTTP | gRPC |
|||
// -----|----- |
|||
// `GET /v1/messages/123456?revision=2&sub.subfield=foo` | |
|||
// `GetMessage(message_id: "123456" revision: 2 sub: SubMessage(subfield: |
|||
// "foo"))` |
|||
// |
|||
// Note that fields which are mapped to URL query parameters must have a |
|||
// primitive type or a repeated primitive type or a non-repeated message type. |
|||
// In the case of a repeated type, the parameter can be repeated in the URL |
|||
// as `...?param=A¶m=B`. In the case of a message type, each field of the |
|||
// message is mapped to a separate parameter, such as |
|||
// `...?foo.a=A&foo.b=B&foo.c=C`. |
|||
// |
|||
// For HTTP methods that allow a request body, the `body` field |
|||
// specifies the mapping. Consider a REST update method on the |
|||
// message resource collection: |
|||
// |
|||
// service Messaging { |
|||
// rpc UpdateMessage(UpdateMessageRequest) returns (Message) { |
|||
// option (google.api.http) = { |
|||
// patch: "/v1/messages/{message_id}" |
|||
// body: "message" |
|||
// }; |
|||
// } |
|||
// } |
|||
// message UpdateMessageRequest { |
|||
// string message_id = 1; // mapped to the URL |
|||
// Message message = 2; // mapped to the body |
|||
// } |
|||
// |
|||
// The following HTTP JSON to RPC mapping is enabled, where the |
|||
// representation of the JSON in the request body is determined by |
|||
// protos JSON encoding: |
|||
// |
|||
// HTTP | gRPC |
|||
// -----|----- |
|||
// `PATCH /v1/messages/123456 { "text": "Hi!" }` | `UpdateMessage(message_id: |
|||
// "123456" message { text: "Hi!" })` |
|||
// |
|||
// The special name `*` can be used in the body mapping to define that |
|||
// every field not bound by the path template should be mapped to the |
|||
// request body. This enables the following alternative definition of |
|||
// the update method: |
|||
// |
|||
// service Messaging { |
|||
// rpc UpdateMessage(Message) returns (Message) { |
|||
// option (google.api.http) = { |
|||
// patch: "/v1/messages/{message_id}" |
|||
// body: "*" |
|||
// }; |
|||
// } |
|||
// } |
|||
// message Message { |
|||
// string message_id = 1; |
|||
// string text = 2; |
|||
// } |
|||
// |
|||
// |
|||
// The following HTTP JSON to RPC mapping is enabled: |
|||
// |
|||
// HTTP | gRPC |
|||
// -----|----- |
|||
// `PATCH /v1/messages/123456 { "text": "Hi!" }` | `UpdateMessage(message_id: |
|||
// "123456" text: "Hi!")` |
|||
// |
|||
// Note that when using `*` in the body mapping, it is not possible to |
|||
// have HTTP parameters, as all fields not bound by the path end in |
|||
// the body. This makes this option more rarely used in practice when |
|||
// defining REST APIs. The common usage of `*` is in custom methods |
|||
// which don't use the URL at all for transferring data. |
|||
// |
|||
// It is possible to define multiple HTTP methods for one RPC by using |
|||
// the `additional_bindings` option. Example: |
|||
// |
|||
// service Messaging { |
|||
// rpc GetMessage(GetMessageRequest) returns (Message) { |
|||
// option (google.api.http) = { |
|||
// get: "/v1/messages/{message_id}" |
|||
// additional_bindings { |
|||
// get: "/v1/users/{user_id}/messages/{message_id}" |
|||
// } |
|||
// }; |
|||
// } |
|||
// } |
|||
// message GetMessageRequest { |
|||
// string message_id = 1; |
|||
// string user_id = 2; |
|||
// } |
|||
// |
|||
// This enables the following two alternative HTTP JSON to RPC mappings: |
|||
// |
|||
// HTTP | gRPC |
|||
// -----|----- |
|||
// `GET /v1/messages/123456` | `GetMessage(message_id: "123456")` |
|||
// `GET /v1/users/me/messages/123456` | `GetMessage(user_id: "me" message_id: |
|||
// "123456")` |
|||
// |
|||
// ## Rules for HTTP mapping |
|||
// |
|||
// 1. Leaf request fields (recursive expansion nested messages in the request |
|||
// message) are classified into three categories: |
|||
// - Fields referred by the path template. They are passed via the URL path. |
|||
// - Fields referred by the [HttpRule.body][google.api.HttpRule.body]. They |
|||
// are passed via the HTTP |
|||
// request body. |
|||
// - All other fields are passed via the URL query parameters, and the |
|||
// parameter name is the field path in the request message. A repeated |
|||
// field can be represented as multiple query parameters under the same |
|||
// name. |
|||
// 2. If [HttpRule.body][google.api.HttpRule.body] is "*", there is no URL |
|||
// query parameter, all fields |
|||
// are passed via URL path and HTTP request body. |
|||
// 3. If [HttpRule.body][google.api.HttpRule.body] is omitted, there is no HTTP |
|||
// request body, all |
|||
// fields are passed via URL path and URL query parameters. |
|||
// |
|||
// ### Path template syntax |
|||
// |
|||
// Template = "/" Segments [ Verb ] ; |
|||
// Segments = Segment { "/" Segment } ; |
|||
// Segment = "*" | "**" | LITERAL | Variable ; |
|||
// Variable = "{" FieldPath [ "=" Segments ] "}" ; |
|||
// FieldPath = IDENT { "." IDENT } ; |
|||
// Verb = ":" LITERAL ; |
|||
// |
|||
// The syntax `*` matches a single URL path segment. The syntax `**` matches |
|||
// zero or more URL path segments, which must be the last part of the URL path |
|||
// except the `Verb`. |
|||
// |
|||
// The syntax `Variable` matches part of the URL path as specified by its |
|||
// template. A variable template must not contain other variables. If a variable |
|||
// matches a single path segment, its template may be omitted, e.g. `{var}` |
|||
// is equivalent to `{var=*}`. |
|||
// |
|||
// The syntax `LITERAL` matches literal text in the URL path. If the `LITERAL` |
|||
// contains any reserved character, such characters should be percent-encoded |
|||
// before the matching. |
|||
// |
|||
// If a variable contains exactly one path segment, such as `"{var}"` or |
|||
// `"{var=*}"`, when such a variable is expanded into a URL path on the client |
|||
// side, all characters except `[-_.~0-9a-zA-Z]` are percent-encoded. The |
|||
// server side does the reverse decoding. Such variables show up in the |
|||
// [Discovery |
|||
// Document](https://developers.google.com/discovery/v1/reference/apis) as |
|||
// `{var}`. |
|||
// |
|||
// If a variable contains multiple path segments, such as `"{var=foo/*}"` |
|||
// or `"{var=**}"`, when such a variable is expanded into a URL path on the |
|||
// client side, all characters except `[-_.~/0-9a-zA-Z]` are percent-encoded. |
|||
// The server side does the reverse decoding, except "%2F" and "%2f" are left |
|||
// unchanged. Such variables show up in the |
|||
// [Discovery |
|||
// Document](https://developers.google.com/discovery/v1/reference/apis) as |
|||
// `{+var}`. |
|||
// |
|||
// ## Using gRPC API Service Configuration |
|||
// |
|||
// gRPC API Service Configuration (service config) is a configuration language |
|||
// for configuring a gRPC service to become a user-facing product. The |
|||
// service config is simply the YAML representation of the `google.api.Service` |
|||
// proto message. |
|||
// |
|||
// As an alternative to annotating your proto file, you can configure gRPC |
|||
// transcoding in your service config YAML files. You do this by specifying a |
|||
// `HttpRule` that maps the gRPC method to a REST endpoint, achieving the same |
|||
// effect as the proto annotation. This can be particularly useful if you |
|||
// have a proto that is reused in multiple services. Note that any transcoding |
|||
// specified in the service config will override any matching transcoding |
|||
// configuration in the proto. |
|||
// |
|||
// Example: |
|||
// |
|||
// http: |
|||
// rules: |
|||
// # Selects a gRPC method and applies HttpRule to it. |
|||
// - selector: example.v1.Messaging.GetMessage |
|||
// get: /v1/messages/{message_id}/{sub.subfield} |
|||
// |
|||
// ## Special notes |
|||
// |
|||
// When gRPC Transcoding is used to map a gRPC to JSON REST endpoints, the |
|||
// proto to JSON conversion must follow the [proto3 |
|||
// specification](https://developers.google.com/protocol-buffers/docs/proto3#json). |
|||
// |
|||
// While the single segment variable follows the semantics of |
|||
// [RFC 6570](https://tools.ietf.org/html/rfc6570) Section 3.2.2 Simple String |
|||
// Expansion, the multi segment variable **does not** follow RFC 6570 Section |
|||
// 3.2.3 Reserved Expansion. The reason is that the Reserved Expansion |
|||
// does not expand special characters like `?` and `#`, which would lead |
|||
// to invalid URLs. As the result, gRPC Transcoding uses a custom encoding |
|||
// for multi segment variables. |
|||
// |
|||
// The path variables **must not** refer to any repeated or mapped field, |
|||
// because client libraries are not capable of handling such variable expansion. |
|||
// |
|||
// The path variables **must not** capture the leading "/" character. The reason |
|||
// is that the most common use case "{var}" does not capture the leading "/" |
|||
// character. For consistency, all path variables must share the same behavior. |
|||
// |
|||
// Repeated message fields must not be mapped to URL query parameters, because |
|||
// no client library can support such complicated mapping. |
|||
// |
|||
// If an API needs to use a JSON array for request or response body, it can map |
|||
// the request or response body to a repeated field. However, some gRPC |
|||
// Transcoding implementations may not support this feature. |
|||
message HttpRule { |
|||
// Selects a method to which this rule applies. |
|||
// |
|||
// Refer to [selector][google.api.DocumentationRule.selector] for syntax |
|||
// details. |
|||
string selector = 1; |
|||
|
|||
// Determines the URL pattern is matched by this rules. This pattern can be |
|||
// used with any of the {get|put|post|delete|patch} methods. A custom method |
|||
// can be defined using the 'custom' field. |
|||
oneof pattern { |
|||
// Maps to HTTP GET. Used for listing and getting information about |
|||
// resources. |
|||
string get = 2; |
|||
|
|||
// Maps to HTTP PUT. Used for replacing a resource. |
|||
string put = 3; |
|||
|
|||
// Maps to HTTP POST. Used for creating a resource or performing an action. |
|||
string post = 4; |
|||
|
|||
// Maps to HTTP DELETE. Used for deleting a resource. |
|||
string delete = 5; |
|||
|
|||
// Maps to HTTP PATCH. Used for updating a resource. |
|||
string patch = 6; |
|||
|
|||
// The custom pattern is used for specifying an HTTP method that is not |
|||
// included in the `pattern` field, such as HEAD, or "*" to leave the |
|||
// HTTP method unspecified for this rule. The wild-card rule is useful |
|||
// for services that provide content to Web (HTML) clients. |
|||
CustomHttpPattern custom = 8; |
|||
} |
|||
|
|||
// The name of the request field whose value is mapped to the HTTP request |
|||
// body, or `*` for mapping all request fields not captured by the path |
|||
// pattern to the HTTP body, or omitted for not having any HTTP request body. |
|||
// |
|||
// NOTE: the referred field must be present at the top-level of the request |
|||
// message type. |
|||
string body = 7; |
|||
|
|||
// Optional. The name of the response field whose value is mapped to the HTTP |
|||
// response body. When omitted, the entire response message will be used |
|||
// as the HTTP response body. |
|||
// |
|||
// NOTE: The referred field must be present at the top-level of the response |
|||
// message type. |
|||
string response_body = 12; |
|||
|
|||
// Additional HTTP bindings for the selector. Nested bindings must |
|||
// not contain an `additional_bindings` field themselves (that is, |
|||
// the nesting may only be one level deep). |
|||
repeated HttpRule additional_bindings = 11; |
|||
} |
|||
|
|||
// A custom pattern is used for defining custom HTTP verb. |
|||
message CustomHttpPattern { |
|||
// The name of this custom HTTP verb. |
|||
string kind = 1; |
|||
|
|||
// The path matched by this custom verb. |
|||
string path = 2; |
|||
} |
@ -0,0 +1,238 @@ |
|||
// Copyright 2023 Google LLC |
|||
// |
|||
// Licensed under the Apache License, Version 2.0 (the "License"); |
|||
// you may not use this file except in compliance with the License. |
|||
// You may obtain a copy of the License at |
|||
// |
|||
// http://www.apache.org/licenses/LICENSE-2.0 |
|||
// |
|||
// Unless required by applicable law or agreed to in writing, software |
|||
// distributed under the License is distributed on an "AS IS" BASIS, |
|||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
|||
// See the License for the specific language governing permissions and |
|||
// limitations under the License. |
|||
|
|||
syntax = "proto3"; |
|||
|
|||
package google.api; |
|||
|
|||
import "google/protobuf/descriptor.proto"; |
|||
|
|||
option cc_enable_arenas = true; |
|||
option go_package = "google.golang.org/genproto/googleapis/api/annotations;annotations"; |
|||
option java_multiple_files = true; |
|||
option java_outer_classname = "ResourceProto"; |
|||
option java_package = "com.google.api"; |
|||
option objc_class_prefix = "GAPI"; |
|||
|
|||
extend google.protobuf.FieldOptions { |
|||
// An annotation that describes a resource reference, see |
|||
// [ResourceReference][]. |
|||
google.api.ResourceReference resource_reference = 1055; |
|||
} |
|||
|
|||
extend google.protobuf.FileOptions { |
|||
// An annotation that describes a resource definition without a corresponding |
|||
// message; see [ResourceDescriptor][]. |
|||
repeated google.api.ResourceDescriptor resource_definition = 1053; |
|||
} |
|||
|
|||
extend google.protobuf.MessageOptions { |
|||
// An annotation that describes a resource definition, see |
|||
// [ResourceDescriptor][]. |
|||
google.api.ResourceDescriptor resource = 1053; |
|||
} |
|||
|
|||
// A simple descriptor of a resource type. |
|||
// |
|||
// ResourceDescriptor annotates a resource message (either by means of a |
|||
// protobuf annotation or use in the service config), and associates the |
|||
// resource's schema, the resource type, and the pattern of the resource name. |
|||
// |
|||
// Example: |
|||
// |
|||
// message Topic { |
|||
// // Indicates this message defines a resource schema. |
|||
// // Declares the resource type in the format of {service}/{kind}. |
|||
// // For Kubernetes resources, the format is {api group}/{kind}. |
|||
// option (google.api.resource) = { |
|||
// type: "pubsub.googleapis.com/Topic" |
|||
// pattern: "projects/{project}/topics/{topic}" |
|||
// }; |
|||
// } |
|||
// |
|||
// The ResourceDescriptor Yaml config will look like: |
|||
// |
|||
// resources: |
|||
// - type: "pubsub.googleapis.com/Topic" |
|||
// pattern: "projects/{project}/topics/{topic}" |
|||
// |
|||
// Sometimes, resources have multiple patterns, typically because they can |
|||
// live under multiple parents. |
|||
// |
|||
// Example: |
|||
// |
|||
// message LogEntry { |
|||
// option (google.api.resource) = { |
|||
// type: "logging.googleapis.com/LogEntry" |
|||
// pattern: "projects/{project}/logs/{log}" |
|||
// pattern: "folders/{folder}/logs/{log}" |
|||
// pattern: "organizations/{organization}/logs/{log}" |
|||
// pattern: "billingAccounts/{billing_account}/logs/{log}" |
|||
// }; |
|||
// } |
|||
// |
|||
// The ResourceDescriptor Yaml config will look like: |
|||
// |
|||
// resources: |
|||
// - type: 'logging.googleapis.com/LogEntry' |
|||
// pattern: "projects/{project}/logs/{log}" |
|||
// pattern: "folders/{folder}/logs/{log}" |
|||
// pattern: "organizations/{organization}/logs/{log}" |
|||
// pattern: "billingAccounts/{billing_account}/logs/{log}" |
|||
message ResourceDescriptor { |
|||
// A description of the historical or future-looking state of the |
|||
// resource pattern. |
|||
enum History { |
|||
// The "unset" value. |
|||
HISTORY_UNSPECIFIED = 0; |
|||
|
|||
// The resource originally had one pattern and launched as such, and |
|||
// additional patterns were added later. |
|||
ORIGINALLY_SINGLE_PATTERN = 1; |
|||
|
|||
// The resource has one pattern, but the API owner expects to add more |
|||
// later. (This is the inverse of ORIGINALLY_SINGLE_PATTERN, and prevents |
|||
// that from being necessary once there are multiple patterns.) |
|||
FUTURE_MULTI_PATTERN = 2; |
|||
} |
|||
|
|||
// A flag representing a specific style that a resource claims to conform to. |
|||
enum Style { |
|||
// The unspecified value. Do not use. |
|||
STYLE_UNSPECIFIED = 0; |
|||
|
|||
// This resource is intended to be "declarative-friendly". |
|||
// |
|||
// Declarative-friendly resources must be more strictly consistent, and |
|||
// setting this to true communicates to tools that this resource should |
|||
// adhere to declarative-friendly expectations. |
|||
// |
|||
// Note: This is used by the API linter (linter.aip.dev) to enable |
|||
// additional checks. |
|||
DECLARATIVE_FRIENDLY = 1; |
|||
} |
|||
|
|||
// The resource type. It must be in the format of |
|||
// {service_name}/{resource_type_kind}. The `resource_type_kind` must be |
|||
// singular and must not include version numbers. |
|||
// |
|||
// Example: `storage.googleapis.com/Bucket` |
|||
// |
|||
// The value of the resource_type_kind must follow the regular expression |
|||
// /[A-Za-z][a-zA-Z0-9]+/. It should start with an upper case character and |
|||
// should use PascalCase (UpperCamelCase). The maximum number of |
|||
// characters allowed for the `resource_type_kind` is 100. |
|||
string type = 1; |
|||
|
|||
// Optional. The relative resource name pattern associated with this resource |
|||
// type. The DNS prefix of the full resource name shouldn't be specified here. |
|||
// |
|||
// The path pattern must follow the syntax, which aligns with HTTP binding |
|||
// syntax: |
|||
// |
|||
// Template = Segment { "/" Segment } ; |
|||
// Segment = LITERAL | Variable ; |
|||
// Variable = "{" LITERAL "}" ; |
|||
// |
|||
// Examples: |
|||
// |
|||
// - "projects/{project}/topics/{topic}" |
|||
// - "projects/{project}/knowledgeBases/{knowledge_base}" |
|||
// |
|||
// The components in braces correspond to the IDs for each resource in the |
|||
// hierarchy. It is expected that, if multiple patterns are provided, |
|||
// the same component name (e.g. "project") refers to IDs of the same |
|||
// type of resource. |
|||
repeated string pattern = 2; |
|||
|
|||
// Optional. The field on the resource that designates the resource name |
|||
// field. If omitted, this is assumed to be "name". |
|||
string name_field = 3; |
|||
|
|||
// Optional. The historical or future-looking state of the resource pattern. |
|||
// |
|||
// Example: |
|||
// |
|||
// // The InspectTemplate message originally only supported resource |
|||
// // names with organization, and project was added later. |
|||
// message InspectTemplate { |
|||
// option (google.api.resource) = { |
|||
// type: "dlp.googleapis.com/InspectTemplate" |
|||
// pattern: |
|||
// "organizations/{organization}/inspectTemplates/{inspect_template}" |
|||
// pattern: "projects/{project}/inspectTemplates/{inspect_template}" |
|||
// history: ORIGINALLY_SINGLE_PATTERN |
|||
// }; |
|||
// } |
|||
History history = 4; |
|||
|
|||
// The plural name used in the resource name and permission names, such as |
|||
// 'projects' for the resource name of 'projects/{project}' and the permission |
|||
// name of 'cloudresourcemanager.googleapis.com/projects.get'. It is the same |
|||
// concept of the `plural` field in k8s CRD spec |
|||
// https://kubernetes.io/docs/tasks/access-kubernetes-api/custom-resources/custom-resource-definitions/ |
|||
// |
|||
// Note: The plural form is required even for singleton resources. See |
|||
// https://aip.dev/156 |
|||
string plural = 5; |
|||
|
|||
// The same concept of the `singular` field in k8s CRD spec |
|||
// https://kubernetes.io/docs/tasks/access-kubernetes-api/custom-resources/custom-resource-definitions/ |
|||
// Such as "project" for the `resourcemanager.googleapis.com/Project` type. |
|||
string singular = 6; |
|||
|
|||
// Style flag(s) for this resource. |
|||
// These indicate that a resource is expected to conform to a given |
|||
// style. See the specific style flags for additional information. |
|||
repeated Style style = 10; |
|||
} |
|||
|
|||
// Defines a proto annotation that describes a string field that refers to |
|||
// an API resource. |
|||
message ResourceReference { |
|||
// The resource type that the annotated field references. |
|||
// |
|||
// Example: |
|||
// |
|||
// message Subscription { |
|||
// string topic = 2 [(google.api.resource_reference) = { |
|||
// type: "pubsub.googleapis.com/Topic" |
|||
// }]; |
|||
// } |
|||
// |
|||
// Occasionally, a field may reference an arbitrary resource. In this case, |
|||
// APIs use the special value * in their resource reference. |
|||
// |
|||
// Example: |
|||
// |
|||
// message GetIamPolicyRequest { |
|||
// string resource = 2 [(google.api.resource_reference) = { |
|||
// type: "*" |
|||
// }]; |
|||
// } |
|||
string type = 1; |
|||
|
|||
// The resource type of a child collection that the annotated field |
|||
// references. This is useful for annotating the `parent` field that |
|||
// doesn't have a fixed resource type. |
|||
// |
|||
// Example: |
|||
// |
|||
// message ListLogEntriesRequest { |
|||
// string parent = 1 [(google.api.resource_reference) = { |
|||
// child_type: "logging.googleapis.com/LogEntry" |
|||
// }; |
|||
// } |
|||
string child_type = 2; |
|||
} |
@ -0,0 +1,35 @@ |
|||
syntax = "proto3"; |
|||
|
|||
package public_pb; |
|||
|
|||
import "google/api/annotations.proto"; |
|||
|
|||
option go_package = "github.com/seaweedfs/seaweedfs/weed/pb/public_pb"; |
|||
option java_package = "seaweedfs.client"; |
|||
option java_outer_classname = "PublicProto"; |
|||
|
|||
///////////// |
|||
// Service // |
|||
///////////// |
|||
|
|||
// Public SeaweedFS API |
|||
service SeaweedFS { |
|||
rpc V1GetInfo (V1GetInfoRequest) returns (V1GetInfoResponse) { |
|||
option (google.api.http) = { |
|||
get: "/v1/info" |
|||
}; |
|||
} |
|||
} |
|||
|
|||
////////////// |
|||
// Messages // |
|||
////////////// |
|||
|
|||
// Request message for SeaweedFS.v1GetInfo |
|||
message V1GetInfoRequest {} |
|||
|
|||
// Response message for SeaweedFS.v1GetInfo |
|||
message V1GetInfoResponse { |
|||
// Version of the API |
|||
string version = 1; |
|||
} |
@ -0,0 +1,213 @@ |
|||
// Code generated by protoc-gen-go. DO NOT EDIT.
|
|||
// versions:
|
|||
// protoc-gen-go v1.28.1
|
|||
// protoc v3.21.12
|
|||
// source: public.proto
|
|||
|
|||
package public_pb |
|||
|
|||
import ( |
|||
_ "google.golang.org/genproto/googleapis/api/annotations" |
|||
protoreflect "google.golang.org/protobuf/reflect/protoreflect" |
|||
protoimpl "google.golang.org/protobuf/runtime/protoimpl" |
|||
reflect "reflect" |
|||
sync "sync" |
|||
) |
|||
|
|||
const ( |
|||
// Verify that this generated code is sufficiently up-to-date.
|
|||
_ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) |
|||
// Verify that runtime/protoimpl is sufficiently up-to-date.
|
|||
_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) |
|||
) |
|||
|
|||
// Request message for SeaweedFS.v1GetInfo
|
|||
type V1GetInfoRequest struct { |
|||
state protoimpl.MessageState |
|||
sizeCache protoimpl.SizeCache |
|||
unknownFields protoimpl.UnknownFields |
|||
} |
|||
|
|||
func (x *V1GetInfoRequest) Reset() { |
|||
*x = V1GetInfoRequest{} |
|||
if protoimpl.UnsafeEnabled { |
|||
mi := &file_public_proto_msgTypes[0] |
|||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) |
|||
ms.StoreMessageInfo(mi) |
|||
} |
|||
} |
|||
|
|||
func (x *V1GetInfoRequest) String() string { |
|||
return protoimpl.X.MessageStringOf(x) |
|||
} |
|||
|
|||
func (*V1GetInfoRequest) ProtoMessage() {} |
|||
|
|||
func (x *V1GetInfoRequest) ProtoReflect() protoreflect.Message { |
|||
mi := &file_public_proto_msgTypes[0] |
|||
if protoimpl.UnsafeEnabled && x != nil { |
|||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) |
|||
if ms.LoadMessageInfo() == nil { |
|||
ms.StoreMessageInfo(mi) |
|||
} |
|||
return ms |
|||
} |
|||
return mi.MessageOf(x) |
|||
} |
|||
|
|||
// Deprecated: Use V1GetInfoRequest.ProtoReflect.Descriptor instead.
|
|||
func (*V1GetInfoRequest) Descriptor() ([]byte, []int) { |
|||
return file_public_proto_rawDescGZIP(), []int{0} |
|||
} |
|||
|
|||
// Response message for SeaweedFS.v1GetInfo
|
|||
type V1GetInfoResponse struct { |
|||
state protoimpl.MessageState |
|||
sizeCache protoimpl.SizeCache |
|||
unknownFields protoimpl.UnknownFields |
|||
|
|||
// Version of the API
|
|||
Version string `protobuf:"bytes,1,opt,name=version,proto3" json:"version,omitempty"` |
|||
} |
|||
|
|||
func (x *V1GetInfoResponse) Reset() { |
|||
*x = V1GetInfoResponse{} |
|||
if protoimpl.UnsafeEnabled { |
|||
mi := &file_public_proto_msgTypes[1] |
|||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) |
|||
ms.StoreMessageInfo(mi) |
|||
} |
|||
} |
|||
|
|||
func (x *V1GetInfoResponse) String() string { |
|||
return protoimpl.X.MessageStringOf(x) |
|||
} |
|||
|
|||
func (*V1GetInfoResponse) ProtoMessage() {} |
|||
|
|||
func (x *V1GetInfoResponse) ProtoReflect() protoreflect.Message { |
|||
mi := &file_public_proto_msgTypes[1] |
|||
if protoimpl.UnsafeEnabled && x != nil { |
|||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) |
|||
if ms.LoadMessageInfo() == nil { |
|||
ms.StoreMessageInfo(mi) |
|||
} |
|||
return ms |
|||
} |
|||
return mi.MessageOf(x) |
|||
} |
|||
|
|||
// Deprecated: Use V1GetInfoResponse.ProtoReflect.Descriptor instead.
|
|||
func (*V1GetInfoResponse) Descriptor() ([]byte, []int) { |
|||
return file_public_proto_rawDescGZIP(), []int{1} |
|||
} |
|||
|
|||
func (x *V1GetInfoResponse) GetVersion() string { |
|||
if x != nil { |
|||
return x.Version |
|||
} |
|||
return "" |
|||
} |
|||
|
|||
var File_public_proto protoreflect.FileDescriptor |
|||
|
|||
var file_public_proto_rawDesc = []byte{ |
|||
0x0a, 0x0c, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x09, |
|||
0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x5f, 0x70, 0x62, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, |
|||
0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, |
|||
0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x12, 0x0a, 0x10, 0x56, 0x31, 0x47, 0x65, 0x74, |
|||
0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x2d, 0x0a, 0x11, 0x56, |
|||
0x31, 0x47, 0x65, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, |
|||
0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, |
|||
0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x32, 0x65, 0x0a, 0x09, 0x53, 0x65, |
|||
0x61, 0x77, 0x65, 0x65, 0x64, 0x46, 0x53, 0x12, 0x58, 0x0a, 0x09, 0x56, 0x31, 0x47, 0x65, 0x74, |
|||
0x49, 0x6e, 0x66, 0x6f, 0x12, 0x1b, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x5f, 0x70, 0x62, |
|||
0x2e, 0x56, 0x31, 0x47, 0x65, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, |
|||
0x74, 0x1a, 0x1c, 0x2e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x5f, 0x70, 0x62, 0x2e, 0x56, 0x31, |
|||
0x47, 0x65, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, |
|||
0x10, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0a, 0x12, 0x08, 0x2f, 0x76, 0x31, 0x2f, 0x69, 0x6e, 0x66, |
|||
0x6f, 0x42, 0x51, 0x0a, 0x10, 0x73, 0x65, 0x61, 0x77, 0x65, 0x65, 0x64, 0x66, 0x73, 0x2e, 0x63, |
|||
0x6c, 0x69, 0x65, 0x6e, 0x74, 0x42, 0x0b, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x50, 0x72, 0x6f, |
|||
0x74, 0x6f, 0x5a, 0x30, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x73, |
|||
0x65, 0x61, 0x77, 0x65, 0x65, 0x64, 0x66, 0x73, 0x2f, 0x73, 0x65, 0x61, 0x77, 0x65, 0x65, 0x64, |
|||
0x66, 0x73, 0x2f, 0x77, 0x65, 0x65, 0x64, 0x2f, 0x70, 0x62, 0x2f, 0x70, 0x75, 0x62, 0x6c, 0x69, |
|||
0x63, 0x5f, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, |
|||
} |
|||
|
|||
var ( |
|||
file_public_proto_rawDescOnce sync.Once |
|||
file_public_proto_rawDescData = file_public_proto_rawDesc |
|||
) |
|||
|
|||
func file_public_proto_rawDescGZIP() []byte { |
|||
file_public_proto_rawDescOnce.Do(func() { |
|||
file_public_proto_rawDescData = protoimpl.X.CompressGZIP(file_public_proto_rawDescData) |
|||
}) |
|||
return file_public_proto_rawDescData |
|||
} |
|||
|
|||
var file_public_proto_msgTypes = make([]protoimpl.MessageInfo, 2) |
|||
var file_public_proto_goTypes = []interface{}{ |
|||
(*V1GetInfoRequest)(nil), // 0: public_pb.V1GetInfoRequest
|
|||
(*V1GetInfoResponse)(nil), // 1: public_pb.V1GetInfoResponse
|
|||
} |
|||
var file_public_proto_depIdxs = []int32{ |
|||
0, // 0: public_pb.SeaweedFS.V1GetInfo:input_type -> public_pb.V1GetInfoRequest
|
|||
1, // 1: public_pb.SeaweedFS.V1GetInfo:output_type -> public_pb.V1GetInfoResponse
|
|||
1, // [1:2] is the sub-list for method output_type
|
|||
0, // [0:1] is the sub-list for method input_type
|
|||
0, // [0:0] is the sub-list for extension type_name
|
|||
0, // [0:0] is the sub-list for extension extendee
|
|||
0, // [0:0] is the sub-list for field type_name
|
|||
} |
|||
|
|||
func init() { file_public_proto_init() } |
|||
func file_public_proto_init() { |
|||
if File_public_proto != nil { |
|||
return |
|||
} |
|||
if !protoimpl.UnsafeEnabled { |
|||
file_public_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { |
|||
switch v := v.(*V1GetInfoRequest); i { |
|||
case 0: |
|||
return &v.state |
|||
case 1: |
|||
return &v.sizeCache |
|||
case 2: |
|||
return &v.unknownFields |
|||
default: |
|||
return nil |
|||
} |
|||
} |
|||
file_public_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { |
|||
switch v := v.(*V1GetInfoResponse); i { |
|||
case 0: |
|||
return &v.state |
|||
case 1: |
|||
return &v.sizeCache |
|||
case 2: |
|||
return &v.unknownFields |
|||
default: |
|||
return nil |
|||
} |
|||
} |
|||
} |
|||
type x struct{} |
|||
out := protoimpl.TypeBuilder{ |
|||
File: protoimpl.DescBuilder{ |
|||
GoPackagePath: reflect.TypeOf(x{}).PkgPath(), |
|||
RawDescriptor: file_public_proto_rawDesc, |
|||
NumEnums: 0, |
|||
NumMessages: 2, |
|||
NumExtensions: 0, |
|||
NumServices: 1, |
|||
}, |
|||
GoTypes: file_public_proto_goTypes, |
|||
DependencyIndexes: file_public_proto_depIdxs, |
|||
MessageInfos: file_public_proto_msgTypes, |
|||
}.Build() |
|||
File_public_proto = out.File |
|||
file_public_proto_rawDesc = nil |
|||
file_public_proto_goTypes = nil |
|||
file_public_proto_depIdxs = nil |
|||
} |
@ -0,0 +1,105 @@ |
|||
// Code generated by protoc-gen-go-grpc. DO NOT EDIT.
|
|||
// versions:
|
|||
// - protoc-gen-go-grpc v1.2.0
|
|||
// - protoc v3.21.12
|
|||
// source: public.proto
|
|||
|
|||
package public_pb |
|||
|
|||
import ( |
|||
context "context" |
|||
grpc "google.golang.org/grpc" |
|||
codes "google.golang.org/grpc/codes" |
|||
status "google.golang.org/grpc/status" |
|||
) |
|||
|
|||
// This is a compile-time assertion to ensure that this generated file
|
|||
// is compatible with the grpc package it is being compiled against.
|
|||
// Requires gRPC-Go v1.32.0 or later.
|
|||
const _ = grpc.SupportPackageIsVersion7 |
|||
|
|||
// SeaweedFSClient is the client API for SeaweedFS service.
|
|||
//
|
|||
// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream.
|
|||
type SeaweedFSClient interface { |
|||
V1GetInfo(ctx context.Context, in *V1GetInfoRequest, opts ...grpc.CallOption) (*V1GetInfoResponse, error) |
|||
} |
|||
|
|||
type seaweedFSClient struct { |
|||
cc grpc.ClientConnInterface |
|||
} |
|||
|
|||
func NewSeaweedFSClient(cc grpc.ClientConnInterface) SeaweedFSClient { |
|||
return &seaweedFSClient{cc} |
|||
} |
|||
|
|||
func (c *seaweedFSClient) V1GetInfo(ctx context.Context, in *V1GetInfoRequest, opts ...grpc.CallOption) (*V1GetInfoResponse, error) { |
|||
out := new(V1GetInfoResponse) |
|||
err := c.cc.Invoke(ctx, "/public_pb.SeaweedFS/V1GetInfo", in, out, opts...) |
|||
if err != nil { |
|||
return nil, err |
|||
} |
|||
return out, nil |
|||
} |
|||
|
|||
// SeaweedFSServer is the server API for SeaweedFS service.
|
|||
// All implementations must embed UnimplementedSeaweedFSServer
|
|||
// for forward compatibility
|
|||
type SeaweedFSServer interface { |
|||
V1GetInfo(context.Context, *V1GetInfoRequest) (*V1GetInfoResponse, error) |
|||
mustEmbedUnimplementedSeaweedFSServer() |
|||
} |
|||
|
|||
// UnimplementedSeaweedFSServer must be embedded to have forward compatible implementations.
|
|||
type UnimplementedSeaweedFSServer struct { |
|||
} |
|||
|
|||
func (UnimplementedSeaweedFSServer) V1GetInfo(context.Context, *V1GetInfoRequest) (*V1GetInfoResponse, error) { |
|||
return nil, status.Errorf(codes.Unimplemented, "method V1GetInfo not implemented") |
|||
} |
|||
func (UnimplementedSeaweedFSServer) mustEmbedUnimplementedSeaweedFSServer() {} |
|||
|
|||
// UnsafeSeaweedFSServer may be embedded to opt out of forward compatibility for this service.
|
|||
// Use of this interface is not recommended, as added methods to SeaweedFSServer will
|
|||
// result in compilation errors.
|
|||
type UnsafeSeaweedFSServer interface { |
|||
mustEmbedUnimplementedSeaweedFSServer() |
|||
} |
|||
|
|||
func RegisterSeaweedFSServer(s grpc.ServiceRegistrar, srv SeaweedFSServer) { |
|||
s.RegisterService(&SeaweedFS_ServiceDesc, srv) |
|||
} |
|||
|
|||
func _SeaweedFS_V1GetInfo_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { |
|||
in := new(V1GetInfoRequest) |
|||
if err := dec(in); err != nil { |
|||
return nil, err |
|||
} |
|||
if interceptor == nil { |
|||
return srv.(SeaweedFSServer).V1GetInfo(ctx, in) |
|||
} |
|||
info := &grpc.UnaryServerInfo{ |
|||
Server: srv, |
|||
FullMethod: "/public_pb.SeaweedFS/V1GetInfo", |
|||
} |
|||
handler := func(ctx context.Context, req interface{}) (interface{}, error) { |
|||
return srv.(SeaweedFSServer).V1GetInfo(ctx, req.(*V1GetInfoRequest)) |
|||
} |
|||
return interceptor(ctx, in, info, handler) |
|||
} |
|||
|
|||
// SeaweedFS_ServiceDesc is the grpc.ServiceDesc for SeaweedFS service.
|
|||
// It's only intended for direct use with grpc.RegisterService,
|
|||
// and not to be introspected or modified (even as a copy)
|
|||
var SeaweedFS_ServiceDesc = grpc.ServiceDesc{ |
|||
ServiceName: "public_pb.SeaweedFS", |
|||
HandlerType: (*SeaweedFSServer)(nil), |
|||
Methods: []grpc.MethodDesc{ |
|||
{ |
|||
MethodName: "V1GetInfo", |
|||
Handler: _SeaweedFS_V1GetInfo_Handler, |
|||
}, |
|||
}, |
|||
Streams: []grpc.StreamDesc{}, |
|||
Metadata: "public.proto", |
|||
} |
Write
Preview
Loading…
Cancel
Save
Reference in new issue