diff --git a/internal/generated/snippets/storage/control/apiv2/StorageControlClient/CreateManagedFolder/main.go b/internal/generated/snippets/storage/control/apiv2/StorageControlClient/CreateManagedFolder/main.go new file mode 100644 index 000000000000..305ce24d928c --- /dev/null +++ b/internal/generated/snippets/storage/control/apiv2/StorageControlClient/CreateManagedFolder/main.go @@ -0,0 +1,53 @@ +// Copyright 2024 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 +// +// https://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. + +// Code generated by protoc-gen-go_gapic. DO NOT EDIT. + +// [START storage_v2_generated_StorageControl_CreateManagedFolder_sync] + +package main + +import ( + "context" + + control "cloud.google.com/go/storage/control/apiv2" + controlpb "cloud.google.com/go/storage/control/apiv2/controlpb" +) + +func main() { + ctx := context.Background() + // This snippet has been automatically generated and should be regarded as a code template only. + // It will require modifications to work: + // - It may require correct/in-range values for request initialization. + // - It may require specifying regional endpoints when creating the service client as shown in: + // https://pkg.go.dev/cloud.google.com/go#hdr-Client_Options + c, err := control.NewStorageControlClient(ctx) + if err != nil { + // TODO: Handle error. + } + defer c.Close() + + req := &controlpb.CreateManagedFolderRequest{ + // TODO: Fill request struct fields. + // See https://pkg.go.dev/cloud.google.com/go/storage/control/apiv2/controlpb#CreateManagedFolderRequest. + } + resp, err := c.CreateManagedFolder(ctx, req) + if err != nil { + // TODO: Handle error. + } + // TODO: Use resp. + _ = resp +} + +// [END storage_v2_generated_StorageControl_CreateManagedFolder_sync] diff --git a/internal/generated/snippets/storage/control/apiv2/StorageControlClient/DeleteManagedFolder/main.go b/internal/generated/snippets/storage/control/apiv2/StorageControlClient/DeleteManagedFolder/main.go new file mode 100644 index 000000000000..b89e5a64e04d --- /dev/null +++ b/internal/generated/snippets/storage/control/apiv2/StorageControlClient/DeleteManagedFolder/main.go @@ -0,0 +1,51 @@ +// Copyright 2024 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 +// +// https://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. + +// Code generated by protoc-gen-go_gapic. DO NOT EDIT. + +// [START storage_v2_generated_StorageControl_DeleteManagedFolder_sync] + +package main + +import ( + "context" + + control "cloud.google.com/go/storage/control/apiv2" + controlpb "cloud.google.com/go/storage/control/apiv2/controlpb" +) + +func main() { + ctx := context.Background() + // This snippet has been automatically generated and should be regarded as a code template only. + // It will require modifications to work: + // - It may require correct/in-range values for request initialization. + // - It may require specifying regional endpoints when creating the service client as shown in: + // https://pkg.go.dev/cloud.google.com/go#hdr-Client_Options + c, err := control.NewStorageControlClient(ctx) + if err != nil { + // TODO: Handle error. + } + defer c.Close() + + req := &controlpb.DeleteManagedFolderRequest{ + // TODO: Fill request struct fields. + // See https://pkg.go.dev/cloud.google.com/go/storage/control/apiv2/controlpb#DeleteManagedFolderRequest. + } + err = c.DeleteManagedFolder(ctx, req) + if err != nil { + // TODO: Handle error. + } +} + +// [END storage_v2_generated_StorageControl_DeleteManagedFolder_sync] diff --git a/internal/generated/snippets/storage/control/apiv2/StorageControlClient/GetManagedFolder/main.go b/internal/generated/snippets/storage/control/apiv2/StorageControlClient/GetManagedFolder/main.go new file mode 100644 index 000000000000..f9bfa34fdaad --- /dev/null +++ b/internal/generated/snippets/storage/control/apiv2/StorageControlClient/GetManagedFolder/main.go @@ -0,0 +1,53 @@ +// Copyright 2024 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 +// +// https://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. + +// Code generated by protoc-gen-go_gapic. DO NOT EDIT. + +// [START storage_v2_generated_StorageControl_GetManagedFolder_sync] + +package main + +import ( + "context" + + control "cloud.google.com/go/storage/control/apiv2" + controlpb "cloud.google.com/go/storage/control/apiv2/controlpb" +) + +func main() { + ctx := context.Background() + // This snippet has been automatically generated and should be regarded as a code template only. + // It will require modifications to work: + // - It may require correct/in-range values for request initialization. + // - It may require specifying regional endpoints when creating the service client as shown in: + // https://pkg.go.dev/cloud.google.com/go#hdr-Client_Options + c, err := control.NewStorageControlClient(ctx) + if err != nil { + // TODO: Handle error. + } + defer c.Close() + + req := &controlpb.GetManagedFolderRequest{ + // TODO: Fill request struct fields. + // See https://pkg.go.dev/cloud.google.com/go/storage/control/apiv2/controlpb#GetManagedFolderRequest. + } + resp, err := c.GetManagedFolder(ctx, req) + if err != nil { + // TODO: Handle error. + } + // TODO: Use resp. + _ = resp +} + +// [END storage_v2_generated_StorageControl_GetManagedFolder_sync] diff --git a/internal/generated/snippets/storage/control/apiv2/StorageControlClient/ListManagedFolders/main.go b/internal/generated/snippets/storage/control/apiv2/StorageControlClient/ListManagedFolders/main.go new file mode 100644 index 000000000000..2a3212c22eb5 --- /dev/null +++ b/internal/generated/snippets/storage/control/apiv2/StorageControlClient/ListManagedFolders/main.go @@ -0,0 +1,66 @@ +// Copyright 2024 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 +// +// https://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. + +// Code generated by protoc-gen-go_gapic. DO NOT EDIT. + +// [START storage_v2_generated_StorageControl_ListManagedFolders_sync] + +package main + +import ( + "context" + + control "cloud.google.com/go/storage/control/apiv2" + controlpb "cloud.google.com/go/storage/control/apiv2/controlpb" + "google.golang.org/api/iterator" +) + +func main() { + ctx := context.Background() + // This snippet has been automatically generated and should be regarded as a code template only. + // It will require modifications to work: + // - It may require correct/in-range values for request initialization. + // - It may require specifying regional endpoints when creating the service client as shown in: + // https://pkg.go.dev/cloud.google.com/go#hdr-Client_Options + c, err := control.NewStorageControlClient(ctx) + if err != nil { + // TODO: Handle error. + } + defer c.Close() + + req := &controlpb.ListManagedFoldersRequest{ + // TODO: Fill request struct fields. + // See https://pkg.go.dev/cloud.google.com/go/storage/control/apiv2/controlpb#ListManagedFoldersRequest. + } + it := c.ListManagedFolders(ctx, req) + for { + resp, err := it.Next() + if err == iterator.Done { + break + } + if err != nil { + // TODO: Handle error. + } + // TODO: Use resp. + _ = resp + + // If you need to access the underlying RPC response, + // you can do so by casting the `Response` as below. + // Otherwise, remove this line. Only populated after + // first call to Next(). Not safe for concurrent access. + _ = it.Response.(*controlpb.ListManagedFoldersResponse) + } +} + +// [END storage_v2_generated_StorageControl_ListManagedFolders_sync] diff --git a/internal/generated/snippets/storage/control/apiv2/snippet_metadata.google.storage.control.v2.json b/internal/generated/snippets/storage/control/apiv2/snippet_metadata.google.storage.control.v2.json index d59cbd57d2aa..0e2d88b732e2 100644 --- a/internal/generated/snippets/storage/control/apiv2/snippet_metadata.google.storage.control.v2.json +++ b/internal/generated/snippets/storage/control/apiv2/snippet_metadata.google.storage.control.v2.json @@ -1,7 +1,7 @@ { "clientLibrary": { "name": "cloud.google.com/go/storage/control/apiv2", - "version": "1.39.1", + "version": "1.40.0", "language": "GO", "apis": [ { @@ -57,6 +57,52 @@ } ] }, + { + "regionTag": "storage_v2_generated_StorageControl_CreateManagedFolder_sync", + "title": "storage CreateManagedFolder Sample", + "description": "CreateManagedFolder creates a new managed folder.", + "file": "StorageControlClient/CreateManagedFolder/main.go", + "language": "GO", + "clientMethod": { + "shortName": "CreateManagedFolder", + "fullName": "google.storage.control.v2.StorageControlClient.CreateManagedFolder", + "parameters": [ + { + "type": "context.Context", + "name": "ctx" + }, + { + "type": "controlpb.CreateManagedFolderRequest", + "name": "req" + }, + { + "type": "...gax.CallOption", + "name": "opts" + } + ], + "resultType": "*controlpb.ManagedFolder", + "client": { + "shortName": "StorageControlClient", + "fullName": "google.storage.control.v2.StorageControlClient" + }, + "method": { + "shortName": "CreateManagedFolder", + "fullName": "google.storage.control.v2.StorageControl.CreateManagedFolder", + "service": { + "shortName": "StorageControl", + "fullName": "google.storage.control.v2.StorageControl" + } + } + }, + "origin": "API_DEFINITION", + "segments": [ + { + "start": 18, + "end": 53, + "type": "FULL" + } + ] + }, { "regionTag": "storage_v2_generated_StorageControl_DeleteFolder_sync", "title": "storage DeleteFolder Sample", @@ -102,6 +148,51 @@ } ] }, + { + "regionTag": "storage_v2_generated_StorageControl_DeleteManagedFolder_sync", + "title": "storage DeleteManagedFolder Sample", + "description": "DeleteManagedFolder permanently deletes an empty managed folder.", + "file": "StorageControlClient/DeleteManagedFolder/main.go", + "language": "GO", + "clientMethod": { + "shortName": "DeleteManagedFolder", + "fullName": "google.storage.control.v2.StorageControlClient.DeleteManagedFolder", + "parameters": [ + { + "type": "context.Context", + "name": "ctx" + }, + { + "type": "controlpb.DeleteManagedFolderRequest", + "name": "req" + }, + { + "type": "...gax.CallOption", + "name": "opts" + } + ], + "client": { + "shortName": "StorageControlClient", + "fullName": "google.storage.control.v2.StorageControlClient" + }, + "method": { + "shortName": "DeleteManagedFolder", + "fullName": "google.storage.control.v2.StorageControl.DeleteManagedFolder", + "service": { + "shortName": "StorageControl", + "fullName": "google.storage.control.v2.StorageControl" + } + } + }, + "origin": "API_DEFINITION", + "segments": [ + { + "start": 18, + "end": 51, + "type": "FULL" + } + ] + }, { "regionTag": "storage_v2_generated_StorageControl_GetFolder_sync", "title": "storage GetFolder Sample", @@ -148,6 +239,52 @@ } ] }, + { + "regionTag": "storage_v2_generated_StorageControl_GetManagedFolder_sync", + "title": "storage GetManagedFolder Sample", + "description": "GetManagedFolder returns metadata for the specified managed folder.", + "file": "StorageControlClient/GetManagedFolder/main.go", + "language": "GO", + "clientMethod": { + "shortName": "GetManagedFolder", + "fullName": "google.storage.control.v2.StorageControlClient.GetManagedFolder", + "parameters": [ + { + "type": "context.Context", + "name": "ctx" + }, + { + "type": "controlpb.GetManagedFolderRequest", + "name": "req" + }, + { + "type": "...gax.CallOption", + "name": "opts" + } + ], + "resultType": "*controlpb.ManagedFolder", + "client": { + "shortName": "StorageControlClient", + "fullName": "google.storage.control.v2.StorageControlClient" + }, + "method": { + "shortName": "GetManagedFolder", + "fullName": "google.storage.control.v2.StorageControl.GetManagedFolder", + "service": { + "shortName": "StorageControl", + "fullName": "google.storage.control.v2.StorageControl" + } + } + }, + "origin": "API_DEFINITION", + "segments": [ + { + "start": 18, + "end": 53, + "type": "FULL" + } + ] + }, { "regionTag": "storage_v2_generated_StorageControl_GetStorageLayout_sync", "title": "storage GetStorageLayout Sample", @@ -240,6 +377,52 @@ } ] }, + { + "regionTag": "storage_v2_generated_StorageControl_ListManagedFolders_sync", + "title": "storage ListManagedFolders Sample", + "description": "ListManagedFolders retrieves a list of managed folders for a given bucket.", + "file": "StorageControlClient/ListManagedFolders/main.go", + "language": "GO", + "clientMethod": { + "shortName": "ListManagedFolders", + "fullName": "google.storage.control.v2.StorageControlClient.ListManagedFolders", + "parameters": [ + { + "type": "context.Context", + "name": "ctx" + }, + { + "type": "controlpb.ListManagedFoldersRequest", + "name": "req" + }, + { + "type": "...gax.CallOption", + "name": "opts" + } + ], + "resultType": "ManagedFolderIterator", + "client": { + "shortName": "StorageControlClient", + "fullName": "google.storage.control.v2.StorageControlClient" + }, + "method": { + "shortName": "ListManagedFolders", + "fullName": "google.storage.control.v2.StorageControl.ListManagedFolders", + "service": { + "shortName": "StorageControl", + "fullName": "google.storage.control.v2.StorageControl" + } + } + }, + "origin": "API_DEFINITION", + "segments": [ + { + "start": 18, + "end": 66, + "type": "FULL" + } + ] + }, { "regionTag": "storage_v2_generated_StorageControl_RenameFolder_sync", "title": "storage RenameFolder Sample", diff --git a/maps/places/apiv1/placespb/place.pb.go b/maps/places/apiv1/placespb/place.pb.go index c1f5f88e1f3a..b592bc5685e1 100755 --- a/maps/places/apiv1/placespb/place.pb.go +++ b/maps/places/apiv1/placespb/place.pb.go @@ -54,7 +54,7 @@ const ( PriceLevel_PRICE_LEVEL_MODERATE PriceLevel = 3 // Place provides expensive services. PriceLevel_PRICE_LEVEL_EXPENSIVE PriceLevel = 4 - // Place provides very expensive service s. + // Place provides very expensive services. PriceLevel_PRICE_LEVEL_VERY_EXPENSIVE PriceLevel = 5 ) @@ -327,7 +327,8 @@ type Place struct { // will usually be the website for the individual store, not the overall // chain. WebsiteUri string `protobuf:"bytes,16,opt,name=website_uri,json=websiteUri,proto3" json:"website_uri,omitempty"` - // List of reviews about this place, sorted by relevance. + // List of reviews about this place, sorted by relevance. A maximum of 5 + // reviews can be returned. Reviews []*Review `protobuf:"bytes,53,rep,name=reviews,proto3" json:"reviews,omitempty"` // The regular hours of operation. RegularOpeningHours *Place_OpeningHours `protobuf:"bytes,21,opt,name=regular_opening_hours,json=regularOpeningHours,proto3" json:"regular_opening_hours,omitempty"` @@ -335,7 +336,8 @@ type Place struct { // This is expressed in minutes to support timezones that are offset by // fractions of an hour, e.g. X hours and 15 minutes. UtcOffsetMinutes *int32 `protobuf:"varint,22,opt,name=utc_offset_minutes,json=utcOffsetMinutes,proto3,oneof" json:"utc_offset_minutes,omitempty"` - // Information (including references) about photos of this place. + // Information (including references) about photos of this place. A maximum of + // 10 photos can be returned. Photos []*Photo `protobuf:"bytes,54,rep,name=photos,proto3" json:"photos,omitempty"` // The place's address in adr microformat: http://microformats.org/wiki/adr. AdrFormatAddress string `protobuf:"bytes,24,opt,name=adr_format_address,json=adrFormatAddress,proto3" json:"adr_format_address,omitempty"` diff --git a/maps/places/apiv1/placespb/places_service.pb.go b/maps/places/apiv1/placespb/places_service.pb.go index 08658d3d3763..162fdce64a7d 100755 --- a/maps/places/apiv1/placespb/places_service.pb.go +++ b/maps/places/apiv1/placespb/places_service.pb.go @@ -828,21 +828,23 @@ type GetPlaceRequest struct { // // Note that 3-digit region codes are not currently supported. RegionCode string `protobuf:"bytes,3,opt,name=region_code,json=regionCode,proto3" json:"region_code,omitempty"` - // Optional. An arbitrary string which identifies an autocomplete session for - // billing purposes. Must be at most 36 characters in length. Otherwise an - // INVALID_ARGUMENT error is returned. + // Optional. A string which identifies an Autocomplete session for billing + // purposes. Must be a URL and filename safe base64 string with at most 36 + // ASCII characters in length. Otherwise an INVALID_ARGUMENT error is + // returned. // // The session begins when the user starts typing a query, and concludes when // they select a place and a call to Place Details or Address Validation is - // made. Each session can have multiple queries, followed by one Place - // selection. The credentials used for each request within a session must - // belong to the same Google Cloud Console project. Once a session has - // concluded, the token is no longer valid; your app must generate a fresh - // token for each session. If the `session_token` parameter is omitted, or if - // you reuse a session token, the session is charged as if no session token - // was provided (each request is billed separately). + // made. Each session can have multiple queries, followed by one Place Details + // or Address Validation request. The credentials used for each request within + // a session must belong to the same Google Cloud Console project. Once a + // session has concluded, the token is no longer valid; your app must generate + // a fresh token for each session. If the `session_token` parameter is + // omitted, or if you reuse a session token, the session is charged as if no + // session token was provided (each request is billed separately). // // We recommend the following guidelines: + // // - Use session tokens for all Place Autocomplete calls. // - Generate a fresh token for each session. Using a version 4 UUID is // recommended. @@ -937,8 +939,8 @@ type AutocompletePlacesRequest struct { // address will be mapped to an imprecise location and used as a biasing // signal. LocationRestriction *AutocompletePlacesRequest_LocationRestriction `protobuf:"bytes,3,opt,name=location_restriction,json=locationRestriction,proto3" json:"location_restriction,omitempty"` - // Optional. Included primary Place type (e.g. "restaurant" or "gas_station") - // from + // Optional. Included primary Place type (for example, "restaurant" or + // "gas_station") from // https://developers.google.com/maps/documentation/places/web-service/place-types. // A Place is only returned if its primary type is included in this list. Up // to 5 values can be specified. If no types are specified, all Place types @@ -972,21 +974,23 @@ type AutocompletePlacesRequest struct { // Optional. If true, the response will include both Place and query // predictions. Otherwise the response will only return Place predictions. IncludeQueryPredictions bool `protobuf:"varint,10,opt,name=include_query_predictions,json=includeQueryPredictions,proto3" json:"include_query_predictions,omitempty"` - // Optional. An arbitrary string which identifies an autocomplete session for - // billing purposes. Must be at most 36 characters in length. Otherwise an - // INVALID_ARGUMENT error is returned. + // Optional. A string which identifies an Autocomplete session for billing + // purposes. Must be a URL and filename safe base64 string with at most 36 + // ASCII characters in length. Otherwise an INVALID_ARGUMENT error is + // returned. // // The session begins when the user starts typing a query, and concludes when // they select a place and a call to Place Details or Address Validation is - // made. Each session can have multiple queries, followed by one Place - // selection. The credentials used for each request within a session must - // belong to the same Google Cloud Console project. Once a session has - // concluded, the token is no longer valid; your app must generate a fresh - // token for each session. If the `session_token` parameter is omitted, or if - // you reuse a session token, the session is charged as if no session token - // was provided (each request is billed separately). + // made. Each session can have multiple queries, followed by one Place Details + // or Address Validation request. The credentials used for each request within + // a session must belong to the same Google Cloud Console project. Once a + // session has concluded, the token is no longer valid; your app must generate + // a fresh token for each session. If the `session_token` parameter is + // omitted, or if you reuse a session token, the session is charged as if no + // session token was provided (each request is billed separately). // // We recommend the following guidelines: + // // - Use session tokens for all Place Autocomplete calls. // - Generate a fresh token for each session. Using a version 4 UUID is // recommended. @@ -1784,7 +1788,7 @@ type AutocompletePlacesResponse_Suggestion_FormattableText struct { // A list of string ranges identifying where the input request matched in // `text`. The ranges can be used to format specific parts of `text`. The // substrings may not be exact matches of `input` if the matching was - // determined by criteria other than string matching (e.g. spell + // determined by criteria other than string matching (for example, spell // corrections or transliterations). // // These values are Unicode character offsets of `text`. The ranges are @@ -2035,7 +2039,8 @@ type AutocompletePlacesResponse_Suggestion_QueryPrediction struct { unknownFields protoimpl.UnknownFields // The predicted text. This text does not represent a Place, but rather a - // text query that could be used in a search endpoint (e.g. TextSearch). + // text query that could be used in a search endpoint (for example, + // TextSearch). // // `text` is recommended for developers who wish to show a single UI // element. Developers who wish to show two separate, but related, UI diff --git a/storage/control/apiv2/auxiliary.go b/storage/control/apiv2/auxiliary.go index d7324be1058e..f25441d0500e 100755 --- a/storage/control/apiv2/auxiliary.go +++ b/storage/control/apiv2/auxiliary.go @@ -133,3 +133,50 @@ func (it *FolderIterator) takeBuf() interface{} { it.items = nil return b } + +// ManagedFolderIterator manages a stream of *controlpb.ManagedFolder. +type ManagedFolderIterator struct { + items []*controlpb.ManagedFolder + pageInfo *iterator.PageInfo + nextFunc func() error + + // Response is the raw response for the current page. + // It must be cast to the RPC response type. + // Calling Next() or InternalFetch() updates this value. + Response interface{} + + // InternalFetch is for use by the Google Cloud Libraries only. + // It is not part of the stable interface of this package. + // + // InternalFetch returns results from a single call to the underlying RPC. + // The number of results is no greater than pageSize. + // If there are no more results, nextPageToken is empty and err is nil. + InternalFetch func(pageSize int, pageToken string) (results []*controlpb.ManagedFolder, nextPageToken string, err error) +} + +// PageInfo supports pagination. See the google.golang.org/api/iterator package for details. +func (it *ManagedFolderIterator) PageInfo() *iterator.PageInfo { + return it.pageInfo +} + +// Next returns the next result. Its second return value is iterator.Done if there are no more +// results. Once Next returns Done, all subsequent calls will return Done. +func (it *ManagedFolderIterator) Next() (*controlpb.ManagedFolder, error) { + var item *controlpb.ManagedFolder + if err := it.nextFunc(); err != nil { + return item, err + } + item = it.items[0] + it.items = it.items[1:] + return item, nil +} + +func (it *ManagedFolderIterator) bufLen() int { + return len(it.items) +} + +func (it *ManagedFolderIterator) takeBuf() interface{} { + b := it.items + it.items = nil + return b +} diff --git a/storage/control/apiv2/controlpb/storage_control.pb.go b/storage/control/apiv2/controlpb/storage_control.pb.go index 6e528dea7b0b..b0c1489a4394 100755 --- a/storage/control/apiv2/controlpb/storage_control.pb.go +++ b/storage/control/apiv2/controlpb/storage_control.pb.go @@ -276,7 +276,11 @@ type CreateFolderRequest struct { // fields, respectively. Populating those fields in `folder` will result in an // error. Folder *Folder `protobuf:"bytes,2,opt,name=folder,proto3" json:"folder,omitempty"` - // Required. The absolute path of the folder, using a single `/` as delimiter. + // Required. The full name of a folder, including all its parent folders. + // Folders use single '/' characters as a delimiter. + // The folder_id must end with a slash. + // For example, the folder_id of "books/biographies/" would create a new + // "biographies/" folder under the "books/" folder. FolderId string `protobuf:"bytes,3,opt,name=folder_id,json=folderId,proto3" json:"folder_id,omitempty"` // Optional. If true, parent folder doesn't have to be present and all missing // ancestor folders will be created atomically. @@ -1032,6 +1036,489 @@ func (x *GetStorageLayoutRequest) GetRequestId() string { return "" } +// A managed folder. +type ManagedFolder struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Identifier. The name of this managed folder. + // Format: + // `projects/{project}/buckets/{bucket}/managedFolders/{managedFolder}` + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + // Output only. The metadata version of this managed folder. It increases + // whenever the metadata is updated. Used for preconditions and for detecting + // changes in metadata. Managed folders don't have a generation number. + Metageneration int64 `protobuf:"varint,3,opt,name=metageneration,proto3" json:"metageneration,omitempty"` + // Output only. The creation time of the managed folder. + CreateTime *timestamppb.Timestamp `protobuf:"bytes,4,opt,name=create_time,json=createTime,proto3" json:"create_time,omitempty"` + // Output only. The modification time of the managed folder. + UpdateTime *timestamppb.Timestamp `protobuf:"bytes,5,opt,name=update_time,json=updateTime,proto3" json:"update_time,omitempty"` +} + +func (x *ManagedFolder) Reset() { + *x = ManagedFolder{} + if protoimpl.UnsafeEnabled { + mi := &file_google_storage_control_v2_storage_control_proto_msgTypes[12] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ManagedFolder) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ManagedFolder) ProtoMessage() {} + +func (x *ManagedFolder) ProtoReflect() protoreflect.Message { + mi := &file_google_storage_control_v2_storage_control_proto_msgTypes[12] + 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 ManagedFolder.ProtoReflect.Descriptor instead. +func (*ManagedFolder) Descriptor() ([]byte, []int) { + return file_google_storage_control_v2_storage_control_proto_rawDescGZIP(), []int{12} +} + +func (x *ManagedFolder) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *ManagedFolder) GetMetageneration() int64 { + if x != nil { + return x.Metageneration + } + return 0 +} + +func (x *ManagedFolder) GetCreateTime() *timestamppb.Timestamp { + if x != nil { + return x.CreateTime + } + return nil +} + +func (x *ManagedFolder) GetUpdateTime() *timestamppb.Timestamp { + if x != nil { + return x.UpdateTime + } + return nil +} + +// Request message for GetManagedFolder. +type GetManagedFolderRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Required. Name of the managed folder. + // Format: + // `projects/{project}/buckets/{bucket}/managedFolders/{managedFolder}` + Name string `protobuf:"bytes,6,opt,name=name,proto3" json:"name,omitempty"` + // The operation succeeds conditional on the managed folder's current + // metageneration matching the value here specified. + IfMetagenerationMatch *int64 `protobuf:"varint,3,opt,name=if_metageneration_match,json=ifMetagenerationMatch,proto3,oneof" json:"if_metageneration_match,omitempty"` + // The operation succeeds conditional on the managed folder's current + // metageneration NOT matching the value here specified. + IfMetagenerationNotMatch *int64 `protobuf:"varint,4,opt,name=if_metageneration_not_match,json=ifMetagenerationNotMatch,proto3,oneof" json:"if_metageneration_not_match,omitempty"` + // Optional. A unique identifier for this request. UUID is the recommended + // format, but other formats are still accepted. + RequestId string `protobuf:"bytes,5,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` +} + +func (x *GetManagedFolderRequest) Reset() { + *x = GetManagedFolderRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_google_storage_control_v2_storage_control_proto_msgTypes[13] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetManagedFolderRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetManagedFolderRequest) ProtoMessage() {} + +func (x *GetManagedFolderRequest) ProtoReflect() protoreflect.Message { + mi := &file_google_storage_control_v2_storage_control_proto_msgTypes[13] + 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 GetManagedFolderRequest.ProtoReflect.Descriptor instead. +func (*GetManagedFolderRequest) Descriptor() ([]byte, []int) { + return file_google_storage_control_v2_storage_control_proto_rawDescGZIP(), []int{13} +} + +func (x *GetManagedFolderRequest) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *GetManagedFolderRequest) GetIfMetagenerationMatch() int64 { + if x != nil && x.IfMetagenerationMatch != nil { + return *x.IfMetagenerationMatch + } + return 0 +} + +func (x *GetManagedFolderRequest) GetIfMetagenerationNotMatch() int64 { + if x != nil && x.IfMetagenerationNotMatch != nil { + return *x.IfMetagenerationNotMatch + } + return 0 +} + +func (x *GetManagedFolderRequest) GetRequestId() string { + if x != nil { + return x.RequestId + } + return "" +} + +// Request message for CreateManagedFolder. +type CreateManagedFolderRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Required. Name of the bucket this managed folder belongs to. + Parent string `protobuf:"bytes,1,opt,name=parent,proto3" json:"parent,omitempty"` + // Required. Properties of the managed folder being created. + // The bucket and managed folder names are specified in the `parent` and + // `managed_folder_id` fields. Populating these fields in `managed_folder` + // will result in an error. + ManagedFolder *ManagedFolder `protobuf:"bytes,2,opt,name=managed_folder,json=managedFolder,proto3" json:"managed_folder,omitempty"` + // Required. The name of the managed folder. It uses a single `/` as delimiter + // and leading and trailing `/` are allowed. + ManagedFolderId string `protobuf:"bytes,3,opt,name=managed_folder_id,json=managedFolderId,proto3" json:"managed_folder_id,omitempty"` + // Optional. A unique identifier for this request. UUID is the recommended + // format, but other formats are still accepted. + RequestId string `protobuf:"bytes,4,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` +} + +func (x *CreateManagedFolderRequest) Reset() { + *x = CreateManagedFolderRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_google_storage_control_v2_storage_control_proto_msgTypes[14] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *CreateManagedFolderRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CreateManagedFolderRequest) ProtoMessage() {} + +func (x *CreateManagedFolderRequest) ProtoReflect() protoreflect.Message { + mi := &file_google_storage_control_v2_storage_control_proto_msgTypes[14] + 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 CreateManagedFolderRequest.ProtoReflect.Descriptor instead. +func (*CreateManagedFolderRequest) Descriptor() ([]byte, []int) { + return file_google_storage_control_v2_storage_control_proto_rawDescGZIP(), []int{14} +} + +func (x *CreateManagedFolderRequest) GetParent() string { + if x != nil { + return x.Parent + } + return "" +} + +func (x *CreateManagedFolderRequest) GetManagedFolder() *ManagedFolder { + if x != nil { + return x.ManagedFolder + } + return nil +} + +func (x *CreateManagedFolderRequest) GetManagedFolderId() string { + if x != nil { + return x.ManagedFolderId + } + return "" +} + +func (x *CreateManagedFolderRequest) GetRequestId() string { + if x != nil { + return x.RequestId + } + return "" +} + +// DeleteManagedFolder RPC request message. +type DeleteManagedFolderRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Required. Name of the managed folder. + // Format: + // `projects/{project}/buckets/{bucket}/managedFolders/{managedFolder}` + Name string `protobuf:"bytes,7,opt,name=name,proto3" json:"name,omitempty"` + // The operation succeeds conditional on the managed folder's current + // metageneration matching the value here specified. + IfMetagenerationMatch *int64 `protobuf:"varint,3,opt,name=if_metageneration_match,json=ifMetagenerationMatch,proto3,oneof" json:"if_metageneration_match,omitempty"` + // The operation succeeds conditional on the managed folder's current + // metageneration NOT matching the value here specified. + IfMetagenerationNotMatch *int64 `protobuf:"varint,4,opt,name=if_metageneration_not_match,json=ifMetagenerationNotMatch,proto3,oneof" json:"if_metageneration_not_match,omitempty"` + // Allows deletion of a managed folder even if it is not empty. + // A managed folder is empty if it manages no child managed folders or + // objects. Caller must have permission for + // storage.managedFolders.setIamPolicy. + AllowNonEmpty bool `protobuf:"varint,5,opt,name=allow_non_empty,json=allowNonEmpty,proto3" json:"allow_non_empty,omitempty"` + // Optional. A unique identifier for this request. UUID is the recommended + // format, but other formats are still accepted. + RequestId string `protobuf:"bytes,6,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` +} + +func (x *DeleteManagedFolderRequest) Reset() { + *x = DeleteManagedFolderRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_google_storage_control_v2_storage_control_proto_msgTypes[15] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *DeleteManagedFolderRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DeleteManagedFolderRequest) ProtoMessage() {} + +func (x *DeleteManagedFolderRequest) ProtoReflect() protoreflect.Message { + mi := &file_google_storage_control_v2_storage_control_proto_msgTypes[15] + 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 DeleteManagedFolderRequest.ProtoReflect.Descriptor instead. +func (*DeleteManagedFolderRequest) Descriptor() ([]byte, []int) { + return file_google_storage_control_v2_storage_control_proto_rawDescGZIP(), []int{15} +} + +func (x *DeleteManagedFolderRequest) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *DeleteManagedFolderRequest) GetIfMetagenerationMatch() int64 { + if x != nil && x.IfMetagenerationMatch != nil { + return *x.IfMetagenerationMatch + } + return 0 +} + +func (x *DeleteManagedFolderRequest) GetIfMetagenerationNotMatch() int64 { + if x != nil && x.IfMetagenerationNotMatch != nil { + return *x.IfMetagenerationNotMatch + } + return 0 +} + +func (x *DeleteManagedFolderRequest) GetAllowNonEmpty() bool { + if x != nil { + return x.AllowNonEmpty + } + return false +} + +func (x *DeleteManagedFolderRequest) GetRequestId() string { + if x != nil { + return x.RequestId + } + return "" +} + +// Request message for ListManagedFolders. +type ListManagedFoldersRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Required. Name of the bucket this managed folder belongs to. + Parent string `protobuf:"bytes,1,opt,name=parent,proto3" json:"parent,omitempty"` + // Optional. Maximum number of managed folders to return in a single response. + // The service will use this parameter or 1,000 items, whichever is smaller. + PageSize int32 `protobuf:"varint,2,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"` + // Optional. A previously-returned page token representing part of the larger + // set of results to view. + PageToken string `protobuf:"bytes,3,opt,name=page_token,json=pageToken,proto3" json:"page_token,omitempty"` + // Optional. Filter results to match managed folders with name starting with + // this prefix. + Prefix string `protobuf:"bytes,4,opt,name=prefix,proto3" json:"prefix,omitempty"` + // Optional. A unique identifier for this request. UUID is the recommended + // format, but other formats are still accepted. + RequestId string `protobuf:"bytes,5,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` +} + +func (x *ListManagedFoldersRequest) Reset() { + *x = ListManagedFoldersRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_google_storage_control_v2_storage_control_proto_msgTypes[16] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ListManagedFoldersRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ListManagedFoldersRequest) ProtoMessage() {} + +func (x *ListManagedFoldersRequest) ProtoReflect() protoreflect.Message { + mi := &file_google_storage_control_v2_storage_control_proto_msgTypes[16] + 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 ListManagedFoldersRequest.ProtoReflect.Descriptor instead. +func (*ListManagedFoldersRequest) Descriptor() ([]byte, []int) { + return file_google_storage_control_v2_storage_control_proto_rawDescGZIP(), []int{16} +} + +func (x *ListManagedFoldersRequest) GetParent() string { + if x != nil { + return x.Parent + } + return "" +} + +func (x *ListManagedFoldersRequest) GetPageSize() int32 { + if x != nil { + return x.PageSize + } + return 0 +} + +func (x *ListManagedFoldersRequest) GetPageToken() string { + if x != nil { + return x.PageToken + } + return "" +} + +func (x *ListManagedFoldersRequest) GetPrefix() string { + if x != nil { + return x.Prefix + } + return "" +} + +func (x *ListManagedFoldersRequest) GetRequestId() string { + if x != nil { + return x.RequestId + } + return "" +} + +// Response message for ListManagedFolders. +type ListManagedFoldersResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The list of matching managed folders + ManagedFolders []*ManagedFolder `protobuf:"bytes,1,rep,name=managed_folders,json=managedFolders,proto3" json:"managed_folders,omitempty"` + // The continuation token, used to page through large result sets. Provide + // this value in a subsequent request to return the next page of results. + NextPageToken string `protobuf:"bytes,2,opt,name=next_page_token,json=nextPageToken,proto3" json:"next_page_token,omitempty"` +} + +func (x *ListManagedFoldersResponse) Reset() { + *x = ListManagedFoldersResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_google_storage_control_v2_storage_control_proto_msgTypes[17] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ListManagedFoldersResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ListManagedFoldersResponse) ProtoMessage() {} + +func (x *ListManagedFoldersResponse) ProtoReflect() protoreflect.Message { + mi := &file_google_storage_control_v2_storage_control_proto_msgTypes[17] + 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 ListManagedFoldersResponse.ProtoReflect.Descriptor instead. +func (*ListManagedFoldersResponse) Descriptor() ([]byte, []int) { + return file_google_storage_control_v2_storage_control_proto_rawDescGZIP(), []int{17} +} + +func (x *ListManagedFoldersResponse) GetManagedFolders() []*ManagedFolder { + if x != nil { + return x.ManagedFolders + } + return nil +} + +func (x *ListManagedFoldersResponse) GetNextPageToken() string { + if x != nil { + return x.NextPageToken + } + return "" +} + // Configuration for Custom Dual Regions. It should specify precisely two // eligible regions within the same Multiregion. More information on regions // may be found [https://cloud.google.com/storage/docs/locations][here]. @@ -1047,7 +1534,7 @@ type StorageLayout_CustomPlacementConfig struct { func (x *StorageLayout_CustomPlacementConfig) Reset() { *x = StorageLayout_CustomPlacementConfig{} if protoimpl.UnsafeEnabled { - mi := &file_google_storage_control_v2_storage_control_proto_msgTypes[12] + mi := &file_google_storage_control_v2_storage_control_proto_msgTypes[18] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1060,7 +1547,7 @@ func (x *StorageLayout_CustomPlacementConfig) String() string { func (*StorageLayout_CustomPlacementConfig) ProtoMessage() {} func (x *StorageLayout_CustomPlacementConfig) ProtoReflect() protoreflect.Message { - mi := &file_google_storage_control_v2_storage_control_proto_msgTypes[12] + mi := &file_google_storage_control_v2_storage_control_proto_msgTypes[18] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1096,7 +1583,7 @@ type StorageLayout_HierarchicalNamespace struct { func (x *StorageLayout_HierarchicalNamespace) Reset() { *x = StorageLayout_HierarchicalNamespace{} if protoimpl.UnsafeEnabled { - mi := &file_google_storage_control_v2_storage_control_proto_msgTypes[13] + mi := &file_google_storage_control_v2_storage_control_proto_msgTypes[19] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1109,7 +1596,7 @@ func (x *StorageLayout_HierarchicalNamespace) String() string { func (*StorageLayout_HierarchicalNamespace) ProtoMessage() {} func (x *StorageLayout_HierarchicalNamespace) ProtoReflect() protoreflect.Message { - mi := &file_google_storage_control_v2_storage_control_proto_msgTypes[13] + mi := &file_google_storage_control_v2_storage_control_proto_msgTypes[19] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1377,107 +1864,260 @@ var file_google_storage_control_v2_storage_control_proto_rawDesc = []byte{ 0x52, 0x06, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x12, 0x2a, 0x0a, 0x0a, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0b, 0xe0, 0x41, 0x01, 0xe2, 0x8c, 0xcf, 0xd7, 0x08, 0x02, 0x08, 0x01, 0x52, 0x09, 0x72, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x49, 0x64, 0x32, 0x93, 0x0a, 0x0a, 0x0e, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, - 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x12, 0x9a, 0x01, 0x0a, 0x0c, 0x43, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x46, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x12, 0x2e, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, - 0x6c, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x46, 0x6f, 0x6c, 0x64, 0x65, - 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, - 0x6c, 0x2e, 0x76, 0x32, 0x2e, 0x46, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x22, 0x37, 0xda, 0x41, 0x17, - 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x2c, 0x66, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x2c, 0x66, 0x6f, - 0x6c, 0x64, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x8a, 0xd3, 0xe4, 0x93, 0x02, 0x17, 0x12, 0x15, 0x0a, - 0x06, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x12, 0x0b, 0x7b, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, - 0x3d, 0x2a, 0x2a, 0x7d, 0x12, 0x8f, 0x01, 0x0a, 0x0c, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x46, + 0x73, 0x74, 0x49, 0x64, 0x22, 0xec, 0x02, 0x0a, 0x0d, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x64, + 0x46, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x12, 0x17, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x08, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, + 0x2b, 0x0a, 0x0e, 0x6d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x42, 0x03, 0xe0, 0x41, 0x03, 0x52, 0x0e, 0x6d, 0x65, + 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x40, 0x0a, 0x0b, + 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x03, 0xe0, + 0x41, 0x03, 0x52, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x40, + 0x0a, 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x05, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, + 0x03, 0xe0, 0x41, 0x03, 0x52, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, + 0x3a, 0x90, 0x01, 0xea, 0x41, 0x8c, 0x01, 0x0a, 0x24, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, + 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x64, 0x46, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x12, 0x45, 0x70, + 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, + 0x7d, 0x2f, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x2f, 0x7b, 0x62, 0x75, 0x63, 0x6b, 0x65, + 0x74, 0x7d, 0x2f, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x64, 0x46, 0x6f, 0x6c, 0x64, 0x65, 0x72, + 0x73, 0x2f, 0x7b, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x64, 0x46, 0x6f, 0x6c, 0x64, 0x65, 0x72, + 0x3d, 0x2a, 0x2a, 0x7d, 0x2a, 0x0e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x64, 0x46, 0x6f, 0x6c, + 0x64, 0x65, 0x72, 0x73, 0x32, 0x0d, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x64, 0x46, 0x6f, 0x6c, + 0x64, 0x65, 0x72, 0x22, 0xc4, 0x02, 0x0a, 0x17, 0x47, 0x65, 0x74, 0x4d, 0x61, 0x6e, 0x61, 0x67, + 0x65, 0x64, 0x46, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, + 0x40, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x42, 0x2c, 0xe0, + 0x41, 0x02, 0xfa, 0x41, 0x26, 0x0a, 0x24, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x4d, 0x61, + 0x6e, 0x61, 0x67, 0x65, 0x64, 0x46, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x52, 0x04, 0x6e, 0x61, 0x6d, + 0x65, 0x12, 0x3b, 0x0a, 0x17, 0x69, 0x66, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, + 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x03, 0x48, 0x00, 0x52, 0x15, 0x69, 0x66, 0x4d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, + 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x88, 0x01, 0x01, 0x12, 0x42, + 0x0a, 0x1b, 0x69, 0x66, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x6f, 0x74, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x03, 0x48, 0x01, 0x52, 0x18, 0x69, 0x66, 0x4d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, + 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x6f, 0x74, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x88, + 0x01, 0x01, 0x12, 0x2a, 0x0a, 0x0a, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x69, 0x64, + 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0b, 0xe0, 0x41, 0x01, 0xe2, 0x8c, 0xcf, 0xd7, 0x08, + 0x02, 0x08, 0x01, 0x52, 0x09, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x64, 0x42, 0x1a, + 0x0a, 0x18, 0x5f, 0x69, 0x66, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x42, 0x1e, 0x0a, 0x1c, 0x5f, 0x69, + 0x66, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x5f, 0x6e, 0x6f, 0x74, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x22, 0x95, 0x02, 0x0a, 0x1a, 0x43, + 0x72, 0x65, 0x61, 0x74, 0x65, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x64, 0x46, 0x6f, 0x6c, 0x64, + 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x44, 0x0a, 0x06, 0x70, 0x61, 0x72, + 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x2c, 0xe0, 0x41, 0x02, 0xfa, 0x41, + 0x26, 0x12, 0x24, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, + 0x64, 0x46, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x52, 0x06, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x12, + 0x54, 0x0a, 0x0e, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x64, 0x5f, 0x66, 0x6f, 0x6c, 0x64, 0x65, + 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, + 0x2e, 0x76, 0x32, 0x2e, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x64, 0x46, 0x6f, 0x6c, 0x64, 0x65, + 0x72, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x0d, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x64, 0x46, + 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x12, 0x2f, 0x0a, 0x11, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x64, + 0x5f, 0x66, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, + 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x0f, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x64, 0x46, 0x6f, + 0x6c, 0x64, 0x65, 0x72, 0x49, 0x64, 0x12, 0x2a, 0x0a, 0x0a, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0b, 0xe0, 0x41, 0x01, 0xe2, + 0x8c, 0xcf, 0xd7, 0x08, 0x02, 0x08, 0x01, 0x52, 0x09, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x49, 0x64, 0x22, 0xef, 0x02, 0x0a, 0x1a, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4d, 0x61, 0x6e, + 0x61, 0x67, 0x65, 0x64, 0x46, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x40, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x42, + 0x2c, 0xe0, 0x41, 0x02, 0xfa, 0x41, 0x26, 0x0a, 0x24, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, + 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x64, 0x46, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x52, 0x04, 0x6e, + 0x61, 0x6d, 0x65, 0x12, 0x3b, 0x0a, 0x17, 0x69, 0x66, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x67, 0x65, + 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x03, 0x48, 0x00, 0x52, 0x15, 0x69, 0x66, 0x4d, 0x65, 0x74, 0x61, 0x67, 0x65, + 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x88, 0x01, 0x01, + 0x12, 0x42, 0x0a, 0x1b, 0x69, 0x66, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x6f, 0x74, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x03, 0x48, 0x01, 0x52, 0x18, 0x69, 0x66, 0x4d, 0x65, 0x74, 0x61, 0x67, + 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x6f, 0x74, 0x4d, 0x61, 0x74, 0x63, + 0x68, 0x88, 0x01, 0x01, 0x12, 0x26, 0x0a, 0x0f, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x6e, 0x6f, + 0x6e, 0x5f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x61, + 0x6c, 0x6c, 0x6f, 0x77, 0x4e, 0x6f, 0x6e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x2a, 0x0a, 0x0a, + 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, + 0x42, 0x0b, 0xe0, 0x41, 0x01, 0xe2, 0x8c, 0xcf, 0xd7, 0x08, 0x02, 0x08, 0x01, 0x52, 0x09, 0x72, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x64, 0x42, 0x1a, 0x0a, 0x18, 0x5f, 0x69, 0x66, 0x5f, + 0x6d, 0x65, 0x74, 0x61, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, + 0x61, 0x74, 0x63, 0x68, 0x42, 0x1e, 0x0a, 0x1c, 0x5f, 0x69, 0x66, 0x5f, 0x6d, 0x65, 0x74, 0x61, + 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x6f, 0x74, 0x5f, 0x6d, + 0x61, 0x74, 0x63, 0x68, 0x22, 0xf0, 0x01, 0x0a, 0x19, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x61, 0x6e, + 0x61, 0x67, 0x65, 0x64, 0x46, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x44, 0x0a, 0x06, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x42, 0x2c, 0xe0, 0x41, 0x02, 0xfa, 0x41, 0x26, 0x12, 0x24, 0x73, 0x74, 0x6f, 0x72, + 0x61, 0x67, 0x65, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, + 0x6f, 0x6d, 0x2f, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x64, 0x46, 0x6f, 0x6c, 0x64, 0x65, 0x72, + 0x52, 0x06, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x12, 0x20, 0x0a, 0x09, 0x70, 0x61, 0x67, 0x65, + 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x42, 0x03, 0xe0, 0x41, 0x01, + 0x52, 0x08, 0x70, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x22, 0x0a, 0x0a, 0x70, 0x61, + 0x67, 0x65, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, + 0xe0, 0x41, 0x01, 0x52, 0x09, 0x70, 0x61, 0x67, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x1b, + 0x0a, 0x06, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, + 0xe0, 0x41, 0x01, 0x52, 0x06, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x12, 0x2a, 0x0a, 0x0a, 0x72, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x42, + 0x0b, 0xe0, 0x41, 0x01, 0xe2, 0x8c, 0xcf, 0xd7, 0x08, 0x02, 0x08, 0x01, 0x52, 0x09, 0x72, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x64, 0x22, 0x97, 0x01, 0x0a, 0x1a, 0x4c, 0x69, 0x73, 0x74, + 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x64, 0x46, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x73, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x51, 0x0a, 0x0f, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, + 0x64, 0x5f, 0x66, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x28, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, + 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x76, 0x32, 0x2e, 0x4d, 0x61, 0x6e, 0x61, + 0x67, 0x65, 0x64, 0x46, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x52, 0x0e, 0x6d, 0x61, 0x6e, 0x61, 0x67, + 0x65, 0x64, 0x46, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x73, 0x12, 0x26, 0x0a, 0x0f, 0x6e, 0x65, 0x78, + 0x74, 0x5f, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x0d, 0x6e, 0x65, 0x78, 0x74, 0x50, 0x61, 0x67, 0x65, 0x54, 0x6f, 0x6b, 0x65, + 0x6e, 0x32, 0xcd, 0x0f, 0x0a, 0x0e, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, + 0x74, 0x72, 0x6f, 0x6c, 0x12, 0x9a, 0x01, 0x0a, 0x0c, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x46, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x12, 0x2e, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x76, - 0x32, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x46, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x37, 0xda, - 0x41, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x8a, 0xd3, 0xe4, 0x93, 0x02, 0x2a, 0x12, 0x28, 0x0a, 0x04, - 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x7b, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x3d, 0x70, 0x72, - 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x2a, 0x2f, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x73, - 0x2f, 0x2a, 0x7d, 0x2f, 0x2a, 0x2a, 0x12, 0x94, 0x01, 0x0a, 0x09, 0x47, 0x65, 0x74, 0x46, 0x6f, - 0x6c, 0x64, 0x65, 0x72, 0x12, 0x2b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, - 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x76, 0x32, - 0x2e, 0x47, 0x65, 0x74, 0x46, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x21, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, - 0x67, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x76, 0x32, 0x2e, 0x46, 0x6f, - 0x6c, 0x64, 0x65, 0x72, 0x22, 0x37, 0xda, 0x41, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x8a, 0xd3, 0xe4, + 0x32, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x46, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, + 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x76, + 0x32, 0x2e, 0x46, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x22, 0x37, 0xda, 0x41, 0x17, 0x70, 0x61, 0x72, + 0x65, 0x6e, 0x74, 0x2c, 0x66, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x2c, 0x66, 0x6f, 0x6c, 0x64, 0x65, + 0x72, 0x5f, 0x69, 0x64, 0x8a, 0xd3, 0xe4, 0x93, 0x02, 0x17, 0x12, 0x15, 0x0a, 0x06, 0x70, 0x61, + 0x72, 0x65, 0x6e, 0x74, 0x12, 0x0b, 0x7b, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x3d, 0x2a, 0x2a, + 0x7d, 0x12, 0x8f, 0x01, 0x0a, 0x0c, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x46, 0x6f, 0x6c, 0x64, + 0x65, 0x72, 0x12, 0x2e, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, + 0x61, 0x67, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x76, 0x32, 0x2e, 0x44, + 0x65, 0x6c, 0x65, 0x74, 0x65, 0x46, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x37, 0xda, 0x41, 0x04, 0x6e, + 0x61, 0x6d, 0x65, 0x8a, 0xd3, 0xe4, 0x93, 0x02, 0x2a, 0x12, 0x28, 0x0a, 0x04, 0x6e, 0x61, 0x6d, + 0x65, 0x12, 0x20, 0x7b, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x3d, 0x70, 0x72, 0x6f, 0x6a, 0x65, + 0x63, 0x74, 0x73, 0x2f, 0x2a, 0x2f, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x2f, 0x2a, 0x7d, + 0x2f, 0x2a, 0x2a, 0x12, 0x94, 0x01, 0x0a, 0x09, 0x47, 0x65, 0x74, 0x46, 0x6f, 0x6c, 0x64, 0x65, + 0x72, 0x12, 0x2b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, + 0x67, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, + 0x74, 0x46, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, + 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x76, 0x32, 0x2e, 0x46, 0x6f, 0x6c, 0x64, 0x65, + 0x72, 0x22, 0x37, 0xda, 0x41, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x8a, 0xd3, 0xe4, 0x93, 0x02, 0x2a, + 0x12, 0x28, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x7b, 0x62, 0x75, 0x63, 0x6b, 0x65, + 0x74, 0x3d, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x2a, 0x2f, 0x62, 0x75, 0x63, + 0x6b, 0x65, 0x74, 0x73, 0x2f, 0x2a, 0x7d, 0x2f, 0x2a, 0x2a, 0x12, 0x94, 0x01, 0x0a, 0x0b, 0x4c, + 0x69, 0x73, 0x74, 0x46, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x73, 0x12, 0x2d, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x74, + 0x72, 0x6f, 0x6c, 0x2e, 0x76, 0x32, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x46, 0x6f, 0x6c, 0x64, 0x65, + 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, + 0x6f, 0x6c, 0x2e, 0x76, 0x32, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x46, 0x6f, 0x6c, 0x64, 0x65, 0x72, + 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x26, 0xda, 0x41, 0x06, 0x70, 0x61, + 0x72, 0x65, 0x6e, 0x74, 0x8a, 0xd3, 0xe4, 0x93, 0x02, 0x17, 0x12, 0x15, 0x0a, 0x06, 0x70, 0x61, + 0x72, 0x65, 0x6e, 0x74, 0x12, 0x0b, 0x7b, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x3d, 0x2a, 0x2a, + 0x7d, 0x12, 0xcd, 0x01, 0x0a, 0x0c, 0x52, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x46, 0x6f, 0x6c, 0x64, + 0x65, 0x72, 0x12, 0x2e, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, + 0x61, 0x67, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x76, 0x32, 0x2e, 0x52, + 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x46, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x6c, 0x6f, 0x6e, 0x67, + 0x72, 0x75, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x2e, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x22, 0x6e, 0xca, 0x41, 0x1e, 0x0a, 0x06, 0x46, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x12, 0x14, + 0x52, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x46, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x4d, 0x65, 0x74, 0x61, + 0x64, 0x61, 0x74, 0x61, 0xda, 0x41, 0x1a, 0x6e, 0x61, 0x6d, 0x65, 0x2c, 0x64, 0x65, 0x73, 0x74, + 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x66, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x5f, 0x69, + 0x64, 0x8a, 0xd3, 0xe4, 0x93, 0x02, 0x2a, 0x12, 0x28, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, + 0x20, 0x7b, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x3d, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, + 0x73, 0x2f, 0x2a, 0x2f, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x2f, 0x2a, 0x7d, 0x2f, 0x2a, + 0x2a, 0x12, 0xa9, 0x01, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, + 0x4c, 0x61, 0x79, 0x6f, 0x75, 0x74, 0x12, 0x32, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, + 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x4c, 0x61, 0x79, + 0x6f, 0x75, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x74, + 0x72, 0x6f, 0x6c, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x4c, 0x61, + 0x79, 0x6f, 0x75, 0x74, 0x22, 0x37, 0xda, 0x41, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x8a, 0xd3, 0xe4, 0x93, 0x02, 0x2a, 0x12, 0x28, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x7b, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x3d, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x2a, 0x2f, - 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x2f, 0x2a, 0x7d, 0x2f, 0x2a, 0x2a, 0x12, 0x94, 0x01, - 0x0a, 0x0b, 0x4c, 0x69, 0x73, 0x74, 0x46, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x73, 0x12, 0x2d, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x63, - 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x76, 0x32, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x46, 0x6f, - 0x6c, 0x64, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x63, 0x6f, - 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x76, 0x32, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x46, 0x6f, 0x6c, - 0x64, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x26, 0xda, 0x41, - 0x06, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x8a, 0xd3, 0xe4, 0x93, 0x02, 0x17, 0x12, 0x15, 0x0a, - 0x06, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x12, 0x0b, 0x7b, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, - 0x3d, 0x2a, 0x2a, 0x7d, 0x12, 0xcd, 0x01, 0x0a, 0x0c, 0x52, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x46, - 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x12, 0x2e, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, + 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x2f, 0x2a, 0x7d, 0x2f, 0x2a, 0x2a, 0x12, 0xbf, 0x01, + 0x0a, 0x13, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x64, 0x46, + 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x12, 0x35, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x76, - 0x32, 0x2e, 0x52, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x46, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x6c, - 0x6f, 0x6e, 0x67, 0x72, 0x75, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x2e, 0x4f, 0x70, 0x65, 0x72, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x6e, 0xca, 0x41, 0x1e, 0x0a, 0x06, 0x46, 0x6f, 0x6c, 0x64, 0x65, - 0x72, 0x12, 0x14, 0x52, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x46, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x4d, - 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xda, 0x41, 0x1a, 0x6e, 0x61, 0x6d, 0x65, 0x2c, 0x64, - 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x66, 0x6f, 0x6c, 0x64, 0x65, - 0x72, 0x5f, 0x69, 0x64, 0x8a, 0xd3, 0xe4, 0x93, 0x02, 0x2a, 0x12, 0x28, 0x0a, 0x04, 0x6e, 0x61, - 0x6d, 0x65, 0x12, 0x20, 0x7b, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x3d, 0x70, 0x72, 0x6f, 0x6a, - 0x65, 0x63, 0x74, 0x73, 0x2f, 0x2a, 0x2f, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x2f, 0x2a, - 0x7d, 0x2f, 0x2a, 0x2a, 0x12, 0xa9, 0x01, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x53, 0x74, 0x6f, 0x72, - 0x61, 0x67, 0x65, 0x4c, 0x61, 0x79, 0x6f, 0x75, 0x74, 0x12, 0x32, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, - 0x6f, 0x6c, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, - 0x4c, 0x61, 0x79, 0x6f, 0x75, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x63, - 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, - 0x65, 0x4c, 0x61, 0x79, 0x6f, 0x75, 0x74, 0x22, 0x37, 0xda, 0x41, 0x04, 0x6e, 0x61, 0x6d, 0x65, - 0x8a, 0xd3, 0xe4, 0x93, 0x02, 0x2a, 0x12, 0x28, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x20, - 0x7b, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x3d, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, - 0x2f, 0x2a, 0x2f, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x2f, 0x2a, 0x7d, 0x2f, 0x2a, 0x2a, - 0x1a, 0xa7, 0x02, 0xca, 0x41, 0x16, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0xd2, 0x41, 0x8a, 0x02, - 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x2f, - 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2d, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2c, 0x68, + 0x32, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x64, 0x46, + 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x63, 0x6f, + 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x76, 0x32, 0x2e, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x64, + 0x46, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x22, 0x47, 0xda, 0x41, 0x27, 0x70, 0x61, 0x72, 0x65, 0x6e, + 0x74, 0x2c, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x64, 0x5f, 0x66, 0x6f, 0x6c, 0x64, 0x65, 0x72, + 0x2c, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x64, 0x5f, 0x66, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x5f, + 0x69, 0x64, 0x8a, 0xd3, 0xe4, 0x93, 0x02, 0x17, 0x12, 0x15, 0x0a, 0x06, 0x70, 0x61, 0x72, 0x65, + 0x6e, 0x74, 0x12, 0x0b, 0x7b, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x3d, 0x2a, 0x2a, 0x7d, 0x12, + 0x9d, 0x01, 0x0a, 0x13, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, + 0x64, 0x46, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x12, 0x35, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, + 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, + 0x64, 0x46, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, + 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x37, 0xda, 0x41, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x8a, + 0xd3, 0xe4, 0x93, 0x02, 0x2a, 0x12, 0x28, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x7b, + 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x3d, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, + 0x2a, 0x2f, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x2f, 0x2a, 0x7d, 0x2f, 0x2a, 0x2a, 0x12, + 0xa9, 0x01, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x64, 0x46, 0x6f, + 0x6c, 0x64, 0x65, 0x72, 0x12, 0x32, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, + 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x76, 0x32, + 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x64, 0x46, 0x6f, 0x6c, 0x64, 0x65, + 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, + 0x6c, 0x2e, 0x76, 0x32, 0x2e, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x64, 0x46, 0x6f, 0x6c, 0x64, + 0x65, 0x72, 0x22, 0x37, 0xda, 0x41, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x8a, 0xd3, 0xe4, 0x93, 0x02, + 0x2a, 0x12, 0x28, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x7b, 0x62, 0x75, 0x63, 0x6b, + 0x65, 0x74, 0x3d, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x2a, 0x2f, 0x62, 0x75, + 0x63, 0x6b, 0x65, 0x74, 0x73, 0x2f, 0x2a, 0x7d, 0x2f, 0x2a, 0x2a, 0x12, 0xa9, 0x01, 0x0a, 0x12, + 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x64, 0x46, 0x6f, 0x6c, 0x64, 0x65, + 0x72, 0x73, 0x12, 0x34, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, + 0x61, 0x67, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x76, 0x32, 0x2e, 0x4c, + 0x69, 0x73, 0x74, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x64, 0x46, 0x6f, 0x6c, 0x64, 0x65, 0x72, + 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x35, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, + 0x6c, 0x2e, 0x76, 0x32, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x64, + 0x46, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, + 0x26, 0xda, 0x41, 0x06, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x8a, 0xd3, 0xe4, 0x93, 0x02, 0x17, + 0x12, 0x15, 0x0a, 0x06, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x12, 0x0b, 0x7b, 0x62, 0x75, 0x63, + 0x6b, 0x65, 0x74, 0x3d, 0x2a, 0x2a, 0x7d, 0x1a, 0xa7, 0x02, 0xca, 0x41, 0x16, 0x73, 0x74, 0x6f, + 0x72, 0x61, 0x67, 0x65, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, + 0x63, 0x6f, 0x6d, 0xd2, 0x41, 0x8a, 0x02, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x77, + 0x77, 0x77, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, + 0x6d, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x2f, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2d, 0x70, 0x6c, 0x61, + 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2c, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x77, 0x77, + 0x77, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, + 0x2f, 0x61, 0x75, 0x74, 0x68, 0x2f, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2d, 0x70, 0x6c, 0x61, 0x74, + 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x2d, 0x6f, 0x6e, 0x6c, 0x79, 0x2c, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x2f, 0x63, - 0x6c, 0x6f, 0x75, 0x64, 0x2d, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, - 0x61, 0x64, 0x2d, 0x6f, 0x6e, 0x6c, 0x79, 0x2c, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, - 0x77, 0x77, 0x77, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, - 0x6f, 0x6d, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x2f, 0x64, 0x65, 0x76, 0x73, 0x74, 0x6f, 0x72, 0x61, - 0x67, 0x65, 0x2e, 0x66, 0x75, 0x6c, 0x6c, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2c, - 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x2f, - 0x64, 0x65, 0x76, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x5f, - 0x6f, 0x6e, 0x6c, 0x79, 0x2c, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, + 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x2f, 0x64, + 0x65, 0x76, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x66, 0x75, 0x6c, 0x6c, 0x5f, 0x63, + 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2c, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x77, + 0x77, 0x77, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, + 0x6d, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x2f, 0x64, 0x65, 0x76, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, + 0x65, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x6f, 0x6e, 0x6c, 0x79, 0x2c, 0x68, 0x74, 0x74, 0x70, + 0x73, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, + 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x2f, 0x64, 0x65, 0x76, 0x73, + 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x77, 0x72, 0x69, 0x74, + 0x65, 0x42, 0xa6, 0x02, 0xea, 0x41, 0x44, 0x0a, 0x1d, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, - 0x61, 0x75, 0x74, 0x68, 0x2f, 0x64, 0x65, 0x76, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, - 0x72, 0x65, 0x61, 0x64, 0x5f, 0x77, 0x72, 0x69, 0x74, 0x65, 0x42, 0xa6, 0x02, 0xea, 0x41, 0x44, - 0x0a, 0x1d, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x12, - 0x23, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, - 0x63, 0x74, 0x7d, 0x2f, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x2f, 0x7b, 0x62, 0x75, 0x63, - 0x6b, 0x65, 0x74, 0x7d, 0x0a, 0x1d, 0x63, 0x6f, 0x6d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, - 0x2e, 0x76, 0x32, 0x42, 0x13, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x74, - 0x72, 0x6f, 0x6c, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x3d, 0x63, 0x6c, 0x6f, 0x75, - 0x64, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x6f, 0x2f, - 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2f, - 0x61, 0x70, 0x69, 0x76, 0x32, 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x70, 0x62, 0x3b, - 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x70, 0x62, 0xaa, 0x02, 0x1f, 0x47, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, - 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x56, 0x32, 0xca, 0x02, 0x1f, 0x47, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x5c, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x5c, 0x53, 0x74, 0x6f, 0x72, 0x61, - 0x67, 0x65, 0x5c, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x5c, 0x56, 0x32, 0xea, 0x02, 0x23, - 0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x3a, 0x3a, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x3a, 0x3a, 0x53, - 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x3a, 0x3a, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x3a, - 0x3a, 0x56, 0x32, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x12, 0x23, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, + 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x7d, 0x2f, 0x62, 0x75, 0x63, 0x6b, 0x65, + 0x74, 0x73, 0x2f, 0x7b, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x7d, 0x0a, 0x1d, 0x63, 0x6f, 0x6d, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, + 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x76, 0x32, 0x42, 0x13, 0x53, 0x74, 0x6f, 0x72, + 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, + 0x01, 0x5a, 0x3d, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x6f, 0x2f, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2f, 0x63, + 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2f, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2f, 0x63, 0x6f, 0x6e, + 0x74, 0x72, 0x6f, 0x6c, 0x70, 0x62, 0x3b, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x70, 0x62, + 0xaa, 0x02, 0x1f, 0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x2e, + 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, + 0x56, 0x32, 0xca, 0x02, 0x1f, 0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x5c, 0x43, 0x6c, 0x6f, 0x75, + 0x64, 0x5c, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x5c, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, + 0x6c, 0x5c, 0x56, 0x32, 0xea, 0x02, 0x23, 0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x3a, 0x3a, 0x43, + 0x6c, 0x6f, 0x75, 0x64, 0x3a, 0x3a, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x3a, 0x3a, 0x43, + 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x3a, 0x3a, 0x56, 0x32, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x33, } var ( @@ -1492,7 +2132,7 @@ func file_google_storage_control_v2_storage_control_proto_rawDescGZIP() []byte { return file_google_storage_control_v2_storage_control_proto_rawDescData } -var file_google_storage_control_v2_storage_control_proto_msgTypes = make([]protoimpl.MessageInfo, 14) +var file_google_storage_control_v2_storage_control_proto_msgTypes = make([]protoimpl.MessageInfo, 20) var file_google_storage_control_v2_storage_control_proto_goTypes = []interface{}{ (*PendingRenameInfo)(nil), // 0: google.storage.control.v2.PendingRenameInfo (*Folder)(nil), // 1: google.storage.control.v2.Folder @@ -1506,41 +2146,59 @@ var file_google_storage_control_v2_storage_control_proto_goTypes = []interface{} (*RenameFolderMetadata)(nil), // 9: google.storage.control.v2.RenameFolderMetadata (*StorageLayout)(nil), // 10: google.storage.control.v2.StorageLayout (*GetStorageLayoutRequest)(nil), // 11: google.storage.control.v2.GetStorageLayoutRequest - (*StorageLayout_CustomPlacementConfig)(nil), // 12: google.storage.control.v2.StorageLayout.CustomPlacementConfig - (*StorageLayout_HierarchicalNamespace)(nil), // 13: google.storage.control.v2.StorageLayout.HierarchicalNamespace - (*timestamppb.Timestamp)(nil), // 14: google.protobuf.Timestamp - (*emptypb.Empty)(nil), // 15: google.protobuf.Empty - (*longrunningpb.Operation)(nil), // 16: google.longrunning.Operation + (*ManagedFolder)(nil), // 12: google.storage.control.v2.ManagedFolder + (*GetManagedFolderRequest)(nil), // 13: google.storage.control.v2.GetManagedFolderRequest + (*CreateManagedFolderRequest)(nil), // 14: google.storage.control.v2.CreateManagedFolderRequest + (*DeleteManagedFolderRequest)(nil), // 15: google.storage.control.v2.DeleteManagedFolderRequest + (*ListManagedFoldersRequest)(nil), // 16: google.storage.control.v2.ListManagedFoldersRequest + (*ListManagedFoldersResponse)(nil), // 17: google.storage.control.v2.ListManagedFoldersResponse + (*StorageLayout_CustomPlacementConfig)(nil), // 18: google.storage.control.v2.StorageLayout.CustomPlacementConfig + (*StorageLayout_HierarchicalNamespace)(nil), // 19: google.storage.control.v2.StorageLayout.HierarchicalNamespace + (*timestamppb.Timestamp)(nil), // 20: google.protobuf.Timestamp + (*emptypb.Empty)(nil), // 21: google.protobuf.Empty + (*longrunningpb.Operation)(nil), // 22: google.longrunning.Operation } var file_google_storage_control_v2_storage_control_proto_depIdxs = []int32{ - 14, // 0: google.storage.control.v2.Folder.create_time:type_name -> google.protobuf.Timestamp - 14, // 1: google.storage.control.v2.Folder.update_time:type_name -> google.protobuf.Timestamp + 20, // 0: google.storage.control.v2.Folder.create_time:type_name -> google.protobuf.Timestamp + 20, // 1: google.storage.control.v2.Folder.update_time:type_name -> google.protobuf.Timestamp 0, // 2: google.storage.control.v2.Folder.pending_rename_info:type_name -> google.storage.control.v2.PendingRenameInfo 1, // 3: google.storage.control.v2.CreateFolderRequest.folder:type_name -> google.storage.control.v2.Folder 1, // 4: google.storage.control.v2.ListFoldersResponse.folders:type_name -> google.storage.control.v2.Folder - 14, // 5: google.storage.control.v2.CommonLongRunningOperationMetadata.create_time:type_name -> google.protobuf.Timestamp - 14, // 6: google.storage.control.v2.CommonLongRunningOperationMetadata.end_time:type_name -> google.protobuf.Timestamp - 14, // 7: google.storage.control.v2.CommonLongRunningOperationMetadata.update_time:type_name -> google.protobuf.Timestamp + 20, // 5: google.storage.control.v2.CommonLongRunningOperationMetadata.create_time:type_name -> google.protobuf.Timestamp + 20, // 6: google.storage.control.v2.CommonLongRunningOperationMetadata.end_time:type_name -> google.protobuf.Timestamp + 20, // 7: google.storage.control.v2.CommonLongRunningOperationMetadata.update_time:type_name -> google.protobuf.Timestamp 8, // 8: google.storage.control.v2.RenameFolderMetadata.common_metadata:type_name -> google.storage.control.v2.CommonLongRunningOperationMetadata - 12, // 9: google.storage.control.v2.StorageLayout.custom_placement_config:type_name -> google.storage.control.v2.StorageLayout.CustomPlacementConfig - 13, // 10: google.storage.control.v2.StorageLayout.hierarchical_namespace:type_name -> google.storage.control.v2.StorageLayout.HierarchicalNamespace - 3, // 11: google.storage.control.v2.StorageControl.CreateFolder:input_type -> google.storage.control.v2.CreateFolderRequest - 4, // 12: google.storage.control.v2.StorageControl.DeleteFolder:input_type -> google.storage.control.v2.DeleteFolderRequest - 2, // 13: google.storage.control.v2.StorageControl.GetFolder:input_type -> google.storage.control.v2.GetFolderRequest - 5, // 14: google.storage.control.v2.StorageControl.ListFolders:input_type -> google.storage.control.v2.ListFoldersRequest - 7, // 15: google.storage.control.v2.StorageControl.RenameFolder:input_type -> google.storage.control.v2.RenameFolderRequest - 11, // 16: google.storage.control.v2.StorageControl.GetStorageLayout:input_type -> google.storage.control.v2.GetStorageLayoutRequest - 1, // 17: google.storage.control.v2.StorageControl.CreateFolder:output_type -> google.storage.control.v2.Folder - 15, // 18: google.storage.control.v2.StorageControl.DeleteFolder:output_type -> google.protobuf.Empty - 1, // 19: google.storage.control.v2.StorageControl.GetFolder:output_type -> google.storage.control.v2.Folder - 6, // 20: google.storage.control.v2.StorageControl.ListFolders:output_type -> google.storage.control.v2.ListFoldersResponse - 16, // 21: google.storage.control.v2.StorageControl.RenameFolder:output_type -> google.longrunning.Operation - 10, // 22: google.storage.control.v2.StorageControl.GetStorageLayout:output_type -> google.storage.control.v2.StorageLayout - 17, // [17:23] is the sub-list for method output_type - 11, // [11:17] is the sub-list for method input_type - 11, // [11:11] is the sub-list for extension type_name - 11, // [11:11] is the sub-list for extension extendee - 0, // [0:11] is the sub-list for field type_name + 18, // 9: google.storage.control.v2.StorageLayout.custom_placement_config:type_name -> google.storage.control.v2.StorageLayout.CustomPlacementConfig + 19, // 10: google.storage.control.v2.StorageLayout.hierarchical_namespace:type_name -> google.storage.control.v2.StorageLayout.HierarchicalNamespace + 20, // 11: google.storage.control.v2.ManagedFolder.create_time:type_name -> google.protobuf.Timestamp + 20, // 12: google.storage.control.v2.ManagedFolder.update_time:type_name -> google.protobuf.Timestamp + 12, // 13: google.storage.control.v2.CreateManagedFolderRequest.managed_folder:type_name -> google.storage.control.v2.ManagedFolder + 12, // 14: google.storage.control.v2.ListManagedFoldersResponse.managed_folders:type_name -> google.storage.control.v2.ManagedFolder + 3, // 15: google.storage.control.v2.StorageControl.CreateFolder:input_type -> google.storage.control.v2.CreateFolderRequest + 4, // 16: google.storage.control.v2.StorageControl.DeleteFolder:input_type -> google.storage.control.v2.DeleteFolderRequest + 2, // 17: google.storage.control.v2.StorageControl.GetFolder:input_type -> google.storage.control.v2.GetFolderRequest + 5, // 18: google.storage.control.v2.StorageControl.ListFolders:input_type -> google.storage.control.v2.ListFoldersRequest + 7, // 19: google.storage.control.v2.StorageControl.RenameFolder:input_type -> google.storage.control.v2.RenameFolderRequest + 11, // 20: google.storage.control.v2.StorageControl.GetStorageLayout:input_type -> google.storage.control.v2.GetStorageLayoutRequest + 14, // 21: google.storage.control.v2.StorageControl.CreateManagedFolder:input_type -> google.storage.control.v2.CreateManagedFolderRequest + 15, // 22: google.storage.control.v2.StorageControl.DeleteManagedFolder:input_type -> google.storage.control.v2.DeleteManagedFolderRequest + 13, // 23: google.storage.control.v2.StorageControl.GetManagedFolder:input_type -> google.storage.control.v2.GetManagedFolderRequest + 16, // 24: google.storage.control.v2.StorageControl.ListManagedFolders:input_type -> google.storage.control.v2.ListManagedFoldersRequest + 1, // 25: google.storage.control.v2.StorageControl.CreateFolder:output_type -> google.storage.control.v2.Folder + 21, // 26: google.storage.control.v2.StorageControl.DeleteFolder:output_type -> google.protobuf.Empty + 1, // 27: google.storage.control.v2.StorageControl.GetFolder:output_type -> google.storage.control.v2.Folder + 6, // 28: google.storage.control.v2.StorageControl.ListFolders:output_type -> google.storage.control.v2.ListFoldersResponse + 22, // 29: google.storage.control.v2.StorageControl.RenameFolder:output_type -> google.longrunning.Operation + 10, // 30: google.storage.control.v2.StorageControl.GetStorageLayout:output_type -> google.storage.control.v2.StorageLayout + 12, // 31: google.storage.control.v2.StorageControl.CreateManagedFolder:output_type -> google.storage.control.v2.ManagedFolder + 21, // 32: google.storage.control.v2.StorageControl.DeleteManagedFolder:output_type -> google.protobuf.Empty + 12, // 33: google.storage.control.v2.StorageControl.GetManagedFolder:output_type -> google.storage.control.v2.ManagedFolder + 17, // 34: google.storage.control.v2.StorageControl.ListManagedFolders:output_type -> google.storage.control.v2.ListManagedFoldersResponse + 25, // [25:35] is the sub-list for method output_type + 15, // [15:25] is the sub-list for method input_type + 15, // [15:15] is the sub-list for extension type_name + 15, // [15:15] is the sub-list for extension extendee + 0, // [0:15] is the sub-list for field type_name } func init() { file_google_storage_control_v2_storage_control_proto_init() } @@ -1694,7 +2352,7 @@ func file_google_storage_control_v2_storage_control_proto_init() { } } file_google_storage_control_v2_storage_control_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*StorageLayout_CustomPlacementConfig); i { + switch v := v.(*ManagedFolder); i { case 0: return &v.state case 1: @@ -1706,6 +2364,78 @@ func file_google_storage_control_v2_storage_control_proto_init() { } } file_google_storage_control_v2_storage_control_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetManagedFolderRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_google_storage_control_v2_storage_control_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*CreateManagedFolderRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_google_storage_control_v2_storage_control_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*DeleteManagedFolderRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_google_storage_control_v2_storage_control_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ListManagedFoldersRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_google_storage_control_v2_storage_control_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ListManagedFoldersResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_google_storage_control_v2_storage_control_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*StorageLayout_CustomPlacementConfig); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_google_storage_control_v2_storage_control_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*StorageLayout_HierarchicalNamespace); i { case 0: return &v.state @@ -1721,13 +2451,15 @@ func file_google_storage_control_v2_storage_control_proto_init() { file_google_storage_control_v2_storage_control_proto_msgTypes[2].OneofWrappers = []interface{}{} file_google_storage_control_v2_storage_control_proto_msgTypes[4].OneofWrappers = []interface{}{} file_google_storage_control_v2_storage_control_proto_msgTypes[7].OneofWrappers = []interface{}{} + file_google_storage_control_v2_storage_control_proto_msgTypes[13].OneofWrappers = []interface{}{} + file_google_storage_control_v2_storage_control_proto_msgTypes[15].OneofWrappers = []interface{}{} type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_google_storage_control_v2_storage_control_proto_rawDesc, NumEnums: 0, - NumMessages: 14, + NumMessages: 20, NumExtensions: 0, NumServices: 1, }, @@ -1767,6 +2499,14 @@ type StorageControlClient interface { RenameFolder(ctx context.Context, in *RenameFolderRequest, opts ...grpc.CallOption) (*longrunningpb.Operation, error) // Returns the storage layout configuration for a given bucket. GetStorageLayout(ctx context.Context, in *GetStorageLayoutRequest, opts ...grpc.CallOption) (*StorageLayout, error) + // Creates a new managed folder. + CreateManagedFolder(ctx context.Context, in *CreateManagedFolderRequest, opts ...grpc.CallOption) (*ManagedFolder, error) + // Permanently deletes an empty managed folder. + DeleteManagedFolder(ctx context.Context, in *DeleteManagedFolderRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) + // Returns metadata for the specified managed folder. + GetManagedFolder(ctx context.Context, in *GetManagedFolderRequest, opts ...grpc.CallOption) (*ManagedFolder, error) + // Retrieves a list of managed folders for a given bucket. + ListManagedFolders(ctx context.Context, in *ListManagedFoldersRequest, opts ...grpc.CallOption) (*ListManagedFoldersResponse, error) } type storageControlClient struct { @@ -1831,6 +2571,42 @@ func (c *storageControlClient) GetStorageLayout(ctx context.Context, in *GetStor return out, nil } +func (c *storageControlClient) CreateManagedFolder(ctx context.Context, in *CreateManagedFolderRequest, opts ...grpc.CallOption) (*ManagedFolder, error) { + out := new(ManagedFolder) + err := c.cc.Invoke(ctx, "/google.storage.control.v2.StorageControl/CreateManagedFolder", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *storageControlClient) DeleteManagedFolder(ctx context.Context, in *DeleteManagedFolderRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) { + out := new(emptypb.Empty) + err := c.cc.Invoke(ctx, "/google.storage.control.v2.StorageControl/DeleteManagedFolder", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *storageControlClient) GetManagedFolder(ctx context.Context, in *GetManagedFolderRequest, opts ...grpc.CallOption) (*ManagedFolder, error) { + out := new(ManagedFolder) + err := c.cc.Invoke(ctx, "/google.storage.control.v2.StorageControl/GetManagedFolder", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *storageControlClient) ListManagedFolders(ctx context.Context, in *ListManagedFoldersRequest, opts ...grpc.CallOption) (*ListManagedFoldersResponse, error) { + out := new(ListManagedFoldersResponse) + err := c.cc.Invoke(ctx, "/google.storage.control.v2.StorageControl/ListManagedFolders", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + // StorageControlServer is the server API for StorageControl service. type StorageControlServer interface { // Creates a new folder. @@ -1847,6 +2623,14 @@ type StorageControlServer interface { RenameFolder(context.Context, *RenameFolderRequest) (*longrunningpb.Operation, error) // Returns the storage layout configuration for a given bucket. GetStorageLayout(context.Context, *GetStorageLayoutRequest) (*StorageLayout, error) + // Creates a new managed folder. + CreateManagedFolder(context.Context, *CreateManagedFolderRequest) (*ManagedFolder, error) + // Permanently deletes an empty managed folder. + DeleteManagedFolder(context.Context, *DeleteManagedFolderRequest) (*emptypb.Empty, error) + // Returns metadata for the specified managed folder. + GetManagedFolder(context.Context, *GetManagedFolderRequest) (*ManagedFolder, error) + // Retrieves a list of managed folders for a given bucket. + ListManagedFolders(context.Context, *ListManagedFoldersRequest) (*ListManagedFoldersResponse, error) } // UnimplementedStorageControlServer can be embedded to have forward compatible implementations. @@ -1871,6 +2655,18 @@ func (*UnimplementedStorageControlServer) RenameFolder(context.Context, *RenameF func (*UnimplementedStorageControlServer) GetStorageLayout(context.Context, *GetStorageLayoutRequest) (*StorageLayout, error) { return nil, status.Errorf(codes.Unimplemented, "method GetStorageLayout not implemented") } +func (*UnimplementedStorageControlServer) CreateManagedFolder(context.Context, *CreateManagedFolderRequest) (*ManagedFolder, error) { + return nil, status.Errorf(codes.Unimplemented, "method CreateManagedFolder not implemented") +} +func (*UnimplementedStorageControlServer) DeleteManagedFolder(context.Context, *DeleteManagedFolderRequest) (*emptypb.Empty, error) { + return nil, status.Errorf(codes.Unimplemented, "method DeleteManagedFolder not implemented") +} +func (*UnimplementedStorageControlServer) GetManagedFolder(context.Context, *GetManagedFolderRequest) (*ManagedFolder, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetManagedFolder not implemented") +} +func (*UnimplementedStorageControlServer) ListManagedFolders(context.Context, *ListManagedFoldersRequest) (*ListManagedFoldersResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method ListManagedFolders not implemented") +} func RegisterStorageControlServer(s *grpc.Server, srv StorageControlServer) { s.RegisterService(&_StorageControl_serviceDesc, srv) @@ -1984,6 +2780,78 @@ func _StorageControl_GetStorageLayout_Handler(srv interface{}, ctx context.Conte return interceptor(ctx, in, info, handler) } +func _StorageControl_CreateManagedFolder_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(CreateManagedFolderRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(StorageControlServer).CreateManagedFolder(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.storage.control.v2.StorageControl/CreateManagedFolder", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(StorageControlServer).CreateManagedFolder(ctx, req.(*CreateManagedFolderRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _StorageControl_DeleteManagedFolder_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(DeleteManagedFolderRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(StorageControlServer).DeleteManagedFolder(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.storage.control.v2.StorageControl/DeleteManagedFolder", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(StorageControlServer).DeleteManagedFolder(ctx, req.(*DeleteManagedFolderRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _StorageControl_GetManagedFolder_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetManagedFolderRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(StorageControlServer).GetManagedFolder(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.storage.control.v2.StorageControl/GetManagedFolder", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(StorageControlServer).GetManagedFolder(ctx, req.(*GetManagedFolderRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _StorageControl_ListManagedFolders_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ListManagedFoldersRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(StorageControlServer).ListManagedFolders(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/google.storage.control.v2.StorageControl/ListManagedFolders", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(StorageControlServer).ListManagedFolders(ctx, req.(*ListManagedFoldersRequest)) + } + return interceptor(ctx, in, info, handler) +} + var _StorageControl_serviceDesc = grpc.ServiceDesc{ ServiceName: "google.storage.control.v2.StorageControl", HandlerType: (*StorageControlServer)(nil), @@ -2012,6 +2880,22 @@ var _StorageControl_serviceDesc = grpc.ServiceDesc{ MethodName: "GetStorageLayout", Handler: _StorageControl_GetStorageLayout_Handler, }, + { + MethodName: "CreateManagedFolder", + Handler: _StorageControl_CreateManagedFolder_Handler, + }, + { + MethodName: "DeleteManagedFolder", + Handler: _StorageControl_DeleteManagedFolder_Handler, + }, + { + MethodName: "GetManagedFolder", + Handler: _StorageControl_GetManagedFolder_Handler, + }, + { + MethodName: "ListManagedFolders", + Handler: _StorageControl_ListManagedFolders_Handler, + }, }, Streams: []grpc.StreamDesc{}, Metadata: "google/storage/control/v2/storage_control.proto", diff --git a/storage/control/apiv2/gapic_metadata.json b/storage/control/apiv2/gapic_metadata.json index 78859e79b11c..8669fbc6fbd6 100644 --- a/storage/control/apiv2/gapic_metadata.json +++ b/storage/control/apiv2/gapic_metadata.json @@ -15,16 +15,31 @@ "CreateFolder" ] }, + "CreateManagedFolder": { + "methods": [ + "CreateManagedFolder" + ] + }, "DeleteFolder": { "methods": [ "DeleteFolder" ] }, + "DeleteManagedFolder": { + "methods": [ + "DeleteManagedFolder" + ] + }, "GetFolder": { "methods": [ "GetFolder" ] }, + "GetManagedFolder": { + "methods": [ + "GetManagedFolder" + ] + }, "GetStorageLayout": { "methods": [ "GetStorageLayout" @@ -35,6 +50,11 @@ "ListFolders" ] }, + "ListManagedFolders": { + "methods": [ + "ListManagedFolders" + ] + }, "RenameFolder": { "methods": [ "RenameFolder" diff --git a/storage/control/apiv2/storage_control_client.go b/storage/control/apiv2/storage_control_client.go index 746d7c761f4a..242d2ec014a6 100755 --- a/storage/control/apiv2/storage_control_client.go +++ b/storage/control/apiv2/storage_control_client.go @@ -44,12 +44,16 @@ var newStorageControlClientHook clientHook // StorageControlCallOptions contains the retry settings for each method of StorageControlClient. type StorageControlCallOptions struct { - CreateFolder []gax.CallOption - DeleteFolder []gax.CallOption - GetFolder []gax.CallOption - ListFolders []gax.CallOption - RenameFolder []gax.CallOption - GetStorageLayout []gax.CallOption + CreateFolder []gax.CallOption + DeleteFolder []gax.CallOption + GetFolder []gax.CallOption + ListFolders []gax.CallOption + RenameFolder []gax.CallOption + GetStorageLayout []gax.CallOption + CreateManagedFolder []gax.CallOption + DeleteManagedFolder []gax.CallOption + GetManagedFolder []gax.CallOption + ListManagedFolders []gax.CallOption } func defaultStorageControlGRPCClientOptions() []option.ClientOption { @@ -138,6 +142,44 @@ func defaultStorageControlCallOptions() *StorageControlCallOptions { }) }), }, + CreateManagedFolder: []gax.CallOption{ + gax.WithTimeout(60000 * time.Millisecond), + }, + DeleteManagedFolder: []gax.CallOption{ + gax.WithTimeout(60000 * time.Millisecond), + }, + GetManagedFolder: []gax.CallOption{ + gax.WithTimeout(60000 * time.Millisecond), + gax.WithRetry(func() gax.Retryer { + return gax.OnCodes([]codes.Code{ + codes.ResourceExhausted, + codes.Unavailable, + codes.DeadlineExceeded, + codes.Internal, + codes.Unknown, + }, gax.Backoff{ + Initial: 1000 * time.Millisecond, + Max: 60000 * time.Millisecond, + Multiplier: 2.00, + }) + }), + }, + ListManagedFolders: []gax.CallOption{ + gax.WithTimeout(60000 * time.Millisecond), + gax.WithRetry(func() gax.Retryer { + return gax.OnCodes([]codes.Code{ + codes.ResourceExhausted, + codes.Unavailable, + codes.DeadlineExceeded, + codes.Internal, + codes.Unknown, + }, gax.Backoff{ + Initial: 1000 * time.Millisecond, + Max: 60000 * time.Millisecond, + Multiplier: 2.00, + }) + }), + }, } } @@ -153,6 +195,10 @@ type internalStorageControlClient interface { RenameFolder(context.Context, *controlpb.RenameFolderRequest, ...gax.CallOption) (*RenameFolderOperation, error) RenameFolderOperation(name string) *RenameFolderOperation GetStorageLayout(context.Context, *controlpb.GetStorageLayoutRequest, ...gax.CallOption) (*controlpb.StorageLayout, error) + CreateManagedFolder(context.Context, *controlpb.CreateManagedFolderRequest, ...gax.CallOption) (*controlpb.ManagedFolder, error) + DeleteManagedFolder(context.Context, *controlpb.DeleteManagedFolderRequest, ...gax.CallOption) error + GetManagedFolder(context.Context, *controlpb.GetManagedFolderRequest, ...gax.CallOption) (*controlpb.ManagedFolder, error) + ListManagedFolders(context.Context, *controlpb.ListManagedFoldersRequest, ...gax.CallOption) *ManagedFolderIterator } // StorageControlClient is a client for interacting with Cloud Storage API. @@ -233,6 +279,26 @@ func (c *StorageControlClient) GetStorageLayout(ctx context.Context, req *contro return c.internalClient.GetStorageLayout(ctx, req, opts...) } +// CreateManagedFolder creates a new managed folder. +func (c *StorageControlClient) CreateManagedFolder(ctx context.Context, req *controlpb.CreateManagedFolderRequest, opts ...gax.CallOption) (*controlpb.ManagedFolder, error) { + return c.internalClient.CreateManagedFolder(ctx, req, opts...) +} + +// DeleteManagedFolder permanently deletes an empty managed folder. +func (c *StorageControlClient) DeleteManagedFolder(ctx context.Context, req *controlpb.DeleteManagedFolderRequest, opts ...gax.CallOption) error { + return c.internalClient.DeleteManagedFolder(ctx, req, opts...) +} + +// GetManagedFolder returns metadata for the specified managed folder. +func (c *StorageControlClient) GetManagedFolder(ctx context.Context, req *controlpb.GetManagedFolderRequest, opts ...gax.CallOption) (*controlpb.ManagedFolder, error) { + return c.internalClient.GetManagedFolder(ctx, req, opts...) +} + +// ListManagedFolders retrieves a list of managed folders for a given bucket. +func (c *StorageControlClient) ListManagedFolders(ctx context.Context, req *controlpb.ListManagedFoldersRequest, opts ...gax.CallOption) *ManagedFolderIterator { + return c.internalClient.ListManagedFolders(ctx, req, opts...) +} + // storageControlGRPCClient is a client for interacting with Cloud Storage API over gRPC transport. // // Methods, except Close, may be called concurrently. However, fields must not be modified concurrently with method calls. @@ -521,6 +587,147 @@ func (c *storageControlGRPCClient) GetStorageLayout(ctx context.Context, req *co return resp, nil } +func (c *storageControlGRPCClient) CreateManagedFolder(ctx context.Context, req *controlpb.CreateManagedFolderRequest, opts ...gax.CallOption) (*controlpb.ManagedFolder, error) { + routingHeaders := "" + routingHeadersMap := make(map[string]string) + if reg := regexp.MustCompile("(?P.*)"); reg.MatchString(req.GetParent()) && len(url.QueryEscape(reg.FindStringSubmatch(req.GetParent())[1])) > 0 { + routingHeadersMap["bucket"] = url.QueryEscape(reg.FindStringSubmatch(req.GetParent())[1]) + } + for headerName, headerValue := range routingHeadersMap { + routingHeaders = fmt.Sprintf("%s%s=%s&", routingHeaders, headerName, headerValue) + } + routingHeaders = strings.TrimSuffix(routingHeaders, "&") + hds := []string{"x-goog-request-params", routingHeaders} + + hds = append(c.xGoogHeaders, hds...) + ctx = gax.InsertMetadataIntoOutgoingContext(ctx, hds...) + if req != nil && req.GetRequestId() == "" { + req.RequestId = uuid.NewString() + } + opts = append((*c.CallOptions).CreateManagedFolder[0:len((*c.CallOptions).CreateManagedFolder):len((*c.CallOptions).CreateManagedFolder)], opts...) + var resp *controlpb.ManagedFolder + err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error { + var err error + resp, err = c.storageControlClient.CreateManagedFolder(ctx, req, settings.GRPC...) + return err + }, opts...) + if err != nil { + return nil, err + } + return resp, nil +} + +func (c *storageControlGRPCClient) DeleteManagedFolder(ctx context.Context, req *controlpb.DeleteManagedFolderRequest, opts ...gax.CallOption) error { + routingHeaders := "" + routingHeadersMap := make(map[string]string) + if reg := regexp.MustCompile("(?Pprojects/[^/]+/buckets/[^/]+)(?:/.*)?"); reg.MatchString(req.GetName()) && len(url.QueryEscape(reg.FindStringSubmatch(req.GetName())[1])) > 0 { + routingHeadersMap["bucket"] = url.QueryEscape(reg.FindStringSubmatch(req.GetName())[1]) + } + for headerName, headerValue := range routingHeadersMap { + routingHeaders = fmt.Sprintf("%s%s=%s&", routingHeaders, headerName, headerValue) + } + routingHeaders = strings.TrimSuffix(routingHeaders, "&") + hds := []string{"x-goog-request-params", routingHeaders} + + hds = append(c.xGoogHeaders, hds...) + ctx = gax.InsertMetadataIntoOutgoingContext(ctx, hds...) + if req != nil && req.GetRequestId() == "" { + req.RequestId = uuid.NewString() + } + opts = append((*c.CallOptions).DeleteManagedFolder[0:len((*c.CallOptions).DeleteManagedFolder):len((*c.CallOptions).DeleteManagedFolder)], opts...) + err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error { + var err error + _, err = c.storageControlClient.DeleteManagedFolder(ctx, req, settings.GRPC...) + return err + }, opts...) + return err +} + +func (c *storageControlGRPCClient) GetManagedFolder(ctx context.Context, req *controlpb.GetManagedFolderRequest, opts ...gax.CallOption) (*controlpb.ManagedFolder, error) { + routingHeaders := "" + routingHeadersMap := make(map[string]string) + if reg := regexp.MustCompile("(?Pprojects/[^/]+/buckets/[^/]+)(?:/.*)?"); reg.MatchString(req.GetName()) && len(url.QueryEscape(reg.FindStringSubmatch(req.GetName())[1])) > 0 { + routingHeadersMap["bucket"] = url.QueryEscape(reg.FindStringSubmatch(req.GetName())[1]) + } + for headerName, headerValue := range routingHeadersMap { + routingHeaders = fmt.Sprintf("%s%s=%s&", routingHeaders, headerName, headerValue) + } + routingHeaders = strings.TrimSuffix(routingHeaders, "&") + hds := []string{"x-goog-request-params", routingHeaders} + + hds = append(c.xGoogHeaders, hds...) + ctx = gax.InsertMetadataIntoOutgoingContext(ctx, hds...) + if req != nil && req.GetRequestId() == "" { + req.RequestId = uuid.NewString() + } + opts = append((*c.CallOptions).GetManagedFolder[0:len((*c.CallOptions).GetManagedFolder):len((*c.CallOptions).GetManagedFolder)], opts...) + var resp *controlpb.ManagedFolder + err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error { + var err error + resp, err = c.storageControlClient.GetManagedFolder(ctx, req, settings.GRPC...) + return err + }, opts...) + if err != nil { + return nil, err + } + return resp, nil +} + +func (c *storageControlGRPCClient) ListManagedFolders(ctx context.Context, req *controlpb.ListManagedFoldersRequest, opts ...gax.CallOption) *ManagedFolderIterator { + routingHeaders := "" + routingHeadersMap := make(map[string]string) + if reg := regexp.MustCompile("(?P.*)"); reg.MatchString(req.GetParent()) && len(url.QueryEscape(reg.FindStringSubmatch(req.GetParent())[1])) > 0 { + routingHeadersMap["bucket"] = url.QueryEscape(reg.FindStringSubmatch(req.GetParent())[1]) + } + for headerName, headerValue := range routingHeadersMap { + routingHeaders = fmt.Sprintf("%s%s=%s&", routingHeaders, headerName, headerValue) + } + routingHeaders = strings.TrimSuffix(routingHeaders, "&") + hds := []string{"x-goog-request-params", routingHeaders} + + hds = append(c.xGoogHeaders, hds...) + ctx = gax.InsertMetadataIntoOutgoingContext(ctx, hds...) + opts = append((*c.CallOptions).ListManagedFolders[0:len((*c.CallOptions).ListManagedFolders):len((*c.CallOptions).ListManagedFolders)], opts...) + it := &ManagedFolderIterator{} + req = proto.Clone(req).(*controlpb.ListManagedFoldersRequest) + it.InternalFetch = func(pageSize int, pageToken string) ([]*controlpb.ManagedFolder, string, error) { + resp := &controlpb.ListManagedFoldersResponse{} + if pageToken != "" { + req.PageToken = pageToken + } + if pageSize > math.MaxInt32 { + req.PageSize = math.MaxInt32 + } else if pageSize != 0 { + req.PageSize = int32(pageSize) + } + err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error { + var err error + resp, err = c.storageControlClient.ListManagedFolders(ctx, req, settings.GRPC...) + return err + }, opts...) + if err != nil { + return nil, "", err + } + + it.Response = resp + return resp.GetManagedFolders(), resp.GetNextPageToken(), nil + } + fetch := func(pageSize int, pageToken string) (string, error) { + items, nextPageToken, err := it.InternalFetch(pageSize, pageToken) + if err != nil { + return "", err + } + it.items = append(it.items, items...) + return nextPageToken, nil + } + + it.pageInfo, it.nextFunc = iterator.NewPageInfo(fetch, it.bufLen, it.takeBuf) + it.pageInfo.MaxSize = int(req.GetPageSize()) + it.pageInfo.Token = req.GetPageToken() + + return it +} + // RenameFolderOperation returns a new RenameFolderOperation from a given name. // The name must be that of a previously created RenameFolderOperation, possibly from a different process. func (c *storageControlGRPCClient) RenameFolderOperation(name string) *RenameFolderOperation { diff --git a/storage/control/apiv2/storage_control_client_example_test.go b/storage/control/apiv2/storage_control_client_example_test.go index 4ac5129417d6..685e7b14e330 100644 --- a/storage/control/apiv2/storage_control_client_example_test.go +++ b/storage/control/apiv2/storage_control_client_example_test.go @@ -66,6 +66,31 @@ func ExampleStorageControlClient_CreateFolder() { _ = resp } +func ExampleStorageControlClient_CreateManagedFolder() { + ctx := context.Background() + // This snippet has been automatically generated and should be regarded as a code template only. + // It will require modifications to work: + // - It may require correct/in-range values for request initialization. + // - It may require specifying regional endpoints when creating the service client as shown in: + // https://pkg.go.dev/cloud.google.com/go#hdr-Client_Options + c, err := control.NewStorageControlClient(ctx) + if err != nil { + // TODO: Handle error. + } + defer c.Close() + + req := &controlpb.CreateManagedFolderRequest{ + // TODO: Fill request struct fields. + // See https://pkg.go.dev/cloud.google.com/go/storage/control/apiv2/controlpb#CreateManagedFolderRequest. + } + resp, err := c.CreateManagedFolder(ctx, req) + if err != nil { + // TODO: Handle error. + } + // TODO: Use resp. + _ = resp +} + func ExampleStorageControlClient_DeleteFolder() { ctx := context.Background() // This snippet has been automatically generated and should be regarded as a code template only. @@ -89,6 +114,29 @@ func ExampleStorageControlClient_DeleteFolder() { } } +func ExampleStorageControlClient_DeleteManagedFolder() { + ctx := context.Background() + // This snippet has been automatically generated and should be regarded as a code template only. + // It will require modifications to work: + // - It may require correct/in-range values for request initialization. + // - It may require specifying regional endpoints when creating the service client as shown in: + // https://pkg.go.dev/cloud.google.com/go#hdr-Client_Options + c, err := control.NewStorageControlClient(ctx) + if err != nil { + // TODO: Handle error. + } + defer c.Close() + + req := &controlpb.DeleteManagedFolderRequest{ + // TODO: Fill request struct fields. + // See https://pkg.go.dev/cloud.google.com/go/storage/control/apiv2/controlpb#DeleteManagedFolderRequest. + } + err = c.DeleteManagedFolder(ctx, req) + if err != nil { + // TODO: Handle error. + } +} + func ExampleStorageControlClient_GetFolder() { ctx := context.Background() // This snippet has been automatically generated and should be regarded as a code template only. @@ -114,6 +162,31 @@ func ExampleStorageControlClient_GetFolder() { _ = resp } +func ExampleStorageControlClient_GetManagedFolder() { + ctx := context.Background() + // This snippet has been automatically generated and should be regarded as a code template only. + // It will require modifications to work: + // - It may require correct/in-range values for request initialization. + // - It may require specifying regional endpoints when creating the service client as shown in: + // https://pkg.go.dev/cloud.google.com/go#hdr-Client_Options + c, err := control.NewStorageControlClient(ctx) + if err != nil { + // TODO: Handle error. + } + defer c.Close() + + req := &controlpb.GetManagedFolderRequest{ + // TODO: Fill request struct fields. + // See https://pkg.go.dev/cloud.google.com/go/storage/control/apiv2/controlpb#GetManagedFolderRequest. + } + resp, err := c.GetManagedFolder(ctx, req) + if err != nil { + // TODO: Handle error. + } + // TODO: Use resp. + _ = resp +} + func ExampleStorageControlClient_GetStorageLayout() { ctx := context.Background() // This snippet has been automatically generated and should be regarded as a code template only. @@ -176,6 +249,43 @@ func ExampleStorageControlClient_ListFolders() { } } +func ExampleStorageControlClient_ListManagedFolders() { + ctx := context.Background() + // This snippet has been automatically generated and should be regarded as a code template only. + // It will require modifications to work: + // - It may require correct/in-range values for request initialization. + // - It may require specifying regional endpoints when creating the service client as shown in: + // https://pkg.go.dev/cloud.google.com/go#hdr-Client_Options + c, err := control.NewStorageControlClient(ctx) + if err != nil { + // TODO: Handle error. + } + defer c.Close() + + req := &controlpb.ListManagedFoldersRequest{ + // TODO: Fill request struct fields. + // See https://pkg.go.dev/cloud.google.com/go/storage/control/apiv2/controlpb#ListManagedFoldersRequest. + } + it := c.ListManagedFolders(ctx, req) + for { + resp, err := it.Next() + if err == iterator.Done { + break + } + if err != nil { + // TODO: Handle error. + } + // TODO: Use resp. + _ = resp + + // If you need to access the underlying RPC response, + // you can do so by casting the `Response` as below. + // Otherwise, remove this line. Only populated after + // first call to Next(). Not safe for concurrent access. + _ = it.Response.(*controlpb.ListManagedFoldersResponse) + } +} + func ExampleStorageControlClient_RenameFolder() { ctx := context.Background() // This snippet has been automatically generated and should be regarded as a code template only.