• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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