1// Copyright 2023 Google LLC 2// 3// Licensed under the Apache License, Version 2.0 (the "License"); 4// you may not use this file except in compliance with the License. 5// You may obtain a copy of the License at 6// 7// http://www.apache.org/licenses/LICENSE-2.0 8// 9// Unless required by applicable law or agreed to in writing, software 10// distributed under the License is distributed on an "AS IS" BASIS, 11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12// See the License for the specific language governing permissions and 13// limitations under the License. 14 15syntax = "proto3"; 16 17package google.storage.control.v2; 18 19import "google/api/client.proto"; 20import "google/api/field_behavior.proto"; 21import "google/api/field_info.proto"; 22import "google/api/resource.proto"; 23import "google/api/routing.proto"; 24import "google/longrunning/operations.proto"; 25import "google/protobuf/empty.proto"; 26import "google/protobuf/timestamp.proto"; 27 28option csharp_namespace = "Google.Cloud.Storage.Control.V2"; 29option go_package = "cloud.google.com/go/storage/control/apiv2/controlpb;controlpb"; 30option java_multiple_files = true; 31option java_outer_classname = "StorageControlProto"; 32option java_package = "com.google.storage.control.v2"; 33option php_namespace = "Google\\Cloud\\Storage\\Control\\V2"; 34option ruby_package = "Google::Cloud::Storage::Control::V2"; 35option (google.api.resource_definition) = { 36 type: "storage.googleapis.com/Bucket" 37 pattern: "projects/{project}/buckets/{bucket}" 38}; 39 40// StorageControl service includes selected control plane operations. 41service StorageControl { 42 option (google.api.default_host) = "storage.googleapis.com"; 43 option (google.api.oauth_scopes) = 44 "https://www.googleapis.com/auth/cloud-platform," 45 "https://www.googleapis.com/auth/cloud-platform.read-only," 46 "https://www.googleapis.com/auth/devstorage.full_control," 47 "https://www.googleapis.com/auth/devstorage.read_only," 48 "https://www.googleapis.com/auth/devstorage.read_write"; 49 50 // Creates a new folder. This operation is only applicable to a hierarchical 51 // namespace enabled bucket. 52 // Hierarchical namespace buckets are in allowlist preview. 53 rpc CreateFolder(CreateFolderRequest) returns (Folder) { 54 option (google.api.routing) = { 55 routing_parameters { field: "parent" path_template: "{bucket=**}" } 56 }; 57 option (google.api.method_signature) = "parent,folder,folder_id"; 58 } 59 60 // Permanently deletes an empty folder. This operation is only applicable to a 61 // hierarchical namespace enabled bucket. 62 // Hierarchical namespace buckets are in allowlist preview. 63 rpc DeleteFolder(DeleteFolderRequest) returns (google.protobuf.Empty) { 64 option (google.api.routing) = { 65 routing_parameters { 66 field: "name" 67 path_template: "{bucket=projects/*/buckets/*}/**" 68 } 69 }; 70 option (google.api.method_signature) = "name"; 71 } 72 73 // Returns metadata for the specified folder. This operation is only 74 // applicable to a hierarchical namespace enabled bucket. 75 // Hierarchical namespace buckets are in allowlist preview. 76 rpc GetFolder(GetFolderRequest) returns (Folder) { 77 option (google.api.routing) = { 78 routing_parameters { 79 field: "name" 80 path_template: "{bucket=projects/*/buckets/*}/**" 81 } 82 }; 83 option (google.api.method_signature) = "name"; 84 } 85 86 // Retrieves a list of folders. This operation is only applicable to a 87 // hierarchical namespace enabled bucket. 88 // Hierarchical namespace buckets are in allowlist preview. 89 rpc ListFolders(ListFoldersRequest) returns (ListFoldersResponse) { 90 option (google.api.routing) = { 91 routing_parameters { field: "parent" path_template: "{bucket=**}" } 92 }; 93 option (google.api.method_signature) = "parent"; 94 } 95 96 // Renames a source folder to a destination folder. This operation is only 97 // applicable to a hierarchical namespace enabled bucket. During a rename, the 98 // source and destination folders are locked until the long running operation 99 // completes. 100 // Hierarchical namespace buckets are in allowlist preview. 101 rpc RenameFolder(RenameFolderRequest) returns (google.longrunning.Operation) { 102 option (google.api.routing) = { 103 routing_parameters { 104 field: "name" 105 path_template: "{bucket=projects/*/buckets/*}/**" 106 } 107 }; 108 option (google.api.method_signature) = "name,destination_folder_id"; 109 option (google.longrunning.operation_info) = { 110 response_type: "Folder" 111 metadata_type: "RenameFolderMetadata" 112 }; 113 } 114 115 // Returns the storage layout configuration for a given bucket. 116 rpc GetStorageLayout(GetStorageLayoutRequest) returns (StorageLayout) { 117 option (google.api.routing) = { 118 routing_parameters { 119 field: "name" 120 path_template: "{bucket=projects/*/buckets/*}/**" 121 } 122 }; 123 option (google.api.method_signature) = "name"; 124 } 125 126 // Creates a new managed folder. 127 rpc CreateManagedFolder(CreateManagedFolderRequest) returns (ManagedFolder) { 128 option (google.api.routing) = { 129 routing_parameters { field: "parent" path_template: "{bucket=**}" } 130 }; 131 option (google.api.method_signature) = 132 "parent,managed_folder,managed_folder_id"; 133 } 134 135 // Permanently deletes an empty managed folder. 136 rpc DeleteManagedFolder(DeleteManagedFolderRequest) 137 returns (google.protobuf.Empty) { 138 option (google.api.routing) = { 139 routing_parameters { 140 field: "name" 141 path_template: "{bucket=projects/*/buckets/*}/**" 142 } 143 }; 144 option (google.api.method_signature) = "name"; 145 } 146 147 // Returns metadata for the specified managed folder. 148 rpc GetManagedFolder(GetManagedFolderRequest) returns (ManagedFolder) { 149 option (google.api.routing) = { 150 routing_parameters { 151 field: "name" 152 path_template: "{bucket=projects/*/buckets/*}/**" 153 } 154 }; 155 option (google.api.method_signature) = "name"; 156 } 157 158 // Retrieves a list of managed folders for a given bucket. 159 rpc ListManagedFolders(ListManagedFoldersRequest) 160 returns (ListManagedFoldersResponse) { 161 option (google.api.routing) = { 162 routing_parameters { field: "parent" path_template: "{bucket=**}" } 163 }; 164 option (google.api.method_signature) = "parent"; 165 } 166} 167 168// Contains information about a pending rename operation. 169message PendingRenameInfo { 170 // Output only. The name of the rename operation. 171 string operation = 1 [(google.api.field_behavior) = OUTPUT_ONLY]; 172} 173 174// A folder resource. This resource can only exist in a hierarchical namespace 175// enabled bucket. 176// Hierarchical namespace buckets are in allowlist preview. 177message Folder { 178 option (google.api.resource) = { 179 type: "storage.googleapis.com/Folder" 180 pattern: "projects/{project}/buckets/{bucket}/folders/{folder=**}" 181 plural: "folders" 182 singular: "folder" 183 }; 184 185 // Identifier. The name of this folder. 186 // Format: `projects/{project}/buckets/{bucket}/folders/{folder}` 187 string name = 1 [(google.api.field_behavior) = IDENTIFIER]; 188 189 // Output only. The version of the metadata for this folder. Used for 190 // preconditions and for detecting changes in metadata. 191 int64 metageneration = 3 [(google.api.field_behavior) = OUTPUT_ONLY]; 192 193 // Output only. The creation time of the folder. 194 google.protobuf.Timestamp create_time = 4 195 [(google.api.field_behavior) = OUTPUT_ONLY]; 196 197 // Output only. The modification time of the folder. 198 google.protobuf.Timestamp update_time = 5 199 [(google.api.field_behavior) = OUTPUT_ONLY]; 200 201 // Output only. Only present if the folder is part of an ongoing RenameFolder 202 // operation. Contains information which can be used to query the operation 203 // status. The presence of this field also indicates all write operations are 204 // blocked for this folder, including folder, managed folder, and object 205 // operations. 206 PendingRenameInfo pending_rename_info = 7 207 [(google.api.field_behavior) = OUTPUT_ONLY]; 208} 209 210// Request message for GetFolder. This operation is only applicable to a 211// hierarchical namespace enabled bucket. 212// Hierarchical namespace buckets are in allowlist preview. 213message GetFolderRequest { 214 // Required. Name of the folder. 215 // Format: `projects/{project}/buckets/{bucket}/folders/{folder}` 216 string name = 6 [ 217 (google.api.field_behavior) = REQUIRED, 218 (google.api.resource_reference) = { type: "storage.googleapis.com/Folder" } 219 ]; 220 221 // Makes the operation only succeed conditional on whether the folder's 222 // current metageneration matches the given value. 223 optional int64 if_metageneration_match = 3; 224 225 // Makes the operation only succeed conditional on whether the folder's 226 // current metageneration does not match the given value. 227 optional int64 if_metageneration_not_match = 4; 228 229 // Optional. A unique identifier for this request. UUID is the recommended 230 // format, but other formats are still accepted. 231 string request_id = 5 [ 232 (google.api.field_info).format = UUID4, 233 (google.api.field_behavior) = OPTIONAL 234 ]; 235} 236 237// Request message for CreateFolder. This operation is only applicable to a 238// hierarchical namespace enabled bucket. 239// Hierarchical namespace buckets are in allowlist preview. 240message CreateFolderRequest { 241 // Required. Name of the bucket in which the folder will reside. The bucket 242 // must be a hierarchical namespace enabled bucket. 243 string parent = 1 [ 244 (google.api.field_behavior) = REQUIRED, 245 (google.api.resource_reference) = { 246 child_type: "storage.googleapis.com/Folder" 247 } 248 ]; 249 250 // Required. Properties of the new folder being created. 251 // The bucket and name of the folder are specified in the parent and folder_id 252 // fields, respectively. Populating those fields in `folder` will result in an 253 // error. 254 Folder folder = 2 [(google.api.field_behavior) = REQUIRED]; 255 256 // Required. The full name of a folder, including all its parent folders. 257 // Folders use single '/' characters as a delimiter. 258 // The folder_id must end with a slash. 259 // For example, the folder_id of "books/biographies/" would create a new 260 // "biographies/" folder under the "books/" folder. 261 string folder_id = 3 [(google.api.field_behavior) = REQUIRED]; 262 263 // Optional. If true, parent folder doesn't have to be present and all missing 264 // ancestor folders will be created atomically. 265 bool recursive = 4 [(google.api.field_behavior) = OPTIONAL]; 266 267 // Optional. A unique identifier for this request. UUID is the recommended 268 // format, but other formats are still accepted. 269 string request_id = 5 [ 270 (google.api.field_info).format = UUID4, 271 (google.api.field_behavior) = OPTIONAL 272 ]; 273} 274 275// Request message for DeleteFolder. This operation is only applicable to a 276// hierarchical namespace enabled bucket. 277// Hierarchical namespace buckets are in allowlist preview. 278message DeleteFolderRequest { 279 // Required. Name of the folder. 280 // Format: `projects/{project}/buckets/{bucket}/folders/{folder}` 281 string name = 6 [ 282 (google.api.field_behavior) = REQUIRED, 283 (google.api.resource_reference) = { type: "storage.googleapis.com/Folder" } 284 ]; 285 286 // Makes the operation only succeed conditional on whether the folder's 287 // current metageneration matches the given value. 288 optional int64 if_metageneration_match = 3; 289 290 // Makes the operation only succeed conditional on whether the folder's 291 // current metageneration does not match the given value. 292 optional int64 if_metageneration_not_match = 4; 293 294 // Optional. A unique identifier for this request. UUID is the recommended 295 // format, but other formats are still accepted. 296 string request_id = 5 [ 297 (google.api.field_info).format = UUID4, 298 (google.api.field_behavior) = OPTIONAL 299 ]; 300} 301 302// Request message for ListFolders. This operation is only applicable to a 303// hierarchical namespace enabled bucket. 304// Hierarchical namespace buckets are in allowlist preview. 305message ListFoldersRequest { 306 // Required. Name of the bucket in which to look for folders. The bucket must 307 // be a hierarchical namespace enabled bucket. 308 string parent = 1 [ 309 (google.api.field_behavior) = REQUIRED, 310 (google.api.resource_reference) = { 311 child_type: "storage.googleapis.com/Folder" 312 } 313 ]; 314 315 // Optional. Maximum number of folders to return in a single response. The 316 // service will use this parameter or 1,000 items, whichever is smaller. 317 int32 page_size = 2 [(google.api.field_behavior) = OPTIONAL]; 318 319 // Optional. A previously-returned page token representing part of the larger 320 // set of results to view. 321 string page_token = 3 [(google.api.field_behavior) = OPTIONAL]; 322 323 // Optional. Filter results to folders whose names begin with this prefix. 324 // If set, the value must either be an empty string or end with a '/'. 325 string prefix = 4 [(google.api.field_behavior) = OPTIONAL]; 326 327 // Optional. If set, returns results in a directory-like mode. The results 328 // will only include folders that either exactly match the above prefix, or 329 // are one level below the prefix. The only supported value is '/'. 330 string delimiter = 8 [(google.api.field_behavior) = OPTIONAL]; 331 332 // Optional. Filter results to folders whose names are lexicographically equal 333 // to or after lexicographic_start. If lexicographic_end is also set, the 334 // folders listed have names between lexicographic_start (inclusive) and 335 // lexicographic_end (exclusive). 336 string lexicographic_start = 6 [(google.api.field_behavior) = OPTIONAL]; 337 338 // Optional. Filter results to folders whose names are lexicographically 339 // before lexicographic_end. If lexicographic_start is also set, the folders 340 // listed have names between lexicographic_start (inclusive) and 341 // lexicographic_end (exclusive). 342 string lexicographic_end = 7 [(google.api.field_behavior) = OPTIONAL]; 343 344 // Optional. A unique identifier for this request. UUID is the recommended 345 // format, but other formats are still accepted. 346 string request_id = 9 [ 347 (google.api.field_info).format = UUID4, 348 (google.api.field_behavior) = OPTIONAL 349 ]; 350} 351 352// Response message for ListFolders. 353message ListFoldersResponse { 354 // The list of child folders 355 repeated Folder folders = 1; 356 357 // The continuation token, used to page through large result sets. Provide 358 // this value in a subsequent request to return the next page of results. 359 string next_page_token = 2; 360} 361 362// Request message for RenameFolder. This operation is only applicable to a 363// hierarchical namespace enabled bucket. 364// Hierarchical namespace buckets are in allowlist preview. 365message RenameFolderRequest { 366 // Required. Name of the source folder being renamed. 367 // Format: `projects/{project}/buckets/{bucket}/folders/{folder}` 368 string name = 7 [ 369 (google.api.field_behavior) = REQUIRED, 370 (google.api.resource_reference) = { type: "storage.googleapis.com/Folder" } 371 ]; 372 373 // Required. The destination folder ID, e.g. `foo/bar/`. 374 string destination_folder_id = 8 [(google.api.field_behavior) = REQUIRED]; 375 376 // Makes the operation only succeed conditional on whether the source 377 // folder's current metageneration matches the given value. 378 optional int64 if_metageneration_match = 4; 379 380 // Makes the operation only succeed conditional on whether the source 381 // folder's current metageneration does not match the given value. 382 optional int64 if_metageneration_not_match = 5; 383 384 // Optional. A unique identifier for this request. UUID is the recommended 385 // format, but other formats are still accepted. This request is only 386 // idempotent if a `request_id` is provided. 387 string request_id = 6 [ 388 (google.api.field_info).format = UUID4, 389 (google.api.field_behavior) = OPTIONAL 390 ]; 391} 392 393// The message contains metadata that is common to all Storage Control 394// long-running operations, present in its `google.longrunning.Operation` 395// messages, and accessible via `metadata.common_metadata`. 396message CommonLongRunningOperationMetadata { 397 // Output only. The time the operation was created. 398 google.protobuf.Timestamp create_time = 1 399 [(google.api.field_behavior) = OUTPUT_ONLY]; 400 401 // Output only. The time the operation finished running. 402 google.protobuf.Timestamp end_time = 2 403 [(google.api.field_behavior) = OUTPUT_ONLY]; 404 405 // Output only. The time the operation was last modified. 406 google.protobuf.Timestamp update_time = 3 407 [(google.api.field_behavior) = OUTPUT_ONLY]; 408 409 // Output only. The type of operation invoked. 410 string type = 4 [(google.api.field_behavior) = OUTPUT_ONLY]; 411 412 // Output only. Identifies whether the user has requested cancellation. 413 bool requested_cancellation = 5 [(google.api.field_behavior) = OUTPUT_ONLY]; 414 415 // Output only. The estimated progress of the operation in percentage [0, 416 // 100]. The value -1 means the progress is unknown. 417 int32 progress_percent = 6 [(google.api.field_behavior) = OUTPUT_ONLY]; 418} 419 420// Message returned in the metadata field of the Operation resource for 421// RenameFolder operations. 422message RenameFolderMetadata { 423 // Generic metadata for the long running operation. 424 CommonLongRunningOperationMetadata common_metadata = 1; 425 426 // The path of the source folder. 427 string source_folder_id = 2; 428 429 // The path of the destination folder. 430 string destination_folder_id = 3; 431} 432 433// The storage layout configuration of a bucket. 434message StorageLayout { 435 option (google.api.resource) = { 436 type: "storage.googleapis.com/StorageLayout" 437 pattern: "projects/{project}/buckets/{bucket}/storageLayout" 438 }; 439 440 // Configuration for Custom Dual Regions. It should specify precisely two 441 // eligible regions within the same Multiregion. More information on regions 442 // may be found [https://cloud.google.com/storage/docs/locations][here]. 443 message CustomPlacementConfig { 444 // List of locations to use for data placement. 445 repeated string data_locations = 1; 446 } 447 448 // Configuration for a bucket's hierarchical namespace feature. 449 message HierarchicalNamespace { 450 // Enables the hierarchical namespace feature. 451 bool enabled = 1; 452 } 453 454 // Output only. The name of the StorageLayout resource. 455 // Format: `projects/{project}/buckets/{bucket}/storageLayout` 456 string name = 1 [(google.api.field_behavior) = OUTPUT_ONLY]; 457 458 // Output only. The location of the bucket. 459 string location = 2 [(google.api.field_behavior) = OUTPUT_ONLY]; 460 461 // Output only. The location type of the bucket (region, dual-region, 462 // multi-region, etc). 463 string location_type = 3 [(google.api.field_behavior) = OUTPUT_ONLY]; 464 465 // Output only. The data placement configuration for custom dual region. If 466 // there is no configuration, this is not a custom dual region bucket. 467 CustomPlacementConfig custom_placement_config = 4 468 [(google.api.field_behavior) = OUTPUT_ONLY]; 469 470 // Output only. The bucket's hierarchical namespace configuration. If there is 471 // no configuration, the hierarchical namespace is disabled. 472 HierarchicalNamespace hierarchical_namespace = 5 473 [(google.api.field_behavior) = OUTPUT_ONLY]; 474} 475 476// Request message for GetStorageLayout. 477message GetStorageLayoutRequest { 478 // Required. The name of the StorageLayout resource. 479 // Format: `projects/{project}/buckets/{bucket}/storageLayout` 480 string name = 1 [ 481 (google.api.field_behavior) = REQUIRED, 482 (google.api.resource_reference) = { 483 type: "storage.googleapis.com/StorageLayout" 484 } 485 ]; 486 487 // An optional prefix used for permission check. It is useful when the caller 488 // only has limited permissions under a specific prefix. 489 string prefix = 2; 490 491 // Optional. A unique identifier for this request. UUID is the recommended 492 // format, but other formats are still accepted. 493 string request_id = 3 [ 494 (google.api.field_info).format = UUID4, 495 (google.api.field_behavior) = OPTIONAL 496 ]; 497} 498 499// A managed folder. 500message ManagedFolder { 501 option (google.api.resource) = { 502 type: "storage.googleapis.com/ManagedFolder" 503 pattern: "projects/{project}/buckets/{bucket}/managedFolders/{managedFolder=**}" 504 plural: "managedFolders" 505 singular: "managedFolder" 506 }; 507 508 // Identifier. The name of this managed folder. 509 // Format: 510 // `projects/{project}/buckets/{bucket}/managedFolders/{managedFolder}` 511 string name = 1 [(google.api.field_behavior) = IDENTIFIER]; 512 513 // Output only. The metadata version of this managed folder. It increases 514 // whenever the metadata is updated. Used for preconditions and for detecting 515 // changes in metadata. Managed folders don't have a generation number. 516 int64 metageneration = 3 [(google.api.field_behavior) = OUTPUT_ONLY]; 517 518 // Output only. The creation time of the managed folder. 519 google.protobuf.Timestamp create_time = 4 520 [(google.api.field_behavior) = OUTPUT_ONLY]; 521 522 // Output only. The modification time of the managed folder. 523 google.protobuf.Timestamp update_time = 5 524 [(google.api.field_behavior) = OUTPUT_ONLY]; 525} 526 527// Request message for GetManagedFolder. 528message GetManagedFolderRequest { 529 // Required. Name of the managed folder. 530 // Format: 531 // `projects/{project}/buckets/{bucket}/managedFolders/{managedFolder}` 532 string name = 6 [ 533 (google.api.field_behavior) = REQUIRED, 534 (google.api.resource_reference) = { 535 type: "storage.googleapis.com/ManagedFolder" 536 } 537 ]; 538 539 // The operation succeeds conditional on the managed folder's current 540 // metageneration matching the value here specified. 541 optional int64 if_metageneration_match = 3; 542 543 // The operation succeeds conditional on the managed folder's current 544 // metageneration NOT matching the value here specified. 545 optional int64 if_metageneration_not_match = 4; 546 547 // Optional. A unique identifier for this request. UUID is the recommended 548 // format, but other formats are still accepted. 549 string request_id = 5 [ 550 (google.api.field_info).format = UUID4, 551 (google.api.field_behavior) = OPTIONAL 552 ]; 553} 554 555// Request message for CreateManagedFolder. 556message CreateManagedFolderRequest { 557 // Required. Name of the bucket this managed folder belongs to. 558 string parent = 1 [ 559 (google.api.field_behavior) = REQUIRED, 560 (google.api.resource_reference) = { 561 child_type: "storage.googleapis.com/ManagedFolder" 562 } 563 ]; 564 565 // Required. Properties of the managed folder being created. 566 // The bucket and managed folder names are specified in the `parent` and 567 // `managed_folder_id` fields. Populating these fields in `managed_folder` 568 // will result in an error. 569 ManagedFolder managed_folder = 2 [(google.api.field_behavior) = REQUIRED]; 570 571 // Required. The name of the managed folder. It uses a single `/` as delimiter 572 // and leading and trailing `/` are allowed. 573 string managed_folder_id = 3 [(google.api.field_behavior) = REQUIRED]; 574 575 // Optional. A unique identifier for this request. UUID is the recommended 576 // format, but other formats are still accepted. 577 string request_id = 4 [ 578 (google.api.field_info).format = UUID4, 579 (google.api.field_behavior) = OPTIONAL 580 ]; 581} 582 583// DeleteManagedFolder RPC request message. 584message DeleteManagedFolderRequest { 585 // Required. Name of the managed folder. 586 // Format: 587 // `projects/{project}/buckets/{bucket}/managedFolders/{managedFolder}` 588 string name = 7 [ 589 (google.api.field_behavior) = REQUIRED, 590 (google.api.resource_reference) = { 591 type: "storage.googleapis.com/ManagedFolder" 592 } 593 ]; 594 595 // The operation succeeds conditional on the managed folder's current 596 // metageneration matching the value here specified. 597 optional int64 if_metageneration_match = 3; 598 599 // The operation succeeds conditional on the managed folder's current 600 // metageneration NOT matching the value here specified. 601 optional int64 if_metageneration_not_match = 4; 602 603 // Allows deletion of a managed folder even if it is not empty. 604 // A managed folder is empty if it manages no child managed folders or 605 // objects. Caller must have permission for 606 // storage.managedFolders.setIamPolicy. 607 bool allow_non_empty = 5; 608 609 // Optional. A unique identifier for this request. UUID is the recommended 610 // format, but other formats are still accepted. 611 string request_id = 6 [ 612 (google.api.field_info).format = UUID4, 613 (google.api.field_behavior) = OPTIONAL 614 ]; 615} 616 617// Request message for ListManagedFolders. 618message ListManagedFoldersRequest { 619 // Required. Name of the bucket this managed folder belongs to. 620 string parent = 1 [ 621 (google.api.field_behavior) = REQUIRED, 622 (google.api.resource_reference) = { 623 child_type: "storage.googleapis.com/ManagedFolder" 624 } 625 ]; 626 627 // Optional. Maximum number of managed folders to return in a single response. 628 // The service will use this parameter or 1,000 items, whichever is smaller. 629 int32 page_size = 2 [(google.api.field_behavior) = OPTIONAL]; 630 631 // Optional. A previously-returned page token representing part of the larger 632 // set of results to view. 633 string page_token = 3 [(google.api.field_behavior) = OPTIONAL]; 634 635 // Optional. Filter results to match managed folders with name starting with 636 // this prefix. 637 string prefix = 4 [(google.api.field_behavior) = OPTIONAL]; 638 639 // Optional. A unique identifier for this request. UUID is the recommended 640 // format, but other formats are still accepted. 641 string request_id = 5 [ 642 (google.api.field_info).format = UUID4, 643 (google.api.field_behavior) = OPTIONAL 644 ]; 645} 646 647// Response message for ListManagedFolders. 648message ListManagedFoldersResponse { 649 // The list of matching managed folders 650 repeated ManagedFolder managed_folders = 1; 651 652 // The continuation token, used to page through large result sets. Provide 653 // this value in a subsequent request to return the next page of results. 654 string next_page_token = 2; 655} 656