diff --git a/apis/Google.Cloud.Storage.V1/Google.Cloud.Storage.V1.IntegrationTests/GetBucketTest.cs b/apis/Google.Cloud.Storage.V1/Google.Cloud.Storage.V1.IntegrationTests/GetBucketTest.cs
new file mode 100644
index 000000000000..7b8245c90f42
--- /dev/null
+++ b/apis/Google.Cloud.Storage.V1/Google.Cloud.Storage.V1.IntegrationTests/GetBucketTest.cs
@@ -0,0 +1,44 @@
+// 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.
+
+using System;
+using System.Threading.Tasks;
+using Xunit;
+
+namespace Google.Cloud.Storage.V1.IntegrationTests;
+
+[Collection(nameof(StorageFixture))]
+public class GetBucketTest
+{
+ private readonly StorageFixture _fixture;
+
+ public GetBucketTest(StorageFixture fixture)
+ {
+ _fixture = fixture;
+ }
+
+ [Fact]
+ public async Task SoftDeleted()
+ {
+ var bucketName = _fixture.GenerateBucketName();
+ var softDeleteBucket = _fixture.CreateBucket(bucketName, multiVersion: false, softDelete: true);
+ await _fixture.Client.DeleteBucketAsync(softDeleteBucket.Name, new DeleteBucketOptions { DeleteObjects = true });
+
+ var softDeleted = await _fixture.Client.GetBucketAsync(softDeleteBucket.Name, new GetBucketOptions { SoftDeleted = true, Generation = softDeleteBucket.Generation });
+ Assert.Equal(softDeleteBucket.Name, softDeleted.Name);
+ Assert.Equal(softDeleteBucket.Generation, softDeleted.Generation);
+ Assert.NotNull(softDeleted.SoftDeleteTimeDateTimeOffset);
+ Assert.NotNull(softDeleted.HardDeleteTimeDateTimeOffset);
+ }
+}
diff --git a/apis/Google.Cloud.Storage.V1/Google.Cloud.Storage.V1.IntegrationTests/ListBucketsTest.cs b/apis/Google.Cloud.Storage.V1/Google.Cloud.Storage.V1.IntegrationTests/ListBucketsTest.cs
index c4f6f04799a1..db43f91829cb 100644
--- a/apis/Google.Cloud.Storage.V1/Google.Cloud.Storage.V1.IntegrationTests/ListBucketsTest.cs
+++ b/apis/Google.Cloud.Storage.V1/Google.Cloud.Storage.V1.IntegrationTests/ListBucketsTest.cs
@@ -75,6 +75,32 @@ public void PartialResponses()
}
}
+ [Fact]
+ public async Task SoftDeletedOnly()
+ {
+ var bucketName = _fixture.GenerateBucketName();
+ var softDeleteBucket = _fixture.CreateBucket(bucketName, multiVersion: false, softDelete: true);
+
+ await _fixture.Client.DeleteBucketAsync(softDeleteBucket.Name, new DeleteBucketOptions { DeleteObjects = true });
+
+ var actualBuckets = await _fixture.Client
+ .ListBucketsAsync(_fixture.ProjectId, new ListBucketsOptions { SoftDeletedOnly = true })
+ .ToListAsync();
+
+ // Check the list cotains the bucket we just soft-deleted.
+ Assert.Contains(actualBuckets, bucket => bucket.Name == softDeleteBucket.Name && bucket.Generation == softDeleteBucket.Generation);
+ // Check all the buckets in the list are soft-deleted buckets.
+ Assert.All(actualBuckets, AssertSoftDeletedBucket);
+ }
+
+ // Validates that the given bucket is soft-deleted.
+ private void AssertSoftDeletedBucket(Bucket b)
+ {
+ Assert.NotNull(b.Generation);
+ Assert.NotNull(b.HardDeleteTimeDateTimeOffset);
+ Assert.NotNull(b.SoftDeleteTimeDateTimeOffset);
+ }
+
// Fetches buckets using the given options in each possible way, validating that the expected bucket names are returned.
private async Task AssertBuckets(ListBucketsOptions options, params string[] expectedBucketNames)
{
diff --git a/apis/Google.Cloud.Storage.V1/Google.Cloud.Storage.V1.IntegrationTests/RestoreBucketTest.cs b/apis/Google.Cloud.Storage.V1/Google.Cloud.Storage.V1.IntegrationTests/RestoreBucketTest.cs
new file mode 100644
index 000000000000..b1652f54db26
--- /dev/null
+++ b/apis/Google.Cloud.Storage.V1/Google.Cloud.Storage.V1.IntegrationTests/RestoreBucketTest.cs
@@ -0,0 +1,42 @@
+// Copyright 2024 Google Inc. All Rights Reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+using System;
+using System.Threading.Tasks;
+using Xunit;
+
+namespace Google.Cloud.Storage.V1.IntegrationTests;
+
+[Collection(nameof(StorageFixture))]
+public class RestoreBucketTest
+{
+ private readonly StorageFixture _fixture;
+
+ public RestoreBucketTest(StorageFixture fixture)
+ {
+ _fixture = fixture;
+ }
+
+ [Fact]
+ public async Task RestoreSoftDeletedBucket()
+ {
+ var bucketName = _fixture.GenerateBucketName();
+ var softDeleteBucket = _fixture.CreateBucket(bucketName, multiVersion: false, softDelete: true);
+ await _fixture.Client.DeleteBucketAsync(softDeleteBucket.Name, new DeleteBucketOptions { DeleteObjects = true });
+
+ var restoredBucket = await _fixture.Client.RestoreBucketAsync(softDeleteBucket.Name, softDeleteBucket.Generation.Value);
+ Assert.Equal(softDeleteBucket.Name, restoredBucket.Name);
+ Assert.Equal(softDeleteBucket.Generation, restoredBucket.Generation);
+ }
+}
diff --git a/apis/Google.Cloud.Storage.V1/Google.Cloud.Storage.V1.Tests/GetBucketOptionsTest.cs b/apis/Google.Cloud.Storage.V1/Google.Cloud.Storage.V1.Tests/GetBucketOptionsTest.cs
index abdb68f17624..99127c183440 100644
--- a/apis/Google.Cloud.Storage.V1/Google.Cloud.Storage.V1.Tests/GetBucketOptionsTest.cs
+++ b/apis/Google.Cloud.Storage.V1/Google.Cloud.Storage.V1.Tests/GetBucketOptionsTest.cs
@@ -31,6 +31,8 @@ public void ModifyRequest_DefaultOptions()
Assert.Null(request.IfMetagenerationNotMatch);
Assert.Null(request.Projection);
Assert.Null(request.UserProject);
+ Assert.Null(request.SoftDeleted);
+ Assert.Null(request.Generation);
}
[Fact]
@@ -41,13 +43,17 @@ public void ModifyRequest_PositiveMatchOptions()
{
IfMetagenerationMatch = 1L,
Projection = Projection.Full,
- UserProject = "proj"
+ UserProject = "proj",
+ SoftDeleted = true,
+ Generation = long.MaxValue
};
options.ModifyRequest(request);
Assert.Equal(1L, request.IfMetagenerationMatch);
Assert.Null(request.IfMetagenerationNotMatch);
Assert.Equal(ProjectionEnum.Full, request.Projection);
Assert.Equal("proj", request.UserProject);
+ Assert.True(request.SoftDeleted);
+ Assert.Equal(long.MaxValue, request.Generation);
}
[Fact]
diff --git a/apis/Google.Cloud.Storage.V1/Google.Cloud.Storage.V1.Tests/ListBucketsOptionsTest.cs b/apis/Google.Cloud.Storage.V1/Google.Cloud.Storage.V1.Tests/ListBucketsOptionsTest.cs
index f4868acd6c0a..2a9172fb5666 100644
--- a/apis/Google.Cloud.Storage.V1/Google.Cloud.Storage.V1.Tests/ListBucketsOptionsTest.cs
+++ b/apis/Google.Cloud.Storage.V1/Google.Cloud.Storage.V1.Tests/ListBucketsOptionsTest.cs
@@ -30,6 +30,7 @@ public void ModifyRequest_DefaultOptions()
Assert.Null(request.Prefix);
Assert.Null(request.MaxResults);
Assert.Null(request.PageToken);
+ Assert.Null(request.SoftDeleted);
}
[Fact]
@@ -42,7 +43,8 @@ public void ModifyRequest_AllOptions()
Prefix = "prefix",
Projection = Projection.Full,
PageToken = "nextpage",
- Fields = "items(name),nextPageToken"
+ Fields = "items(name),nextPageToken",
+ SoftDeletedOnly = true,
};
options.ModifyRequest(request);
Assert.Equal(10, request.MaxResults);
@@ -50,6 +52,7 @@ public void ModifyRequest_AllOptions()
Assert.Equal(ProjectionEnum.Full, request.Projection);
Assert.Equal("nextpage", request.PageToken);
Assert.Equal("items(name),nextPageToken", request.Fields);
+ Assert.True(request.SoftDeleted);
}
}
}
diff --git a/apis/Google.Cloud.Storage.V1/Google.Cloud.Storage.V1.Tests/RestoreBucketOptionsTest.cs b/apis/Google.Cloud.Storage.V1/Google.Cloud.Storage.V1.Tests/RestoreBucketOptionsTest.cs
new file mode 100644
index 000000000000..c83b90a8d528
--- /dev/null
+++ b/apis/Google.Cloud.Storage.V1/Google.Cloud.Storage.V1.Tests/RestoreBucketOptionsTest.cs
@@ -0,0 +1,45 @@
+// 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.
+
+using Xunit;
+using static Google.Apis.Storage.v1.BucketsResource;
+using static Google.Apis.Storage.v1.BucketsResource.RestoreRequest;
+
+namespace Google.Cloud.Storage.V1.Tests;
+public class RestoreBucketOptionsTest
+{
+ [Fact]
+ public void ModifyRequest_DefaultOptions()
+ {
+ var request = new RestoreRequest(null, "bucket", 2L);
+ var options = new RestoreBucketOptions();
+ options.ModifyRequest(request);
+ Assert.Null(request.Projection);
+ Assert.Null(request.UserProject);
+ }
+
+ [Fact]
+ public void ModifyRequest_AllOptions()
+ {
+ var request = new RestoreRequest(null, "bucket", 2L);
+ var options = new RestoreBucketOptions
+ {
+ Projection = Projection.Full,
+ UserProject = "proj"
+ };
+ options.ModifyRequest(request);
+ Assert.Equal(ProjectionEnum.Full, request.Projection);
+ Assert.Equal("proj", request.UserProject);
+ }
+}
diff --git a/apis/Google.Cloud.Storage.V1/Google.Cloud.Storage.V1/GetBucketOptions.cs b/apis/Google.Cloud.Storage.V1/Google.Cloud.Storage.V1/GetBucketOptions.cs
index 266dab4389f6..ab7741a39601 100644
--- a/apis/Google.Cloud.Storage.V1/Google.Cloud.Storage.V1/GetBucketOptions.cs
+++ b/apis/Google.Cloud.Storage.V1/Google.Cloud.Storage.V1/GetBucketOptions.cs
@@ -52,6 +52,17 @@ public sealed class GetBucketOptions
///
public RetryOptions RetryOptions { get; set; }
+ ///
+ /// The bucket generation to be retrieved. It must be set if is true.
+ ///
+ public long? Generation { get; set; }
+
+ ///
+ /// If true, the soft-deleted version of the bucket will be retrieved.
+ /// If true, must be set.
+ ///
+ public bool? SoftDeleted { get; set; }
+
internal void ModifyRequest(GetRequest request)
{
if (IfMetagenerationMatch != null && IfMetagenerationNotMatch != null)
@@ -75,6 +86,15 @@ internal void ModifyRequest(GetRequest request)
{
request.UserProject = UserProject;
}
+ if (Generation != null)
+ {
+ request.Generation = Generation;
+ }
+ if (SoftDeleted != null)
+ {
+ request.SoftDeleted = SoftDeleted;
+ }
+
}
}
}
diff --git a/apis/Google.Cloud.Storage.V1/Google.Cloud.Storage.V1/Google.Cloud.Storage.V1.csproj b/apis/Google.Cloud.Storage.V1/Google.Cloud.Storage.V1/Google.Cloud.Storage.V1.csproj
index 9cfae17c9fd9..a76376d4c6eb 100644
--- a/apis/Google.Cloud.Storage.V1/Google.Cloud.Storage.V1/Google.Cloud.Storage.V1.csproj
+++ b/apis/Google.Cloud.Storage.V1/Google.Cloud.Storage.V1/Google.Cloud.Storage.V1.csproj
@@ -10,7 +10,7 @@
-
+
@@ -23,4 +23,4 @@
UrlSigner.cs
-
\ No newline at end of file
+
diff --git a/apis/Google.Cloud.Storage.V1/Google.Cloud.Storage.V1/ListBucketsOptions.cs b/apis/Google.Cloud.Storage.V1/Google.Cloud.Storage.V1/ListBucketsOptions.cs
index 3fe2fccd2110..13881e8bce8f 100644
--- a/apis/Google.Cloud.Storage.V1/Google.Cloud.Storage.V1/ListBucketsOptions.cs
+++ b/apis/Google.Cloud.Storage.V1/Google.Cloud.Storage.V1/ListBucketsOptions.cs
@@ -62,6 +62,11 @@ public sealed class ListBucketsOptions
///
public RetryOptions RetryOptions { get; set; }
+ ///
+ /// If true, only soft-deleted buckets will be listed. The default is false.
+ ///
+ public bool? SoftDeletedOnly { get; set; }
+
///
/// Modifies the specified request for all non-null properties of this options object.
///
@@ -88,6 +93,10 @@ internal void ModifyRequest(ListRequest request)
{
request.Fields = Fields;
}
+ if (SoftDeletedOnly != null)
+ {
+ request.SoftDeleted = SoftDeletedOnly;
+ }
}
}
}
diff --git a/apis/Google.Cloud.Storage.V1/Google.Cloud.Storage.V1/RestoreBucketOptions.cs b/apis/Google.Cloud.Storage.V1/Google.Cloud.Storage.V1/RestoreBucketOptions.cs
new file mode 100644
index 000000000000..d89bd396f4ff
--- /dev/null
+++ b/apis/Google.Cloud.Storage.V1/Google.Cloud.Storage.V1/RestoreBucketOptions.cs
@@ -0,0 +1,55 @@
+// 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.
+
+using Google.Api.Gax;
+using static Google.Apis.Storage.v1.BucketsResource;
+using static Google.Apis.Storage.v1.BucketsResource.RestoreRequest;
+
+namespace Google.Cloud.Storage.V1;
+
+///
+/// Options for RestoreBucket operations.
+///
+public sealed class RestoreBucketOptions
+{
+ ///
+ /// The projection of the restored bucket to return. Note the whole bucket will be restored,
+ /// except for the bucket's access controls. This only affects
+ /// what information is returned when restoration is successful.
+ ///
+ public Projection? Projection { get; set; }
+
+ ///
+ /// If set, this is the ID of the project which will be billed for the request.
+ /// The caller must have suitable permissions for the project being billed.
+ ///
+ public string UserProject { get; set; }
+
+ ///
+ /// Options to pass custom retry configuration for each API request.
+ ///
+ public RetryOptions RetryOptions { get; set; }
+
+ internal void ModifyRequest(RestoreRequest request)
+ {
+ if (Projection != null)
+ {
+ request.Projection = GaxPreconditions.CheckEnumValue((ProjectionEnum) Projection, nameof(Projection));
+ }
+ if (UserProject != null)
+ {
+ request.UserProject = UserProject;
+ }
+ }
+}
diff --git a/apis/Google.Cloud.Storage.V1/Google.Cloud.Storage.V1/StorageClient.RestoreBucket.cs b/apis/Google.Cloud.Storage.V1/Google.Cloud.Storage.V1/StorageClient.RestoreBucket.cs
new file mode 100644
index 000000000000..37f7b707120f
--- /dev/null
+++ b/apis/Google.Cloud.Storage.V1/Google.Cloud.Storage.V1/StorageClient.RestoreBucket.cs
@@ -0,0 +1,49 @@
+// 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.
+
+using System;
+using System.Threading;
+using System.Threading.Tasks;
+using Bucket = Google.Apis.Storage.v1.Data.Bucket;
+
+namespace Google.Cloud.Storage.V1;
+public abstract partial class StorageClient
+{
+ ///
+ /// Restores a soft-deleted bucket.
+ ///
+ /// The name of the bucket. Must not be null.
+ /// The specific revision of the bucket to restore.
+ /// Additional options for the restore operation. May be null, in which case appropriate
+ /// defaults will be used.
+ /// The representation of the restored Storage bucket.
+ public virtual Bucket RestoreBucket(string bucket, long generation, RestoreBucketOptions options = null) =>
+ throw new NotImplementedException();
+
+ ///
+ /// Restores a soft-deleted bucket.
+ ///
+ /// The name of the bucket. Must not be null.
+ /// The specific revision of the bucket to restore.
+ /// Additional options for the restore operation. May be null, in which case appropriate
+ /// defaults will be used.
+ /// The token to monitor for cancellation requests.
+ /// A task representing the asynchronous operation, with a result returning the
+ /// representation of the restored Storage bucket.
+ public virtual Task RestoreBucketAsync(
+ string bucket,
+ long generation,
+ RestoreBucketOptions options = null,
+ CancellationToken cancellationToken = default) => throw new NotImplementedException();
+}
diff --git a/apis/Google.Cloud.Storage.V1/Google.Cloud.Storage.V1/StorageClientImpl.RestoreBucket.cs b/apis/Google.Cloud.Storage.V1/Google.Cloud.Storage.V1/StorageClientImpl.RestoreBucket.cs
new file mode 100644
index 000000000000..a236082f58ff
--- /dev/null
+++ b/apis/Google.Cloud.Storage.V1/Google.Cloud.Storage.V1/StorageClientImpl.RestoreBucket.cs
@@ -0,0 +1,44 @@
+// 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.
+
+using Google.Apis.Storage.v1;
+using System.Threading;
+using System.Threading.Tasks;
+using Bucket = Google.Apis.Storage.v1.Data.Bucket;
+
+namespace Google.Cloud.Storage.V1;
+public sealed partial class StorageClientImpl : StorageClient
+{
+ ///
+ public override Bucket RestoreBucket(string bucket, long generation, RestoreBucketOptions options = null) =>
+ CreateRestoreBucketRequest(bucket, generation, options).Execute();
+
+ ///
+ public override Task RestoreBucketAsync(
+ string bucket,
+ long generation,
+ RestoreBucketOptions options = null,
+ CancellationToken cancellationToken = default) =>
+ CreateRestoreBucketRequest(bucket, generation, options).ExecuteAsync(cancellationToken);
+
+ private BucketsResource.RestoreRequest CreateRestoreBucketRequest(string bucket, long generation, RestoreBucketOptions options)
+ {
+ ValidateBucketName(bucket);
+ var request = Service.Buckets.Restore(bucket, generation);
+ options?.ModifyRequest(request);
+ RetryOptions retryOptions = options?.RetryOptions ?? RetryOptions.IdempotentRetryOptions;
+ MarkAsRetriable(request, retryOptions);
+ return request;
+ }
+}
diff --git a/apis/Google.Maps.Places.V1/Google.Maps.Places.V1/PlacesClient.g.cs b/apis/Google.Maps.Places.V1/Google.Maps.Places.V1/PlacesClient.g.cs
index 408e364549ff..f26eaa962698 100644
--- a/apis/Google.Maps.Places.V1/Google.Maps.Places.V1/PlacesClient.g.cs
+++ b/apis/Google.Maps.Places.V1/Google.Maps.Places.V1/PlacesClient.g.cs
@@ -186,8 +186,16 @@ public abstract partial class PlacesClient
public static string DefaultEndpoint { get; } = "places.googleapis.com:443";
/// The default Places scopes.
- /// The default Places scopes are:
- public static scg::IReadOnlyList DefaultScopes { get; } = new sco::ReadOnlyCollection(new string[] { });
+ ///
+ /// The default Places scopes are:
+ ///
+ /// - https://www.googleapis.com/auth/cloud-platform
+ ///
+ ///
+ public static scg::IReadOnlyList DefaultScopes { get; } = new sco::ReadOnlyCollection(new string[]
+ {
+ "https://www.googleapis.com/auth/cloud-platform",
+ });
/// The service metadata associated with this client type.
public static gaxgrpc::ServiceMetadata ServiceMetadata { get; } = new gaxgrpc::ServiceMetadata(Places.Descriptor, DefaultEndpoint, DefaultScopes, true, gax::ApiTransports.Grpc | gax::ApiTransports.Rest, PackageApiMetadata.ApiMetadata);
diff --git a/apis/Google.Maps.Places.V1/Google.Maps.Places.V1/PlacesService.g.cs b/apis/Google.Maps.Places.V1/Google.Maps.Places.V1/PlacesService.g.cs
index f15a8a521755..1e7f646d277d 100644
--- a/apis/Google.Maps.Places.V1/Google.Maps.Places.V1/PlacesService.g.cs
+++ b/apis/Google.Maps.Places.V1/Google.Maps.Places.V1/PlacesService.g.cs
@@ -152,7 +152,7 @@ static PlacesServiceReflection() {
"U3VnZ2VzdGlvbi5Gb3JtYXR0YWJsZVRleHQSaAoRc3RydWN0dXJlZF9mb3Jt",
"YXQYAiABKAsyTS5nb29nbGUubWFwcy5wbGFjZXMudjEuQXV0b2NvbXBsZXRl",
"UGxhY2VzUmVzcG9uc2UuU3VnZ2VzdGlvbi5TdHJ1Y3R1cmVkRm9ybWF0QgYK",
- "BGtpbmQy4QUKBlBsYWNlcxKLAQoMU2VhcmNoTmVhcmJ5EiouZ29vZ2xlLm1h",
+ "BGtpbmQykgYKBlBsYWNlcxKLAQoMU2VhcmNoTmVhcmJ5EiouZ29vZ2xlLm1h",
"cHMucGxhY2VzLnYxLlNlYXJjaE5lYXJieVJlcXVlc3QaKy5nb29nbGUubWFw",
"cy5wbGFjZXMudjEuU2VhcmNoTmVhcmJ5UmVzcG9uc2UiIoLT5JMCHCIXL3Yx",
"L3BsYWNlczpzZWFyY2hOZWFyYnk6ASoSgwEKClNlYXJjaFRleHQSKC5nb29n",
@@ -168,11 +168,12 @@ static PlacesServiceReflection() {
"Z29vZ2xlLm1hcHMucGxhY2VzLnYxLkF1dG9jb21wbGV0ZVBsYWNlc1JlcXVl",
"c3QaMS5nb29nbGUubWFwcy5wbGFjZXMudjEuQXV0b2NvbXBsZXRlUGxhY2Vz",
"UmVzcG9uc2UiIoLT5JMCHCIXL3YxL3BsYWNlczphdXRvY29tcGxldGU6ASoa",
- "GMpBFXBsYWNlcy5nb29nbGVhcGlzLmNvbUKjAQoZY29tLmdvb2dsZS5tYXBz",
- "LnBsYWNlcy52MUISUGxhY2VzU2VydmljZVByb3RvUAFaN2Nsb3VkLmdvb2ds",
- "ZS5jb20vZ28vbWFwcy9wbGFjZXMvYXBpdjEvcGxhY2VzcGI7cGxhY2VzcGKi",
- "AgZHTVBTVjGqAhVHb29nbGUuTWFwcy5QbGFjZXMuVjHKAhVHb29nbGVcTWFw",
- "c1xQbGFjZXNcVjFiBnByb3RvMw=="));
+ "ScpBFXBsYWNlcy5nb29nbGVhcGlzLmNvbdJBLmh0dHBzOi8vd3d3Lmdvb2ds",
+ "ZWFwaXMuY29tL2F1dGgvY2xvdWQtcGxhdGZvcm1CowEKGWNvbS5nb29nbGUu",
+ "bWFwcy5wbGFjZXMudjFCElBsYWNlc1NlcnZpY2VQcm90b1ABWjdjbG91ZC5n",
+ "b29nbGUuY29tL2dvL21hcHMvcGxhY2VzL2FwaXYxL3BsYWNlc3BiO3BsYWNl",
+ "c3BiogIGR01QU1YxqgIVR29vZ2xlLk1hcHMuUGxhY2VzLlYxygIVR29vZ2xl",
+ "XE1hcHNcUGxhY2VzXFYxYgZwcm90bzM="));
descriptor = pbr::FileDescriptor.FromGeneratedCode(descriptorData,
new pbr::FileDescriptor[] { global::Google.Api.AnnotationsReflection.Descriptor, global::Google.Api.ClientReflection.Descriptor, global::Google.Api.FieldBehaviorReflection.Descriptor, global::Google.Api.ResourceReflection.Descriptor, global::Google.Geo.Type.ViewportReflection.Descriptor, global::Google.Maps.Places.V1.ContextualContentReflection.Descriptor, global::Google.Maps.Places.V1.EvChargingReflection.Descriptor, global::Google.Maps.Places.V1.GeometryReflection.Descriptor, global::Google.Maps.Places.V1.PlaceReflection.Descriptor, global::Google.Maps.Places.V1.PolylineReflection.Descriptor, global::Google.Maps.Places.V1.RouteModifiersReflection.Descriptor, global::Google.Maps.Places.V1.RoutingPreferenceReflection.Descriptor, global::Google.Maps.Places.V1.RoutingSummaryReflection.Descriptor, global::Google.Maps.Places.V1.TravelModeReflection.Descriptor, global::Google.Type.LatlngReflection.Descriptor, },
new pbr::GeneratedClrTypeInfo(null, null, new pbr::GeneratedClrTypeInfo[] {
diff --git a/generator-input/apis.json b/generator-input/apis.json
index 364541b497fb..ab03c7130f91 100644
--- a/generator-input/apis.json
+++ b/generator-input/apis.json
@@ -5152,7 +5152,7 @@
"description": "Recommended Google client library to access the Google Cloud Storage API. It wraps the Google.Apis.Storage.v1 client library, making common operations simpler in client code. Google Cloud Storage stores and retrieves potentially large, immutable data objects.",
"dependencies": {
"Google.Api.Gax.Rest": "default",
- "Google.Apis.Storage.v1": "1.68.0.3431"
+ "Google.Apis.Storage.v1": "1.68.0.3604"
},
"testDependencies": {
"Google.Api.Gax.Testing": "default",